const BASE_URL = import.meta.env.VITE_API_URL; const makePostRequest = async ( url: string, body: object, error = "Une erreur est survenue", method = "POST" ) => { const response = await fetch(BASE_URL + url, { method, headers: { "Content-Type": "application/json", "Accept": "application/json", }, body: JSON.stringify(body), credentials: "include", // Include cookies for authentication }); const data = await response.json(); if (!response.ok) throw new Error(data.error || error); return data?.data || data; }; // TODO: Use swr or react-query for caching and revalidation // TODO: Cache all to localStorage or IndexedDB for offline support const makeRequest = async ( url: string, error = "Une erreur est survenue", ) => { const response = await fetch(BASE_URL + url, { credentials: "include"}); const data = await response.json(); if (!response.ok) throw new Error(data.error || error); return data?.data || data; }; /** * === AUTH API === */ export const requestLogin = async (email: string, token: string) => { return makePostRequest( "/auth/request", { email, token }, "Échec de la demande de connexion" ); }; export const verifyOtp = async ({ otpCode, email, }: { otpCode: string; email: string; }) => { return makePostRequest( "/auth/verify", { email, code: otpCode }, "Code de vérification invalide" ); }; export const getClasses = async () => { try { const res = await fetch("/classes.json"); return res.json(); } catch (error) { console.error("Error fetching classes:", error); return []; } }; export const registerUser = async ( firstName: string, lastName: string, className: string, token: string ) => { return makePostRequest( "/auth/register", { firstName, lastName, className, token }, "Échec de l'inscription" ); }; /** * === COLLES API === */ export const getColles = async (weekNumber: number, year: number) => { return makeRequest(`/colles?week=${weekNumber}&year=${year}`, "Échec de la récupération des colles"); };