diff --git a/src/config.ts b/src/config.ts index 9f5cbb99..8604deea 100644 --- a/src/config.ts +++ b/src/config.ts @@ -129,6 +129,7 @@ const Config = { MAX_SHOP_STOCK_PER_ITEM: 128, RANKING_OFFSET: 1, + REGISTRATION_CLOSE_DATETIME: "2024-02-16T00:06:15-06:00", }; export default Config; diff --git a/src/services/registration/registration-lib.ts b/src/services/registration/registration-lib.ts index 375e2ac3..f24add38 100644 --- a/src/services/registration/registration-lib.ts +++ b/src/services/registration/registration-lib.ts @@ -1,6 +1,15 @@ +import Config from "../../config.js"; import Models from "../../database/models.js"; import { RegistrationApplication } from "../../database/registration-db.js"; export function getApplication(userId: string): Promise { return Models.RegistrationApplication.findOne({ userId: userId }); } + +export function isRegistrationAlive(): boolean { + const targetDateTime = new Date(Config.REGISTRATION_CLOSE_DATETIME); + const currentDate = new Date().toLocaleString("en-US", { timeZone: "America/Chicago" }); + const currentDateTime = new Date(currentDate + "-06:00"); + + return currentDateTime < targetDateTime; +} diff --git a/src/services/registration/registration-router.ts b/src/services/registration/registration-router.ts index e8ffcefa..f89b10f9 100644 --- a/src/services/registration/registration-router.ts +++ b/src/services/registration/registration-router.ts @@ -17,9 +17,15 @@ import { JwtPayload } from "../auth/auth-models.js"; import { sendMail } from "../mail/mail-lib.js"; import { MailInfoFormat } from "../mail/mail-formats.js"; +import { isRegistrationAlive } from "./registration-lib.js"; const registrationRouter: Router = Router(); +registrationRouter.get("/status/", async (_: Request, res: Response) => { + const isAlive = isRegistrationAlive(); + return res.status(StatusCode.SuccessOK).send({ alive: isAlive }); +}); + /** * @api {get} /registration/ GET /registration/ * @apiGroup Registration @@ -297,6 +303,10 @@ registrationRouter.post("/", strongJwtVerification, async (req: Request, res: Re * @apiError (500: Internal Server Error) {String} InternalError Server-side error **/ registrationRouter.post("/submit/", strongJwtVerification, async (_: Request, res: Response, next: NextFunction) => { + if (!isRegistrationAlive()) { + return next(new RouterError(StatusCode.ClientErrorForbidden, "RegistrationClosed")); + } + const payload: JwtPayload = res.locals.payload as JwtPayload; const userId: string = payload.id; diff --git a/src/services/staff/staff-formats.ts b/src/services/staff/staff-formats.ts index f4ba48d3..8be67a94 100644 --- a/src/services/staff/staff-formats.ts +++ b/src/services/staff/staff-formats.ts @@ -1,6 +1,7 @@ import { RouterError } from "middleware/error-handler.js"; import { StaffShift } from "../../database/staff-db.js"; import { isArrayOfType, isString } from "../../formatTools.js"; +import { AttendeeProfile } from "../../database/attendee-db.js"; // Format for default staff attendance input export interface AttendanceFormat { @@ -31,4 +32,5 @@ export interface EventError { export interface checkInResult { success: boolean; error?: RouterError; + profile?: AttendeeProfile; } diff --git a/src/services/staff/staff-lib.ts b/src/services/staff/staff-lib.ts index 52b9ea36..9ee41657 100644 --- a/src/services/staff/staff-lib.ts +++ b/src/services/staff/staff-lib.ts @@ -2,8 +2,9 @@ import Models from "../../database/models.js"; import { StatusCode } from "status-code-enum"; import { checkInResult } from "./staff-formats.js"; import { RouterError } from "../../middleware/error-handler.js"; +import { updatePoints } from "../profile/profile-lib.js"; -export async function performCheckIn(eventId: string, userId: string): Promise { +export async function performCheckIn(eventId: string, userId: string, points: number = 0): Promise { const eventAttendance = await Models.EventAttendance.findOne({ eventId: eventId }); if (!eventAttendance) { @@ -19,5 +20,16 @@ export async function performCheckIn(eventId: string, userId: string): Promise