import axios from "axios"; import keycloak from "./keycloak"; import { get } from "http"; import { ActiviteDTO, AdminDTO, AthleteDTO, CoachDTO, SessionDTO } from "./classesDTO"; const api = axios.create({ baseURL: "http://localhost:8081/api", headers: { "Content-Type": "application/json", }, withCredentials: true, }); // Simple interceptor to ensure headers object exists; actual token should be set via setAuthToken() api.interceptors.request.use((config) => { if (keycloak?.token) { // eslint-disable-next-line no-param-reassign config.headers.Authorization = `Bearer ${keycloak.token}`; } return config; }); // Helpers to set/clear the Authorization header programmatically (call after Keycloak login) export function setAuthToken(token: string | null | undefined) { if (token) { api.defaults.headers.common["Authorization"] = `Bearer ${token}`; } else { delete api.defaults.headers.common["Authorization"]; } } export function clearAuthToken() { delete api.defaults.headers.common["Authorization"]; } export const athleteService = { // controller is mounted at /athlete create: (data: any) => api.post("/athlete/create", data), getAll: () => api.get("/athlete/all"), getById: (id: number | string) => api.get(`/athlete/${id}`), getByKeycloakId: (keycloakId: string) => api.get(`/athlete/keycloak/${encodeURIComponent(keycloakId)}`), update: (id: number | string, data: any) => api.put(`/athlete/${id}`, data), delete: (id: number | string) => api.delete(`/athlete/${id}`), // session-related endpoints exposed by AthleteResource getSessionsForAthlete: (athleteId: number | null) => api.get(`/athlete/athlete/${athleteId}/session`), getAllSessions: () => api.get(`/athletes/session`), getActivitiesForSession: (sessionId: number | string) => api.get(`/athletes/session/${sessionId}/activities`), getSessionsAfterDate: (athleteId: number | string, date: string) => api.get(`/athletes/${athleteId}/session/after/${encodeURIComponent(date)}`), getSessionsBetweenDates: (athleteId: number | string, startDate: string, endDate: string) => api.get(`/athletes/${athleteId}/session/between/${encodeURIComponent(startDate)}/${encodeURIComponent(endDate)}`), addActivity: (id_sess: number, id_act: number) => api.get(`/${id_sess}/activities/add/${id_act}`), getGroupes: (athleteId: number | string) => api.get(`/athlete/${athleteId}/groupes`), }; export const activiteService = { create: (data: any) => api.post("/activite/create", data), delete: (id: number | string) => api.delete(`/activite/delete/${id}`), update: (id: number | string, data: ActiviteDTO) => api.post(`/activite/update/${id}`, data), getById: (id: number | string) => api.get(`/activite/${id}`), getAll: () => api.get(`/activite/all`), getByTheme: (theme: string) => api.get(`/activite/theme/${encodeURIComponent(theme)}`), getDataActivite: (id: number | string) => api.get(`/activite/${id}`), }; export const sessionService = { // controller uses singular /session/* endpoints create: (data: any) => api.post(`/session/create`, data), getAll: () => api.get(`/session/all`), getById: (id: number | null) => api.get(`/session/${id}`), delete: (id: number | null) => api.delete(`/session/delete/${id}`), update: (id: number | null, data: any) => api.put(`/session/update/${id}`, data), getActivities: (sessionId: number | null) => api.get(`/session/${sessionId}/activities`), addActivity: (sessionId: number | null, activityId: number) => api.post(`/session/${sessionId}/activities/${activityId}`), getGroupe: (sessionId: number | null) => api.get(`/session/${sessionId}/groupe`), subscribe: (sessionId: number | null, userId: number) => api.put(`/session/${sessionId}/subscribe/${userId}`), unsubscribe: (sessionId: number | null, userId: number) => api.put(`/session/${sessionId}/unsubscribe/${userId}`), }; export const coachService = { // controller doesn't declare a class-level path consistently; support both common patterns create: (data: any) => api.post(`/coach/create`, data), getAll: () => api.get(`/coach/all`), getById: (id: number) => api.get(`/coach/${id}`), getByKeycloakId: (keycloakId: string) => api.get(`/coach/keycloak/${keycloakId}`), update: (id: number | string, data: any) => api.put(`/coach/update/${id}`, data), delete: (id: number | string) => api.delete(`/coach/delete/${id}`), getSessionsForCoach: (coachId: number | null) => api.get(`/coach/${coachId}/session`), }; export const userService = { getById: (id: number) => api.get(`/users/${id}`), getByKeycloakId: (keycloak_id: string) => api.get(`/users/keycloak/${keycloak_id}`), getAll: () => api.get(`/users/all`), sync: () => api.post(`/users/sync`), }; export const adminService = { getByKeycloakId: (keycloak_id: string) => api.get(`/admin/keycloak/${keycloak_id}`), getById: (id: number | string) => api.get(`/admin/${id}`), }; export default api;