diff --git a/src/database.ts b/src/database.ts index 28fc12e..e068996 100644 --- a/src/database.ts +++ b/src/database.ts @@ -12,10 +12,7 @@ import { EventAttendanceValidator, } from "./services/events/events-schema"; import { RoleValidator, RoleSchema } from "./services/auth/auth-schema"; -import { - RegistrationSchema, - RegistrationValidator, -} from "./services/registration/registration-schema"; +import { RegistrationSchema } from "./services/registration/registration-schema"; import { SubscriptionSchemaValidator, SubscriptionSchema, @@ -86,11 +83,7 @@ export const Database = { SubscriptionSchema, SubscriptionSchemaValidator ), - REGISTRATION: initializeModel( - "registration", - RegistrationSchema, - RegistrationValidator - ), + REGISTRATION: mongoose.model("registration", RegistrationSchema), NOTIFICATIONS: initializeModel( "notifications", NotificationsSchema, diff --git a/src/services/registration/registration-router.ts b/src/services/registration/registration-router.ts index 7b89b3e..ac6771d 100644 --- a/src/services/registration/registration-router.ts +++ b/src/services/registration/registration-router.ts @@ -3,7 +3,7 @@ import { StatusCodes } from "http-status-codes"; import { RegistrationFilterValidator, RegistrationValidator, -} from "./registration-schema"; +} from "./registration-validators"; import { Database } from "../../database"; import RoleChecker from "../../middleware/role-checker"; import { Role } from "../auth/auth-models"; @@ -26,7 +26,6 @@ registrationRouter.post("/save", RoleChecker([]), async (req, res, next) => { const registrationData = RegistrationValidator.parse({ ...req.body, - userId: payload.userId, }); await Database.REGISTRATION.findOneAndUpdate( @@ -57,7 +56,6 @@ registrationRouter.post("/submit", RoleChecker([]), async (req, res, next) => { const registrationData = RegistrationValidator.parse({ ...req.body, - userId: payload.userId, }); await Database.REGISTRATION.findOneAndUpdate( diff --git a/src/services/registration/registration-schema.ts b/src/services/registration/registration-schema.ts index ac76ade..305a503 100644 --- a/src/services/registration/registration-schema.ts +++ b/src/services/registration/registration-schema.ts @@ -1,32 +1,7 @@ -import mongoose from "mongoose"; -import { z } from "zod"; - -// Zod schema for registration -const RegistrationValidator = z.object({ - userId: z.coerce.string().regex(/user[0-9]*/), - name: z.string(), - email: z.string().email(), - university: z.string(), - graduation: z.string().nullable().optional(), - major: z.string().nullable().optional(), - dietaryRestrictions: z.string().array(), - allergies: z.string().array(), - age: z.number().nullable().optional(), - gender: z.string().nullable().optional(), - race: z.array(z.string()).nullable().optional(), - ethnicity: z.array(z.string()).nullable().optional(), - firstGen: z.string().nullable().optional(), - hearAboutRP: z.array(z.string()).nullable().optional(), - portfolio: z.string().nullable().optional(), - jobInterest: z.array(z.string()).nullable().optional(), - isInterestedMechMania: z.boolean(), - isInterestedPuzzleBang: z.boolean(), - hasResume: z.boolean().default(false), - hasSubmitted: z.boolean().optional(), -}); +import { Schema } from "mongoose"; // Mongoose schema for registration -const RegistrationSchema = new mongoose.Schema({ +export const RegistrationSchema = new Schema({ userId: { type: String, required: true, unique: true }, name: { type: String, required: true }, email: { type: String, required: true, unique: true }, @@ -48,19 +23,3 @@ const RegistrationSchema = new mongoose.Schema({ hasResume: { type: Boolean, default: false }, hasSubmitted: { type: Boolean, default: false }, }); - -// Partial schema for attendee filter -const PartialRegistrationValidator = RegistrationValidator.partial(); - -const RegistrationFilterValidator = z.object({ - filter: PartialRegistrationValidator, - projection: z.array( - z.record(PartialRegistrationValidator.keyof(), z.number().min(1).max(1)) - ), -}); - -export { - RegistrationSchema, - RegistrationValidator, - RegistrationFilterValidator, -}; diff --git a/src/services/registration/registration-validators.ts b/src/services/registration/registration-validators.ts new file mode 100644 index 0000000..eba9aa4 --- /dev/null +++ b/src/services/registration/registration-validators.ts @@ -0,0 +1,34 @@ +import { z } from "zod"; + +// Zod schema for registration +export const RegistrationValidator = z.object({ + name: z.string(), + email: z.string().email(), + university: z.string(), + graduation: z.string().nullable().optional(), + major: z.string().nullable().optional(), + dietaryRestrictions: z.string().array(), + allergies: z.string().array(), + age: z.number().nullable().optional(), + gender: z.string().nullable().optional(), + race: z.array(z.string()).nullable().optional(), + ethnicity: z.array(z.string()).nullable().optional(), + firstGen: z.string().nullable().optional(), + hearAboutRP: z.array(z.string()).nullable().optional(), + portfolio: z.string().nullable().optional(), + jobInterest: z.array(z.string()).nullable().optional(), + isInterestedMechMania: z.boolean(), + isInterestedPuzzleBang: z.boolean(), + hasResume: z.boolean().default(false), + hasSubmitted: z.boolean().optional(), +}); + +// Partial schema for attendee filter +const PartialRegistrationValidator = RegistrationValidator.partial(); + +export const RegistrationFilterValidator = z.object({ + filter: PartialRegistrationValidator, + projection: z.array( + z.record(PartialRegistrationValidator.keyof(), z.number().min(1).max(1)) + ), +});