import { API_URL } from '$env/static/private'; import type { Actions, PageServerLoad } from './$types'; import type { Chapter, Group } from '$lib/types'; import { redirect } from '@sveltejs/kit'; export const load = (async ({ locals: { user }, fetch, cookies, params: { chapterId } }) => { if (!user) redirect(302, '/login'); const session = cookies.get('session'); let res = await fetch(`${API_URL}/chapter/${chapterId}`, { headers: { Authorization: `Bearer ${session}` } }); if (!res.ok) { redirect(302, '/chapters'); } const chapter = (await res.json()) as Chapter; if (!chapter || !chapter.show && !(chapter.start && chapter.end)) { redirect(302, '/chapters'); } res = await fetch(`${API_URL}/groups/${chapter.id}`, { headers: { Authorization: `Bearer ${session}` } }); if (!res.ok) { redirect(302, `/chapters/${chapterId}`); } const groups = (await res.json()) as Group[]; return { title: `${chapter.name} - Groups`, chapter, groups }; }) satisfies PageServerLoad; export const actions: Actions = { join: async ({ fetch, params: { chapterId }, cookies, request }) => { const data = await request.formData(); const name = data.get('name') as string; const session = cookies.get('session'); const res = await fetch(`${API_URL}/groupJoin`, { method: 'POST', headers: { Authorization: `Bearer ${session}` }, body: JSON.stringify({ name, chapter: parseInt(chapterId), }) }); if (res.ok) { return { success: true, message: 'Vous avez rejoint le groupe' } } if (res.status === 403) { return { success: false, message: 'Vous êtes déjà dans un groupe' }; } if (res.status === 423) { return { success: false, message: 'Vous ne pouvez plus rejoindre de groupe' }; } return { success: false, message: "Une erreur s'est produite" }; }, leave: async ({ fetch, params: { chapterId }, cookies, request }) => { const data = await request.formData(); const name = data.get('name') as string; const session = cookies.get('session'); const res = await fetch(`${API_URL}/groupQuit`, { method: 'POST', headers: { Authorization: `Bearer ${session}` }, body: JSON.stringify({ name, chapter: parseInt(chapterId), }) }); if (res.ok) { return { success: true, message: 'Vous avez quitté le groupe' } } if (res.status === 403) { return { success: false, message: "Vous n'êtes pas dans ce groupe" }; } if (res.status === 423) { return { success: false, message: "Vous ne pouvez pas quitter ce groupe maintenant" }; } return { success: false, message: "Une erreur s'est produite" }; } };