diff --git a/src/backend/src/services/design-reviews.services.ts b/src/backend/src/services/design-reviews.services.ts index 0e84e1f3e6..75ff5340fa 100644 --- a/src/backend/src/services/design-reviews.services.ts +++ b/src/backend/src/services/design-reviews.services.ts @@ -396,6 +396,77 @@ export default class DesignReviewsService { updatedDesignReview.wbsElement ); } + + // Mark all attendees as unavailable during the scheduled meeting time + for (const member of updatedDesignReview.confirmedMembers) { + let userSettings = await prisma.schedule_Settings.findUnique({ + where: { userId: member.userId }, + ...getUserScheduleSettingsQueryArgs() + }); + + if (!userSettings) { + userSettings = await prisma.schedule_Settings.create({ + data: { + userId: member.userId, + availabilities: { + createMany: { + data: [ + { + availability: [], + dateSet: dateScheduled + } + ] + } + }, + personalGmail: '', + personalZoomLink: '' + }, + ...getUserScheduleSettingsQueryArgs() + }); + } + + // Check if user has availability already for the scheduled date + // TODO: Due to the off-by-one date bug, need to adjust one day from the scheduled date + // might need to make another ticket for this + const existingAvailability = userSettings.availabilities.find((availability) => { + const availabilityDate = new Date(availability.dateSet); + const scheduledDate = new Date(updatedDesignReview.dateScheduled); + // Subtract one day from scheduledDate + const dayAfterScheduled = new Date(scheduledDate); + dayAfterScheduled.setDate(scheduledDate.getDate() + 1); + return availabilityDate.toDateString() === dayAfterScheduled.toDateString(); + }); + + // const existingAvailability = userSettings.availabilities.find( + // (availability) => availability.dateSet.toDateString() === updatedDesignReview.dateScheduled.toDateString() + // ); + + if (existingAvailability) { + // Remove meeting times from existing availability + const updatedAvailability = existingAvailability.availability.filter((time) => !meetingTimes.includes(time)); + + await prisma.availability.update({ + where: { availabilityId: existingAvailability.availabilityId }, + data: { + availability: updatedAvailability + } + }); + + await prisma.schedule_Settings.update({ + where: { userId: member.userId }, + data: { + availabilities: { + update: { + where: { availabilityId: existingAvailability.availabilityId }, + data: { + availability: updatedAvailability + } + } + } + } + }); + } + } } return designReviewTransformer(updatedDesignReview); diff --git a/src/backend/tests/test-utils.ts b/src/backend/tests/test-utils.ts index 68e35ff3db..754b23d591 100644 --- a/src/backend/tests/test-utils.ts +++ b/src/backend/tests/test-utils.ts @@ -147,6 +147,7 @@ export const resetUsers = async () => { await prisma.user_Settings.deleteMany(); await prisma.session.deleteMany(); await prisma.user_Secure_Settings.deleteMany(); + await prisma.availability.deleteMany(); await prisma.schedule_Settings.deleteMany(); await prisma.role.deleteMany(); await prisma.design_Review.deleteMany();