From 2f2090d4594639760dbff7c7e89bf035cabe2cb0 Mon Sep 17 00:00:00 2001 From: Gil Glick Date: Sat, 18 Jul 2026 19:35:40 -0400 Subject: [PATCH 1/5] reschedule notification only happens if time changes --- src/backend/src/services/calendar.services.ts | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/backend/src/services/calendar.services.ts b/src/backend/src/services/calendar.services.ts index b0eb6e8365..a82be1831a 100644 --- a/src/backend/src/services/calendar.services.ts +++ b/src/backend/src/services/calendar.services.ts @@ -813,16 +813,30 @@ export default class CalendarService { const edittedEvent = eventTransformer(updatedEvent); - if (status === Event_Status.SCHEDULED && foundEventType.sendSlackNotifications) { - await sendEventScheduledSlackNotif(updatedEvent.notificationSlackThreads, edittedEvent, true); - } - if (status === Event_Status.CONFIRMED && foundEventType.sendSlackNotifications) { await sendEventConfirmationToThread(updatedEvent.notificationSlackThreads, updatedEvent.userCreated); } return edittedEvent; } + static scheduleChanged(before: ScheduleSlot[], after: ScheduleSlot[]): boolean { + if (before.length != after.length) return true; + var index = 0; + for (const scheduleSlot of before) { + if ( + scheduleSlot.startTime.getTime() !== after[index].startTime.getTime() || + scheduleSlot.endTime.getTime() !== after[index].endTime.getTime() || + scheduleSlot.allDay !== after[index].allDay + ) { + return true; + } + + index = index + 1; + } + + return false; + } + /** * Previews which schedule slots would be affected when editing a slot with "edit all in series". * Returns only the OTHER slots that would be edited (excludes the current slot being edited). @@ -1091,6 +1105,14 @@ export default class CalendarService { }); if (!updatedEvent) throw new NotFoundException('Event', event.eventId); + const updatedEventTransform = eventTransformer(updatedEvent); + + if ( + updatedEventTransform.status === Event_Status.SCHEDULED && + this.scheduleChanged(event.scheduledTimes, updatedEvent.scheduledTimes) + ) { + await sendEventScheduledSlackNotif(updatedEvent.notificationSlackThreads, updatedEventTransform, true); + } return eventTransformer(updatedEvent); } From f234c604818baf59ca8f3fb23afeb244c77c4074 Mon Sep 17 00:00:00 2001 From: Gil Glick Date: Sat, 18 Jul 2026 19:54:24 -0400 Subject: [PATCH 2/5] fixed lint --- src/backend/src/services/calendar.services.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/backend/src/services/calendar.services.ts b/src/backend/src/services/calendar.services.ts index a82be1831a..9db740cc31 100644 --- a/src/backend/src/services/calendar.services.ts +++ b/src/backend/src/services/calendar.services.ts @@ -820,8 +820,8 @@ export default class CalendarService { } static scheduleChanged(before: ScheduleSlot[], after: ScheduleSlot[]): boolean { - if (before.length != after.length) return true; - var index = 0; + if (before.length !== after.length) return true; + let index = 0; for (const scheduleSlot of before) { if ( scheduleSlot.startTime.getTime() !== after[index].startTime.getTime() || @@ -1107,6 +1107,10 @@ export default class CalendarService { if (!updatedEvent) throw new NotFoundException('Event', event.eventId); const updatedEventTransform = eventTransformer(updatedEvent); + const foundEventType = await prisma.event_Type.findUnique({ + where: { eventTypeId } + }); + if ( updatedEventTransform.status === Event_Status.SCHEDULED && this.scheduleChanged(event.scheduledTimes, updatedEvent.scheduledTimes) From 029d349a8d91f03e5a4ddc90ef3abb9cead5da59 Mon Sep 17 00:00:00 2001 From: Gil Glick Date: Sat, 18 Jul 2026 19:55:35 -0400 Subject: [PATCH 3/5] small fix --- src/backend/src/services/calendar.services.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/backend/src/services/calendar.services.ts b/src/backend/src/services/calendar.services.ts index 9db740cc31..5da77a8be0 100644 --- a/src/backend/src/services/calendar.services.ts +++ b/src/backend/src/services/calendar.services.ts @@ -1107,10 +1107,6 @@ export default class CalendarService { if (!updatedEvent) throw new NotFoundException('Event', event.eventId); const updatedEventTransform = eventTransformer(updatedEvent); - const foundEventType = await prisma.event_Type.findUnique({ - where: { eventTypeId } - }); - if ( updatedEventTransform.status === Event_Status.SCHEDULED && this.scheduleChanged(event.scheduledTimes, updatedEvent.scheduledTimes) From 961fa7479271e7d95a83b5f9271a2aac209bc607 Mon Sep 17 00:00:00 2001 From: Gil Glick Date: Sun, 19 Jul 2026 16:19:19 -0400 Subject: [PATCH 4/5] added suggestions --- src/backend/src/services/calendar.services.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/backend/src/services/calendar.services.ts b/src/backend/src/services/calendar.services.ts index 5da77a8be0..e3bbdd3a3e 100644 --- a/src/backend/src/services/calendar.services.ts +++ b/src/backend/src/services/calendar.services.ts @@ -821,17 +821,16 @@ export default class CalendarService { static scheduleChanged(before: ScheduleSlot[], after: ScheduleSlot[]): boolean { if (before.length !== after.length) return true; - let index = 0; for (const scheduleSlot of before) { + const afterSlot = after.find((s) => s.scheduleSlotId === scheduleSlot.scheduleSlotId); if ( - scheduleSlot.startTime.getTime() !== after[index].startTime.getTime() || - scheduleSlot.endTime.getTime() !== after[index].endTime.getTime() || - scheduleSlot.allDay !== after[index].allDay + !afterSlot || + scheduleSlot.startTime.getTime() !== afterSlot.startTime.getTime() || + scheduleSlot.endTime.getTime() !== afterSlot.endTime.getTime() || + scheduleSlot.allDay !== afterSlot.allDay ) { return true; } - - index = index + 1; } return false; @@ -1107,14 +1106,20 @@ export default class CalendarService { if (!updatedEvent) throw new NotFoundException('Event', event.eventId); const updatedEventTransform = eventTransformer(updatedEvent); + const foundEventType = await prisma.event_Type.findUnique({ + where: { eventTypeId: updatedEventTransform.eventTypeId } + }); + if ( updatedEventTransform.status === Event_Status.SCHEDULED && + foundEventType && + foundEventType.sendSlackNotifications === true && this.scheduleChanged(event.scheduledTimes, updatedEvent.scheduledTimes) ) { await sendEventScheduledSlackNotif(updatedEvent.notificationSlackThreads, updatedEventTransform, true); } - return eventTransformer(updatedEvent); + return updatedEventTransform; } /** From b0ba9795f197b3e257b632cb1c1576a4d4ab7a56 Mon Sep 17 00:00:00 2001 From: Gil Glick Date: Sun, 19 Jul 2026 21:20:02 -0400 Subject: [PATCH 5/5] added waverlys suggestions --- src/backend/src/services/calendar.services.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/src/services/calendar.services.ts b/src/backend/src/services/calendar.services.ts index e3bbdd3a3e..fd35366fc5 100644 --- a/src/backend/src/services/calendar.services.ts +++ b/src/backend/src/services/calendar.services.ts @@ -819,7 +819,7 @@ export default class CalendarService { return edittedEvent; } - static scheduleChanged(before: ScheduleSlot[], after: ScheduleSlot[]): boolean { + static hasScheduleChanged(before: ScheduleSlot[], after: ScheduleSlot[]): boolean { if (before.length !== after.length) return true; for (const scheduleSlot of before) { const afterSlot = after.find((s) => s.scheduleSlotId === scheduleSlot.scheduleSlotId); @@ -1113,8 +1113,8 @@ export default class CalendarService { if ( updatedEventTransform.status === Event_Status.SCHEDULED && foundEventType && - foundEventType.sendSlackNotifications === true && - this.scheduleChanged(event.scheduledTimes, updatedEvent.scheduledTimes) + foundEventType.sendSlackNotifications && + this.hasScheduleChanged(event.scheduledTimes, updatedEvent.scheduledTimes) ) { await sendEventScheduledSlackNotif(updatedEvent.notificationSlackThreads, updatedEventTransform, true); }