Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 34 additions & 11 deletions backend/src/controllers/im_export.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,18 +46,41 @@ export const exportAllDataToSheets = async (req: Request, res: Response) => {
])
];

const permanenceValues = [
["ID", "Nom", "Début", "Fin", "Lieu", "Inscrits (noms)","Inscrits (emails)"],
...permanenceList.map(p => [
p.id,
p.name ?? "Sans nom",
p.start_at?.toISOString() ?? "N/A",
p.end_at?.toISOString() ?? "N/A",
p.location ?? "Sans lieu",
p.users.map(u => `${u.first_name} ${u.last_name}`).join(" ; ") || "Aucun inscrit",
p.users.map(u => (u.email)).join(" ; ") || "Aucun inscrit"
])
const permanenceValues = [
[
"ID",
"Nom",
"Début",
"Fin",
"Lieu",
"Responsables",
"Inscrits (noms)",
"Inscrits (emails)",
"Présents",
"Absents"
],
...permanenceList.map((p) => {
const respoNames = p.respo ? p.respo.firstName + " " + p.respo.lastName : "Aucun";
const userNames = p.users?.map((u) => `${u.first_name} ${u.last_name}`)?.join(" ; ") || "Aucun inscrit";
const userEmails = p.users?.map((u) => u.email)?.join(" ; ") || "Aucun inscrit";

const claimedUsers = p.users?.filter((u) => u.claimed)?.map((u) => `${u.first_name} ${u.last_name}`)?.join(" ; ") || "Aucun";
const unclaimedUsers = p.users?.filter((u) => !u.claimed)?.map((u) => `${u.first_name} ${u.last_name}`)?.join(" ; ") || "Aucun";

return [
p.id,
p.name ?? "Sans nom",
p.start_at ? new Date(p.start_at).toLocaleString("fr-FR") : "N/A",
p.end_at ? new Date(p.end_at).toLocaleString("fr-FR") : "N/A",
p.location ?? "Sans lieu",
respoNames,
userNames,
userEmails,
claimedUsers,
unclaimedUsers
];
})
];


const shotgunValues = [
Expand Down
73 changes: 67 additions & 6 deletions backend/src/controllers/permanence.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ const validatePermanenceData = (start_at: string, end_at: string) => {

// ➕ Créer une permanence
export const createPermanence = async (req: Request, res: Response) => {
const { name, description, location, start_at, end_at, capacity } = req.body;
const { name, description, location, start_at, end_at, capacity, difficulty, respoId } = req.body;

if (!name || !location || !start_at || !end_at || !capacity) {
if (!name || !location || !start_at || !end_at || !capacity || !difficulty || !respoId) {
Error(res, { msg: "Tous les champs sont requis" });
return;
}
Expand All @@ -44,7 +44,9 @@ export const createPermanence = async (req: Request, res: Response) => {
location,
new Date(start_at),
new Date(end_at),
Number(capacity)
Number(capacity),
Number(difficulty),
Number(respoId),
);
Ok(res, { msg: "Permanence créée avec succès" });
return;
Expand All @@ -56,9 +58,9 @@ export const createPermanence = async (req: Request, res: Response) => {


export const updatePermanence = async (req: Request, res: Response) => {
const { permId, name, description, location, start_at, end_at, capacity } = req.body;
const { permId, name, description, location, start_at, end_at, capacity, difficulty, respoId } = req.body;

if (!name || !location || !start_at || !end_at || !capacity) {
if (!name || !location || !start_at || !end_at || !capacity || !difficulty || !respoId) {
Error(res, { msg: "Tous les champs sont requis" });
return;
}
Expand All @@ -77,7 +79,9 @@ export const updatePermanence = async (req: Request, res: Response) => {
location,
new Date(start_at),
new Date(end_at),
Number(capacity)
Number(capacity),
Number(difficulty),
Number(respoId)
);
Ok(res, { msg: "Permanence mis à jour avec succès" });
} catch (err) {
Expand Down Expand Up @@ -314,4 +318,61 @@ export const uploadPermanencesCSV = async (req: MulterRequest, res: Response) =>
}
};

export const isUserRespo = async (req: Request, res: Response) => {
const { userId } = req.query;

if (!userId) {
Error(res, { msg: "userId est requis" });
return;
}

try {
const isRespo = await permanence_service.isUserRespoOfPermanence(
Number(userId)
);
Ok(res, { data: isRespo });
} catch (err) {
console.error(err);
Error(res, { msg: "Erreur lors de la vérification du responsable" });
}
};

export const getRespoPermanencesWithMembers = async (req: Request, res: Response) => {
const respoId = req.user?.userId;

if (!respoId) {
Error(res, { msg: "respoId est requis" });
return;
}

try {
const data = await permanence_service.getPermanenceDetailsForRespo(Number(respoId));
Ok(res, { data });
} catch (err) {
console.error(err);
Error(res, { msg: "Erreur lors de la récupération des permanences du responsable" });
}
};

export const claimMember = async (req: Request, res: Response) => {
const { userId, permId, claimed } = req.body;

if (userId === undefined || permId === undefined || claimed === undefined) {
Error(res, { msg: "userId, permId et claimed sont requis" });
return;
}

try {
await permanence_service.claimMember(Number(userId), Number(permId), Boolean(claimed));
Ok(res, {
msg: `Statut mis à jour avec succès (claimed = ${claimed})`,
});
} catch (err) {
console.error(err);
Error(res, { msg: "Erreur lors de la mise à jour du statut du membre" });
}
};




2 changes: 2 additions & 0 deletions backend/src/database/migrations/0019_complete_moondragon.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE "permanences" ADD COLUMN "difficulty" integer;--> statement-breakpoint
ALTER TABLE "user_permanences" ADD COLUMN "claimed" boolean DEFAULT false;
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CREATE TABLE "respo_permanences" (
"user_id" integer,
"permanence_id" integer,
CONSTRAINT "respo_permanences_user_id_permanence_id_pk" PRIMARY KEY("user_id","permanence_id")
);
--> statement-breakpoint
ALTER TABLE "respo_permanences" ADD CONSTRAINT "respo_permanences_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
ALTER TABLE "respo_permanences" ADD CONSTRAINT "respo_permanences_permanence_id_permanences_id_fk" FOREIGN KEY ("permanence_id") REFERENCES "public"."permanences"("id") ON DELETE cascade ON UPDATE no action;
Loading