peer-at-code-web/src/routes/(app)/chapters/[chapterId]/groups/+page.server.ts
2024-03-28 19:59:47 +01:00

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"
};
}
};