Skip to content

Commit 701416a

Browse files
committed
feat: update programs and courseOfferings schemas
1 parent c7af17b commit 701416a

File tree

7 files changed

+172
-56
lines changed

7 files changed

+172
-56
lines changed

apps/web/src/modules/course-selection/components/CourseSectionItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export const CourseSectionItem = ({
4848
{offering.days.map((day) => day.slice(0, 3).toUpperCase()).join(", ")}{" "}
4949
{offering.startTime} - {offering.endTime}
5050
</div>
51-
<div>{offering.location}</div>
51+
<div>{offering.location ?? "TBD"}</div>
5252
<div className="capitalize">
5353
{offering.term} {offering.year}
5454
</div>

packages/server/convex/http.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,22 +111,25 @@ export const ZUpsertProgramWithRequirements = z.object({
111111
z.discriminatedUnion("type", [
112112
z.object({
113113
isMajor: z.boolean(),
114+
description: z.optional(z.string()),
114115
type: z.literal("required"),
115116
courses: z.array(z.string()),
116117
}),
117118
z.object({
118119
isMajor: z.boolean(),
120+
description: z.optional(z.string()),
119121
type: z.literal("alternative"),
120122
courses: z.array(z.string()),
121123
}),
122124
z.object({
123125
isMajor: z.boolean(),
126+
description: z.optional(z.string()),
124127
type: z.literal("options"),
125128
courses: z.array(z.string()),
126129
courseLevels: z.array(
127130
z.object({
128-
program: z.string(),
129-
level: z.coerce.number(),
131+
program: z.string(), // CSCI-UA
132+
level: z.coerce.number(), // 4
130133
}),
131134
),
132135
creditsRequired: z.number(),
@@ -143,6 +146,7 @@ export const ZUpsertRequirements = z.array(
143146
z.transform((val) => val as Id<"programs">),
144147
),
145148
isMajor: z.boolean(),
149+
description: z.optional(z.string()),
146150
type: z.literal("required"),
147151
courses: z.array(z.string()),
148152
}),
@@ -152,6 +156,7 @@ export const ZUpsertRequirements = z.array(
152156
z.transform((val) => val as Id<"programs">),
153157
),
154158
isMajor: z.boolean(),
159+
description: z.optional(z.string()),
155160
type: z.literal("alternative"),
156161
courses: z.array(z.string()),
157162
}),
@@ -161,6 +166,7 @@ export const ZUpsertRequirements = z.array(
161166
z.transform((val) => val as Id<"programs">),
162167
),
163168
isMajor: z.boolean(),
169+
description: z.optional(z.string()),
164170
type: z.literal("options"),
165171
courses: z.array(z.string()),
166172
courseLevels: z.array(
@@ -206,14 +212,17 @@ export const ZUpsertPrerequisites = z.array(
206212

207213
export const ZUpsertCourseOfferings = z.array(
208214
z.object({
209-
courseCode: z.string(),
210-
classNumber: z.number(),
211-
title: z.string(),
215+
courseCode: z.string(), // CSCI-UA 102
216+
classNumber: z.number(), // 10349
217+
title: z.optional(z.string()),
212218
section: z.string(),
213-
year: z.number(),
219+
description: z.optional(z.string()),
220+
year: z.number(), // 2025
214221
term: z.enum(["spring", "summer", "fall", "j-term"]),
222+
level: z.enum(["undergraduate", "graduate"]),
223+
school: ZSchoolName,
215224
instructor: z.array(z.string()),
216-
location: z.string(),
225+
location: z.optional(z.string()),
217226
days: z.array(
218227
z.enum([
219228
"monday",
@@ -225,8 +234,8 @@ export const ZUpsertCourseOfferings = z.array(
225234
"sunday",
226235
]),
227236
),
228-
startTime: z.string(),
229-
endTime: z.string(),
237+
startTime: z.string(), // 13:00
238+
endTime: z.string(), // 14:15
230239
status: z.enum(["open", "closed", "waitlist"]),
231240
waitlistNum: z.optional(z.number()),
232241
isCorequisite: z._default(z.boolean(), false),

packages/server/convex/requirements.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export const createRequirementsInternal = internalMutation({
1313
return ctx.db.insert("requirements", {
1414
programId: newReq.programId,
1515
isMajor: newReq.isMajor,
16+
description: newReq.description,
1617
type: newReq.type,
1718
courses: newReq.courses,
1819
courseLevels: newReq.courseLevels,
@@ -22,6 +23,7 @@ export const createRequirementsInternal = internalMutation({
2223
return ctx.db.insert("requirements", {
2324
programId: newReq.programId,
2425
isMajor: newReq.isMajor,
26+
description: newReq.description,
2527
type: newReq.type,
2628
courses: newReq.courses,
2729
});

packages/server/convex/schemas/courseOfferings.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
import { v } from "convex/values";
2+
import { schoolName } from "./schools";
23

34
const courseOfferings = {
45
courseCode: v.string(), // CSCI-UA 102
56
classNumber: v.number(), // 10349
67
title: v.optional(v.string()),
78
section: v.string(), // 001
9+
description: v.optional(v.string()),
810
year: v.number(), // 2025
911
term: v.union(
1012
v.literal("spring"),
1113
v.literal("summer"),
1214
v.literal("fall"),
1315
v.literal("j-term"),
1416
),
17+
level: v.union(v.literal("undergraduate"), v.literal("graduate")),
18+
school: schoolName,
1519
instructor: v.array(v.string()),
1620
location: v.optional(v.string()),
1721
days: v.array(

packages/server/convex/schemas/programs.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,21 @@ const requirements = v.union(
1212
v.object({
1313
programId: v.id("programs"),
1414
isMajor: v.boolean(),
15+
description: v.optional(v.string()),
1516
type: v.literal("required"),
1617
courses: v.array(v.string()), // course code
1718
}),
1819
v.object({
1920
programId: v.id("programs"),
2021
isMajor: v.boolean(),
22+
description: v.optional(v.string()),
2123
type: v.literal("alternative"),
2224
courses: v.array(v.string()), // course code
2325
}),
2426
v.object({
2527
programId: v.id("programs"),
2628
isMajor: v.boolean(),
29+
description: v.optional(v.string()),
2730
type: v.literal("options"),
2831
courses: v.array(v.string()), // course code
2932
courseLevels: v.array(

packages/server/convex/seed.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,18 @@ export const seedAll = internalMutation({
115115
v.object({
116116
courseCode: v.string(),
117117
classNumber: v.number(),
118-
title: v.string(),
118+
title: v.optional(v.string()),
119119
section: v.string(),
120+
description: v.optional(v.string()),
120121
year: v.number(),
121122
term: v.union(
122123
v.literal("spring"),
123124
v.literal("summer"),
124125
v.literal("fall"),
125126
v.literal("j-term"),
126127
),
128+
level: v.union(v.literal("undergraduate"), v.literal("graduate")),
129+
school: schoolName,
127130
instructor: v.array(v.string()),
128131
location: v.optional(v.string()),
129132
days: v.array(
@@ -174,18 +177,21 @@ export const seedAll = internalMutation({
174177
v.object({
175178
programName: v.string(),
176179
isMajor: v.boolean(),
180+
description: v.optional(v.string()),
177181
type: v.literal("required"),
178182
courses: v.array(v.string()),
179183
}),
180184
v.object({
181185
programName: v.string(),
182186
isMajor: v.boolean(),
187+
description: v.optional(v.string()),
183188
type: v.literal("alternative"),
184189
courses: v.array(v.string()),
185190
}),
186191
v.object({
187192
programName: v.string(),
188193
isMajor: v.boolean(),
194+
description: v.optional(v.string()),
189195
type: v.literal("options"),
190196
courses: v.array(v.string()),
191197
courseLevels: v.array(
@@ -354,6 +360,7 @@ export const seedAll = internalMutation({
354360
await ctx.db.insert("requirements", {
355361
programId,
356362
isMajor: req.isMajor,
363+
description: req.description,
357364
type: req.type,
358365
courses: req.courses,
359366
courseLevels: req.courseLevels,
@@ -363,6 +370,7 @@ export const seedAll = internalMutation({
363370
await ctx.db.insert("requirements", {
364371
programId,
365372
isMajor: req.isMajor,
373+
description: req.description,
366374
type: req.type,
367375
courses: req.courses,
368376
});

0 commit comments

Comments
 (0)