All files / server/src/features/results resultsSchema.ts

100% Statements 10/10
100% Branches 0/0
100% Functions 4/4
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70        44x                   9x                       7x           44x         5x         44x         44x           44x           5x                 44x  
import mongoose from "mongoose";
import { z } from "zod";
import dayjs from "dayjs";
 
export const ResultsSchemaDb = z
  .object({
    results: z.array(
      z.object({
        username: z.string(),
        assignmentSignup: z.object({
          programItemId: z.string(),
          priority: z.number(),
          signedToStartTime: z
            .date()
            .transform((date) => dayjs(date).toISOString()),
        }),
      }),
    ),
    // Snapshot of the groups that took part in this lottery run, as they were when it ran
    groups: z.array(
      z.object({
        groupCode: z.string(),
        groupCreator: z.string(),
        groupMembers: z.array(z.string()),
      }),
    ),
    assignmentTime: z.date().transform((date) => dayjs(date).toISOString()),
    algorithm: z.string(),
    message: z.string(),
  })
  .strip();
 
const assignmentSignupSchema = new mongoose.Schema({
  programItemId: { type: String, required: true },
  priority: { type: Number, required: true },
  signedToStartTime: {
    type: Date,
    get: (value: Date) => new Date(value),
    required: true,
  },
});
 
const resultsArraySchema = new mongoose.Schema({
  username: { type: String, required: true },
  assignmentSignup: { type: assignmentSignupSchema, required: true },
});
 
const groupSchema = new mongoose.Schema({
  groupCode: { type: String, required: true },
  groupCreator: { type: String, required: true },
  groupMembers: { type: [String], required: true },
});
 
const resultsSchema = new mongoose.Schema(
  {
    results: { type: [resultsArraySchema], required: true },
    groups: { type: [groupSchema], required: true },
    assignmentTime: {
      type: Date,
      get: (value: Date) => new Date(value),
      required: true,
    },
    algorithm: { type: String, required: true },
    message: { type: String, required: true },
  },
  { timestamps: true },
);
 
export const ResultsModel = mongoose.model("results", resultsSchema);