From d793187482a8504eb29b568323647f6331e1b05c Mon Sep 17 00:00:00 2001 From: maxmwang Date: Sun, 26 Jan 2025 13:49:39 -0800 Subject: [PATCH 1/2] force some section fields to be required --- apps/datapuller/src/lib/sections.ts | 5 ++++- packages/common/src/models/sectionNew.ts | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/datapuller/src/lib/sections.ts b/apps/datapuller/src/lib/sections.ts index b4b48f17c..0c9184818 100644 --- a/apps/datapuller/src/lib/sections.ts +++ b/apps/datapuller/src/lib/sections.ts @@ -16,7 +16,8 @@ export const formatSection = (input: ClassSection) => { const courseId = input.class?.course?.identifiers?.find( (i) => i.type === "cs-course-id" )?.id; - + const sessionId = input.class?.session?.id; + const termId = input.class?.session?.term?.id; const courseNumber = input.class?.course?.catalogNumber?.formatted; const classNumber = input.class?.number; const number = input.number; @@ -26,6 +27,8 @@ export const formatSection = (input: ClassSection) => { const essentialFields = { courseId, + sessionId, + termId, classNumber, sectionId, number, diff --git a/packages/common/src/models/sectionNew.ts b/packages/common/src/models/sectionNew.ts index fe33fbfc8..fc8e099cf 100644 --- a/packages/common/src/models/sectionNew.ts +++ b/packages/common/src/models/sectionNew.ts @@ -68,8 +68,8 @@ export interface ISectionItemDocument extends ISectionItem, Document {} const sectionSchema = new Schema({ courseId: { type: String, required: true }, classNumber: { type: String, required: true }, - sessionId: { type: String }, - termId: { type: String }, + sessionId: { type: String, required: true }, + termId: { type: String, required: true }, sectionId: { type: String, required: true }, number: { type: String, required: true }, subject: { type: String, required: true }, From 4d4dce5e97135810dc430cc6d198eb933f306917 Mon Sep 17 00:00:00 2001 From: Max Wang Date: Sun, 26 Jan 2025 13:59:45 -0800 Subject: [PATCH 2/2] new enrollment schema (#767) * enrollment schema * fix build errors * fix schema --- apps/datapuller/src/lib/sections.ts | 4 +- package-lock.json | 7 +-- packages/common/src/models/enrollmentNew.ts | 70 +++++++++++++++++++++ packages/common/src/models/sectionNew.ts | 4 +- 4 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 packages/common/src/models/enrollmentNew.ts diff --git a/apps/datapuller/src/lib/sections.ts b/apps/datapuller/src/lib/sections.ts index 0c9184818..bae901f4a 100644 --- a/apps/datapuller/src/lib/sections.ts +++ b/apps/datapuller/src/lib/sections.ts @@ -48,8 +48,8 @@ export const formatSection = (input: ClassSection) => { const output: ISectionItem = { courseId: courseId!, classNumber: classNumber!, - sessionId: input.class?.session?.id, - termId: input.class?.session?.term?.id, + sessionId: sessionId!, + termId: termId!, sectionId: sectionId!, number: number!, subject: subject!, diff --git a/package-lock.json b/package-lock.json index 348cbce85..b228c4f55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9396,7 +9396,7 @@ "version": "19.0.8", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.8.tgz", "integrity": "sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -9406,7 +9406,7 @@ "version": "19.0.3", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.3.tgz", "integrity": "sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==", - "dev": true, + "devOptional": true, "license": "MIT", "peerDependencies": { "@types/react": "^19.0.0" @@ -13055,7 +13055,7 @@ "version": "5.16.2", "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.16.2.tgz", "integrity": "sha512-E1uccsZxt/96jH/OwmLPuXMACILs76pKF2i3W861LpKBCYtGIyPQGtWLuBLkND4ox1KHns70e83PS4te50nvPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -18178,7 +18178,6 @@ "version": "5.7.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/packages/common/src/models/enrollmentNew.ts b/packages/common/src/models/enrollmentNew.ts new file mode 100644 index 000000000..35b16b74b --- /dev/null +++ b/packages/common/src/models/enrollmentNew.ts @@ -0,0 +1,70 @@ +import { Document, Model, Schema, model } from "mongoose"; + +export interface IEnrollmentItem { + termId: string; + sessionId: string; + sectionId: string; + data: [ + { + time: string; + status?: string; + enrolledCount?: number; + reservedCount?: number; + waitlistedCount?: number; + minEnroll?: number; + maxEnroll?: number; + maxWaitlist?: number; + openReserved?: number; + instructorAddConsentRequired?: boolean; + instructorDropConsentRequired?: boolean; + seatReservations?: [ + { + number?: number; + requirementGroup?: string; + fromDate?: string; + maxEnroll?: number; + enrolledCount?: number; + }, + ]; + }, + ]; +} + +export interface IEnrollmentItemDocument extends IEnrollmentItem, Document {} + +const enrollmentSchema = new Schema({ + termId: { type: String, required: true }, + sessionId: { type: String, required: true }, + sectionId: { type: String, required: true }, + data: [ + { + time: { type: String, required: true }, + status: { type: String }, + enrolledCount: { type: Number }, + reservedCount: { type: Number }, + waitlistedCount: { type: Number }, + minEnroll: { type: Number }, + maxEnroll: { type: Number }, + maxWaitlist: { type: Number }, + openReserved: { type: Number }, + instructorAddConsentRequired: { type: Boolean }, + instructorDropConsentRequired: { type: Boolean }, + seatReservations: [ + { + number: { type: Number }, + requirementGroup: { type: String }, + fromDate: { type: String }, + maxEnroll: { type: Number }, + enrolledCount: { type: Number }, + }, + ], + }, + ], +}); +enrollmentSchema.index( + { termId: 1, sessionId: 1, sectionId: 1 }, + { unique: true } +); + +export const NewEnrollmentModel: Model = + model("NewEnrollment", enrollmentSchema); diff --git a/packages/common/src/models/sectionNew.ts b/packages/common/src/models/sectionNew.ts index fc8e099cf..5b1952ae6 100644 --- a/packages/common/src/models/sectionNew.ts +++ b/packages/common/src/models/sectionNew.ts @@ -3,8 +3,8 @@ import { Document, Model, Schema, model } from "mongoose"; export interface ISectionItem { courseId: string; classNumber: string; - sessionId?: string; - termId?: string; + sessionId: string; + termId: string; sectionId: string; number: string; subject: string;