From 5e6312f47dd483720f331afb1e2a443921427e2c Mon Sep 17 00:00:00 2001 From: Aydan Pirani Date: Sat, 27 Jul 2024 01:10:29 -0700 Subject: [PATCH] yarn changes --- src/middleware/role-checker.ts | 1 + src/services/attendee/attendee-router.ts | 6 ++- src/services/attendee/attendee-schema.ts | 1 + src/services/attendee/attendee-validators.ts | 7 +-- src/services/puzzlebang/puzzlebang-router.ts | 44 ++++++++----------- .../puzzlebang/puzzlebang-validators.ts | 3 +- .../registration/registration-schema.ts | 2 +- 7 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/middleware/role-checker.ts b/src/middleware/role-checker.ts index 0febf9a..ff774d1 100644 --- a/src/middleware/role-checker.ts +++ b/src/middleware/role-checker.ts @@ -45,6 +45,7 @@ export default function RoleChecker( userRoles.includes(Role.Enum.ADMIN) || userRoles.includes(Role.Enum.STAFF) ) { + console.log("skipped!"); return next(); } diff --git a/src/services/attendee/attendee-router.ts b/src/services/attendee/attendee-router.ts index e4cfad4..d90ea39 100644 --- a/src/services/attendee/attendee-router.ts +++ b/src/services/attendee/attendee-router.ts @@ -1,12 +1,14 @@ import { Router } from "express"; import { StatusCodes } from "http-status-codes"; -import { AttendeeCreateValidator, EventIdValidator } from "./attendee-validators"; +import { + AttendeeCreateValidator, + EventIdValidator, +} from "./attendee-validators"; import { Database } from "../../database"; import RoleChecker from "../../middleware/role-checker"; import { Role } from "../auth/auth-models"; import { generateQrHash } from "../checkin/checkin-utils"; - const attendeeRouter = Router(); // Favorite an event for an attendee diff --git a/src/services/attendee/attendee-schema.ts b/src/services/attendee/attendee-schema.ts index 553f478..247d94f 100644 --- a/src/services/attendee/attendee-schema.ts +++ b/src/services/attendee/attendee-schema.ts @@ -35,6 +35,7 @@ export const AttendeeSchema = new Schema({ }, }, favorites: [{ type: String }], + puzzlesCompleted: [{ type: String, default: [] }], }); export const AttendeeAttendanceSchema = new Schema({ diff --git a/src/services/attendee/attendee-validators.ts b/src/services/attendee/attendee-validators.ts index 7d10a0f..fe3ea9f 100644 --- a/src/services/attendee/attendee-validators.ts +++ b/src/services/attendee/attendee-validators.ts @@ -9,11 +9,6 @@ export const AttendeeCreateValidator = z.object({ allergies: z.string().array(), }); -export const AttendeeAttendanceValidator = z.object({ - userId: z.string(), - eventsAttended: z.array(z.string()), -}); - export const EventIdValidator = z.object({ eventId: z.string().uuid(), -}); \ No newline at end of file +}); diff --git a/src/services/puzzlebang/puzzlebang-router.ts b/src/services/puzzlebang/puzzlebang-router.ts index 827bec7..f4572be 100644 --- a/src/services/puzzlebang/puzzlebang-router.ts +++ b/src/services/puzzlebang/puzzlebang-router.ts @@ -7,39 +7,33 @@ import { PuzzlebangCompleteRequestValidator } from "./puzzlebang-validators"; const puzzlebangRouter = Router(); -// Favorite an event for an attendee -puzzlebangRouter.get( - "/:EMAIL", +puzzlebangRouter.post( + "/", RoleChecker([Role.Enum.PUZZLEBANG]), async (req, res, next) => { - const email = req.params.EMAIL; - console.log("email:", email); + try { + const requestInfo = PuzzlebangCompleteRequestValidator.parse( + req.body + ); - const userId = await Database.ATTENDEE.findOne({ - emailAddress: email, - }).select("userId"); + const attendeeData = await Database.ATTENDEE.findOneAndUpdate( + { email: requestInfo.email }, + { $addToSet: { puzzlesCompleted: requestInfo.puzzleId } }, + { new: false } + ); - if (userId) { - return res.status(StatusCodes.OK).json({ userId }); - } else { - return res.sendStatus(StatusCodes.NOT_FOUND); - } - } -); + if (!attendeeData) { + return res.sendStatus(StatusCodes.NOT_FOUND); + } -puzzlebangRouter.post( - "/complete", - RoleChecker([Role.Enum.PUZZLEBANG]), - async (req, res, next) => { - try { - const requestInfo = PuzzlebangCompleteRequestValidator.parse(req.body); - console.log(requestInfo); - - + if (attendeeData.puzzlesCompleted.includes(requestInfo.puzzleId)) { + return res.sendStatus(StatusCodes.UNAUTHORIZED); + } + + return res.sendStatus(StatusCodes.OK); } catch (error) { console.error(error); } - } ); diff --git a/src/services/puzzlebang/puzzlebang-validators.ts b/src/services/puzzlebang/puzzlebang-validators.ts index 884d909..3b862b9 100644 --- a/src/services/puzzlebang/puzzlebang-validators.ts +++ b/src/services/puzzlebang/puzzlebang-validators.ts @@ -1,6 +1,7 @@ import { z } from "zod"; export const PuzzlebangCompleteRequestValidator = z.object({ - userId: z.string(), + // userId: z.string(), + email: z.string().email(), puzzleId: z.string(), }); diff --git a/src/services/registration/registration-schema.ts b/src/services/registration/registration-schema.ts index 892b4b6..ac76ade 100644 --- a/src/services/registration/registration-schema.ts +++ b/src/services/registration/registration-schema.ts @@ -6,7 +6,7 @@ const RegistrationValidator = z.object({ userId: z.coerce.string().regex(/user[0-9]*/), name: z.string(), email: z.string().email(), - university: z.string().nonempty(), + university: z.string(), graduation: z.string().nullable().optional(), major: z.string().nullable().optional(), dietaryRestrictions: z.string().array(),