From d8e5fea638adb4ce83a75a1eeefd482fb5550744 Mon Sep 17 00:00:00 2001 From: dawangk Date: Mon, 24 Mar 2025 12:24:38 -0400 Subject: [PATCH 1/7] added checks for timetable length --- .../backend/src/controllers/timetablesController.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/course-matrix/backend/src/controllers/timetablesController.ts b/course-matrix/backend/src/controllers/timetablesController.ts index 77a59741..79aa095d 100644 --- a/course-matrix/backend/src/controllers/timetablesController.ts +++ b/course-matrix/backend/src/controllers/timetablesController.ts @@ -25,6 +25,10 @@ export default { .status(400) .json({ error: "timetable title and semester are required" }); } + // Timetables cannot be longer than 50 characters. + if(timetable_title.length>50){ + return res.status(400).json({error: "Timetable Title cannot be over 50 characters long"}); + } // Check if a timetable with the same title already exist for this user const { data: existingTimetable, error: existingTimetableError } = @@ -169,6 +173,11 @@ export default { }); } + // Timetables cannot be longer than 50 characters. + if(timetable_title.length>50){ + return res.status(400).json({error: "Timetable Title cannot be over 50 characters long"}); + } + //Retrieve the authenticated user const user_id = (req as any).user.id; From 98a93e9d6758e84461046859e3cc5ea5bfe2c857 Mon Sep 17 00:00:00 2001 From: dawangk Date: Mon, 24 Mar 2025 16:25:02 +0000 Subject: [PATCH 2/7] Auto-formatted the code using Prettier --- .../src/controllers/timetablesController.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/course-matrix/backend/src/controllers/timetablesController.ts b/course-matrix/backend/src/controllers/timetablesController.ts index 79aa095d..d7b3b4de 100644 --- a/course-matrix/backend/src/controllers/timetablesController.ts +++ b/course-matrix/backend/src/controllers/timetablesController.ts @@ -25,9 +25,11 @@ export default { .status(400) .json({ error: "timetable title and semester are required" }); } - // Timetables cannot be longer than 50 characters. - if(timetable_title.length>50){ - return res.status(400).json({error: "Timetable Title cannot be over 50 characters long"}); + // Timetables cannot be longer than 50 characters. + if (timetable_title.length > 50) { + return res + .status(400) + .json({ error: "Timetable Title cannot be over 50 characters long" }); } // Check if a timetable with the same title already exist for this user @@ -173,9 +175,11 @@ export default { }); } - // Timetables cannot be longer than 50 characters. - if(timetable_title.length>50){ - return res.status(400).json({error: "Timetable Title cannot be over 50 characters long"}); + // Timetables cannot be longer than 50 characters. + if (timetable_title.length > 50) { + return res + .status(400) + .json({ error: "Timetable Title cannot be over 50 characters long" }); } //Retrieve the authenticated user From 9f717d32cf1f41d285620d8d5cf7c494174555a9 Mon Sep 17 00:00:00 2001 From: dawangk Date: Mon, 24 Mar 2025 12:27:29 -0400 Subject: [PATCH 3/7] added AI support as well --- course-matrix/backend/src/constants/availableFunctions.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/course-matrix/backend/src/constants/availableFunctions.ts b/course-matrix/backend/src/constants/availableFunctions.ts index 0d540011..4e00a0b3 100644 --- a/course-matrix/backend/src/constants/availableFunctions.ts +++ b/course-matrix/backend/src/constants/availableFunctions.ts @@ -195,6 +195,9 @@ export const availableFunctions: AvailableFunctions = { try { // Extract event details and course information from the request const { name, semester, courses, restrictions } = args; + if(name.length>=50){ + return {status: 400, error: "timetable title is over 50 characters long"}; + } const courseOfferingsList: OfferingList[] = []; const validCourseOfferingsList: GroupedOfferingList[] = []; From 249cd73a4c41246b968e379e246061962ece5d2c Mon Sep 17 00:00:00 2001 From: dawangk Date: Mon, 24 Mar 2025 16:28:12 +0000 Subject: [PATCH 4/7] Auto-formatted the code using Prettier --- course-matrix/backend/src/constants/availableFunctions.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/course-matrix/backend/src/constants/availableFunctions.ts b/course-matrix/backend/src/constants/availableFunctions.ts index 4e00a0b3..7810190c 100644 --- a/course-matrix/backend/src/constants/availableFunctions.ts +++ b/course-matrix/backend/src/constants/availableFunctions.ts @@ -195,8 +195,11 @@ export const availableFunctions: AvailableFunctions = { try { // Extract event details and course information from the request const { name, semester, courses, restrictions } = args; - if(name.length>=50){ - return {status: 400, error: "timetable title is over 50 characters long"}; + if (name.length >= 50) { + return { + status: 400, + error: "timetable title is over 50 characters long", + }; } const courseOfferingsList: OfferingList[] = []; From a3febaeb17551a9704ac077749f1e1f70e20296e Mon Sep 17 00:00:00 2001 From: dawangk Date: Mon, 24 Mar 2025 13:44:02 -0400 Subject: [PATCH 5/7] added reading week considerations --- .../src/controllers/eventsController.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/course-matrix/backend/src/controllers/eventsController.ts b/course-matrix/backend/src/controllers/eventsController.ts index c70fae10..e52cb5e0 100644 --- a/course-matrix/backend/src/controllers/eventsController.ts +++ b/course-matrix/backend/src/controllers/eventsController.ts @@ -3,6 +3,19 @@ import asyncHandler from "../middleware/asyncHandler"; import { supabase } from "../db/setupDb"; import { start } from "repl"; +function getReadingWeekStart(start_date:string){ + return (start_date === "2025-05-02") ? "2025-06-15" + : (start_date === "2025-09-02") ? "2025-10-26" + : "2026-02-16"; + +} + +function getReadingWeekEnd(start_date:string){ + return (start_date === "2025-05-02") ? "2025-06-22" + : (start_date === "2025-09-02") ? "2025-11-01" + : "2026-02-22"; + +} /** * Helper method to generate weekly course events. * @param courseEventName - The name of the course event (typically derived from the offering code and meeting section). @@ -66,6 +79,10 @@ export function generateWeeklyCourseEvents( FR: 5, SA: 6, }; + + const rw_start = new Date(getReadingWeekStart(semester_start_date) + "T00:00:00-05:00"); + const rw_end = new Date(getReadingWeekEnd(semester_start_date) + "T00:00:00-05:00"); + const targetWeekday = weekdayMap[courseDay]; if (targetWeekday === undefined) { @@ -91,6 +108,7 @@ export function generateWeeklyCourseEvents( let eventsToInsert: any[] = []; //Loop through the semester, adding an event for each week on the targeted weekday while (currentDate <= semesterEndObj) { + if(currentDaterw_end) { eventsToInsert.push({ user_id, calendar_id, @@ -102,6 +120,7 @@ export function generateWeeklyCourseEvents( event_description: null, offering_id, }); + } //Cycle to the next week currentDate.setDate(currentDate.getDate() + 7); } From da1f62244db2cc1dae23ec225b73d852a09eaeed Mon Sep 17 00:00:00 2001 From: dawangk Date: Mon, 24 Mar 2025 17:46:25 +0000 Subject: [PATCH 6/7] Auto-formatted the code using Prettier --- .../src/controllers/eventsController.ts | 57 ++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/course-matrix/backend/src/controllers/eventsController.ts b/course-matrix/backend/src/controllers/eventsController.ts index e52cb5e0..fab4aae8 100644 --- a/course-matrix/backend/src/controllers/eventsController.ts +++ b/course-matrix/backend/src/controllers/eventsController.ts @@ -3,18 +3,20 @@ import asyncHandler from "../middleware/asyncHandler"; import { supabase } from "../db/setupDb"; import { start } from "repl"; -function getReadingWeekStart(start_date:string){ - return (start_date === "2025-05-02") ? "2025-06-15" - : (start_date === "2025-09-02") ? "2025-10-26" - : "2026-02-16"; - +function getReadingWeekStart(start_date: string) { + return start_date === "2025-05-02" + ? "2025-06-15" + : start_date === "2025-09-02" + ? "2025-10-26" + : "2026-02-16"; } -function getReadingWeekEnd(start_date:string){ - return (start_date === "2025-05-02") ? "2025-06-22" - : (start_date === "2025-09-02") ? "2025-11-01" - : "2026-02-22"; - +function getReadingWeekEnd(start_date: string) { + return start_date === "2025-05-02" + ? "2025-06-22" + : start_date === "2025-09-02" + ? "2025-11-01" + : "2026-02-22"; } /** * Helper method to generate weekly course events. @@ -79,10 +81,13 @@ export function generateWeeklyCourseEvents( FR: 5, SA: 6, }; - - const rw_start = new Date(getReadingWeekStart(semester_start_date) + "T00:00:00-05:00"); - const rw_end = new Date(getReadingWeekEnd(semester_start_date) + "T00:00:00-05:00"); + const rw_start = new Date( + getReadingWeekStart(semester_start_date) + "T00:00:00-05:00", + ); + const rw_end = new Date( + getReadingWeekEnd(semester_start_date) + "T00:00:00-05:00", + ); const targetWeekday = weekdayMap[courseDay]; if (targetWeekday === undefined) { @@ -108,19 +113,19 @@ export function generateWeeklyCourseEvents( let eventsToInsert: any[] = []; //Loop through the semester, adding an event for each week on the targeted weekday while (currentDate <= semesterEndObj) { - if(currentDaterw_end) { - eventsToInsert.push({ - user_id, - calendar_id, - event_name: courseEventName, - //Convert the occurrence of date to YYYY-MM-DD format - event_date: currentDate.toISOString().split("T")[0], - event_start: courseStartTime, - event_end: courseEndTime, - event_description: null, - offering_id, - }); - } + if (currentDate < rw_start || currentDate > rw_end) { + eventsToInsert.push({ + user_id, + calendar_id, + event_name: courseEventName, + //Convert the occurrence of date to YYYY-MM-DD format + event_date: currentDate.toISOString().split("T")[0], + event_start: courseStartTime, + event_end: courseEndTime, + event_description: null, + offering_id, + }); + } //Cycle to the next week currentDate.setDate(currentDate.getDate() + 7); } From 7a0df3d78ef77b112ea12a827af503476898ed48 Mon Sep 17 00:00:00 2001 From: dawangk <85403980+dawangk@users.noreply.github.com> Date: Mon, 24 Mar 2025 13:46:45 -0400 Subject: [PATCH 7/7] Update course-matrix/backend/src/constants/availableFunctions.ts lol Co-authored-by: Kevin Lan --- course-matrix/backend/src/constants/availableFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course-matrix/backend/src/constants/availableFunctions.ts b/course-matrix/backend/src/constants/availableFunctions.ts index 7810190c..03b16dd1 100644 --- a/course-matrix/backend/src/constants/availableFunctions.ts +++ b/course-matrix/backend/src/constants/availableFunctions.ts @@ -195,7 +195,7 @@ export const availableFunctions: AvailableFunctions = { try { // Extract event details and course information from the request const { name, semester, courses, restrictions } = args; - if (name.length >= 50) { + if (name.length > 50) { return { status: 400, error: "timetable title is over 50 characters long",