142 lines
2.9 KiB
TypeScript
142 lines
2.9 KiB
TypeScript
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"
|
|
};
|
|
}
|
|
};
|