90 lines
2.1 KiB
TypeScript
90 lines
2.1 KiB
TypeScript
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");
|
|
};
|