Skip to content

Commit

Permalink
refactor registration update
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobc2700 committed Aug 12, 2024
1 parent fa205e1 commit 89b3e88
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 55 deletions.
11 changes: 2 additions & 9 deletions src/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -86,11 +83,7 @@ export const Database = {
SubscriptionSchema,
SubscriptionSchemaValidator
),
REGISTRATION: initializeModel(
"registration",
RegistrationSchema,
RegistrationValidator
),
REGISTRATION: mongoose.model("registration", RegistrationSchema),
NOTIFICATIONS: initializeModel(
"notifications",
NotificationsSchema,
Expand Down
4 changes: 1 addition & 3 deletions src/services/registration/registration-router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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(
Expand Down Expand Up @@ -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(
Expand Down
45 changes: 2 additions & 43 deletions src/services/registration/registration-schema.ts
Original file line number Diff line number Diff line change
@@ -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 },
Expand All @@ -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,
};
34 changes: 34 additions & 0 deletions src/services/registration/registration-validators.ts
Original file line number Diff line number Diff line change
@@ -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))
),
});

0 comments on commit 89b3e88

Please sign in to comment.