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
161 changes: 102 additions & 59 deletions backend/src/controllers/event.controller.ts
Original file line number Diff line number Diff line change
@@ -1,166 +1,209 @@
import { Request, Response } from "express";
import { Accepted, Error, Ok, Unauthorized } from "../utils/responses";
import { Accepted, Error, Ok, Teapot, Unauthorized } from "../utils/responses";
import * as event_service from "../services/event.service";
import * as team_service from "../services/team.service";
import { Event } from "../schemas/Basic/event.schema";
import { shotgun_password } from "../utils/secret";

type AuthenticatedRequest = Request & { user?: { userId?: number } };


export const checkShotgunStatus = async (req: Request, res: Response) => {
try{
try {
const status = await event_service.getEventsStatus();
Ok(res, ({data: status?.shotgun_open }));

}catch(error){
Error(res, {msg :"Error while catching shotgun status :" + error})
Ok(res, ({ data: { status: Boolean(status?.shotgun_open), password: Boolean(status?.shotgun_open) ? shotgun_password : "" } }));

} catch (error) {
Error(res, { msg: "Error while catching shotgun status :" + error })
}
};

export const checkPreRegisterStatus = async (req: Request, res: Response) => {
try{
try {
const status = await event_service.getEventsStatus();
Ok(res, ({data: status?.pre_registration_open}));
Ok(res, ({ data: status?.pre_registration_open }));

}catch(error){
Error(res, {msg :"Error while catching shotgun status :" + error})
} catch (error) {
Error(res, { msg: "Error while catching pre-registration status :" + error })
}
};

export const checkSDIStatus = async (req: Request, res: Response) => {
try{
try {
const status = await event_service.getEventsStatus();
Ok(res, ({data: status?.sdi_open}));
Ok(res, ({ data: status?.sdi_open }));

}catch(error){
Error(res, {msg :"Error while catching SDI status :" + error})
} catch (error) {
Error(res, { msg: "Error while catching SDI status :" + error })
}
};

export const checkWEIStatus = async (req: Request, res: Response) => {
try{
try {
const status = await event_service.getEventsStatus();
Ok(res, ({data: status?.wei_open}));
Ok(res, ({ data: status?.wei_open }));

}catch(error){
Error(res, {msg :"Error while catching WEI status :" + error})
} catch (error) {
Error(res, { msg: "Error while catching WEI status :" + error })
}
};

export const checkFoodStatus = async (req: Request, res: Response) => {
try{
try {
const status = await event_service.getEventsStatus();
Ok(res, ({data: status?.food_open}));
Ok(res, ({ data: status?.food_open }));

}catch(error){
Error(res, {msg :"Error while catching Food status :" + error})
} catch (error) {
Error(res, { msg: "Error while catching Food status :" + error })
}
};

export const checkChallStatus = async (req: Request, res: Response) => {
try{
try {
const status = await event_service.getEventsStatus();
Ok(res, ({data: status?.chall_open}));
Ok(res, ({ data: status?.chall_open }));

} catch (error) {
Error(res, { msg: "Error while catching Challenge status :" + error })
}
};

export const getShotgunAttempts = async (req: Request, res: Response) => {
try {
const shotgunAttempts = await event_service.getAllTeamShotguns();
const shotgunAttemptsWithLeaders = await Promise.all(
shotgunAttempts.map(async (attempt) => {
if (!attempt.teamId) {
return { ...attempt, leaderCount: 0 };
}

const teamUsers = await team_service.getTeamUsers(attempt.teamId);
const leaderCount = teamUsers.filter((user) => user.permission !== "Nouveau").length;

return { ...attempt, leaderCount };
})
);

}catch(error){
Error(res, {msg :"Error while catching Challenge status :" + error})
Ok(res, { data: shotgunAttemptsWithLeaders });
} catch (error) {
Error(res, { msg: "Erreur lors de la récupération des tentatives shotgun : " + error });
}
};


export const shotgunAttempt = async (req: Request, res: Response) => {

const userId = req.user.userId;

const { password } = req.body as { password?: string };

const userId = (req as AuthenticatedRequest).user?.userId;

if (!userId) {
Unauthorized(res, { msg: "Utilisateur non authentifié." });
return;
}

if (!shotgun_password) {
Error(res, { msg: "Mot de passe shotgun non configuré côté serveur." });
return;
}

if (password !== shotgun_password) {
Teapot(res, { msg: "Le mot de passe shotgun est incorrect." });
return;
}

const status = await event_service.getEventsStatus();
if (!status?.shotgun_open) {
Unauthorized(res, { msg: "Le shotgun est fermé." });
return;
Unauthorized(res, { msg: "Le shotgun est fermé." });
return;
}
try{
try {
const userTeam = await team_service.getUserTeam(userId)

if(!userTeam){
if (!userTeam) {
Error(res, { msg: "Erreur : Tu n'as pas d'équipe !" });
return;
}

const alreadyShotgun = await event_service.alreadyShotgun(userTeam)

if(alreadyShotgun){
if (alreadyShotgun) {
Accepted(res, { msg: "Votre équipe est déjà dans le shotgun." });
return;
}

await event_service.validateShotgun(userTeam);
Ok(res, { msg: "Shotgun validé !"});
Ok(res, { msg: "Shotgun validé !" });
return;
}catch(error){
Error(res, {msg :"Erreur pendant le shotguns : "+ error});
} catch (error) {
Error(res, { msg: "Erreur pendant le shotguns : " + error });
return;
}
};

export const togglePreRegistration = async (req: Request, res: Response) => {
const { preRegistrationOpen } = req.body;

try {
const result = await event_service.updatepreRegistrationStatus(preRegistrationOpen);
Ok(res, { msg: "Paramètres mis à jour.", data : result});
const result = await event_service.updatepreRegistrationStatus(preRegistrationOpen);
Ok(res, { msg: "Paramètres mis à jour.", data: result });
} catch (error) {
Error(res, { msg: "Erreur lors de la mise à jour." });
Error(res, { msg: "Erreur lors de la mise à jour." });
}
};

export const toggleShotgun = async (req: Request, res: Response) => {
const { shotgunOpen } = req.body;

try {
const result = await event_service.updateShotgunStatus(shotgunOpen);
Ok(res,{ msg: "Paramètres mis à jour.", data: result });
const result = await event_service.updateShotgunStatus(shotgunOpen);
Ok(res, { msg: "Paramètres mis à jour.", data: result });
} catch (error) {
Error(res,{ msg: "Erreur lors de la mise à jour." });
Error(res, { msg: "Erreur lors de la mise à jour." });
}
};

export const toggleSDI = async (req: Request, res: Response) => {
const { sdiOpen } = req.body;

try {
const result = await event_service.updateSDIStatus(sdiOpen);
Ok(res,{ msg: "Paramètres mis à jour.", data: result });
const result = await event_service.updateSDIStatus(sdiOpen);
Ok(res, { msg: "Paramètres mis à jour.", data: result });
} catch (error) {
Error(res,{ msg: "Erreur lors de la mise à jour." });
Error(res, { msg: "Erreur lors de la mise à jour." });
}
};

export const toggleWEI = async (req: Request, res: Response) => {
const { weiOpen } = req.body;

try {
const result = await event_service.updateWEIStatus(weiOpen);
Ok(res,{ msg: "Paramètres mis à jour.", data: result });
const result = await event_service.updateWEIStatus(weiOpen);
Ok(res, { msg: "Paramètres mis à jour.", data: result });
} catch (error) {
Error(res,{ msg: "Erreur lors de la mise à jour." });
Error(res, { msg: "Erreur lors de la mise à jour." });
}
};

export const toggleFood = async (req: Request, res: Response) => {
const { foodOpen } = req.body;

try {
const result = await event_service.updateFoodStatus(foodOpen);
Ok(res,{ msg: "Paramètres mis à jour.", data: result });
const result = await event_service.updateFoodStatus(foodOpen);
Ok(res, { msg: "Paramètres mis à jour.", data: result });
} catch (error) {
Error(res,{ msg: "Erreur lors de la mise à jour." });
Error(res, { msg: "Erreur lors de la mise à jour." });
}
};

export const toggleChall = async (req: Request, res: Response) => {
const { challOpen } = req.body;

try {
const result = await event_service.updateChallStatus(challOpen);
Ok(res,{ msg: "Paramètres mis à jour.", data: result });
const result = await event_service.updateChallStatus(challOpen);
Ok(res, { msg: "Paramètres mis à jour.", data: result });
} catch (error) {
Error(res,{ msg: "Erreur lors de la mise à jour." });
Error(res, { msg: "Erreur lors de la mise à jour." });
}
};
19 changes: 10 additions & 9 deletions backend/src/routes/event.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,22 @@ import { authenticateUser } from '../middlewares/auth.middleware';
const eventRouter = express.Router();

// User routes
eventRouter.get("/user/shotgunstatus",checkRole("Student",[]), eventController.checkShotgunStatus);
eventRouter.get("/user/preregisterstatus",checkRole("Student",[]), eventController.checkPreRegisterStatus);
eventRouter.get("/user/shotgunstatus", checkRole("Student", []), eventController.checkShotgunStatus);
eventRouter.get("/user/preregisterstatus", checkRole("Student", []), eventController.checkPreRegisterStatus);
eventRouter.get("/user/sdistatus", eventController.checkSDIStatus);
eventRouter.get("/user/weistatus", eventController.checkWEIStatus);
eventRouter.get("/user/foodstatus", eventController.checkFoodStatus);
eventRouter.get("/user/challstatus", eventController.checkChallStatus);
eventRouter.post("/user/shotgunattempt",checkRole("Student",[]), eventController.shotgunAttempt);
eventRouter.post("/user/shotgunattempt", checkRole("Student", []), eventController.shotgunAttempt);


// Admin routes
eventRouter.post("/admin/shotguntoggle",checkRole("Admin",[]),eventController.toggleShotgun);
eventRouter.post("/admin/preregistrationtoggle",checkRole("Admin",[]), eventController.togglePreRegistration);
eventRouter.post("/admin/sditoggle",checkRole("Admin",[]),eventController.toggleSDI);
eventRouter.post("/admin/weitoggle",checkRole("Admin",[]), eventController.toggleWEI);
eventRouter.post("/admin/foodtoggle",checkRole("Admin",[]), eventController.toggleFood);
eventRouter.post("/admin/challtoggle",checkRole("Admin",[]), eventController.toggleChall);
eventRouter.post("/admin/shotguntoggle", checkRole("Admin", []), eventController.toggleShotgun);
eventRouter.get("/admin/shotgunattempts", checkRole("Admin", ["Respo CE"]), eventController.getShotgunAttempts);
eventRouter.post("/admin/preregistrationtoggle", checkRole("Admin", []), eventController.togglePreRegistration);
eventRouter.post("/admin/sditoggle", checkRole("Admin", []), eventController.toggleSDI);
eventRouter.post("/admin/weitoggle", checkRole("Admin", []), eventController.toggleWEI);
eventRouter.post("/admin/foodtoggle", checkRole("Admin", []), eventController.toggleFood);
eventRouter.post("/admin/challtoggle", checkRole("Admin", []), eventController.toggleChall);

export default eventRouter;
Loading
Loading