From ab230e137ea51f0093ffb1f11556d3ed548b097b Mon Sep 17 00:00:00 2001 From: KathleenX7 Date: Sat, 14 Dec 2024 10:43:15 -0500 Subject: [PATCH] handle duplicate group --- .../implementations/notificationService.ts | 5 ++ .../pages/announcements/AnnouncementsPage.tsx | 55 ++++++++++++++----- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/backend/services/implementations/notificationService.ts b/backend/services/implementations/notificationService.ts index 8a47039..1517b43 100644 --- a/backend/services/implementations/notificationService.ts +++ b/backend/services/implementations/notificationService.ts @@ -37,6 +37,11 @@ class NotificationService implements INotificationService { const residents = await prisma.resident.findMany({ where: { roomNumber: { in: roomIds } }, }); + if (residents.length !== roomIds.length) { + throw Object.assign(new Error("Room id does not exist."), { + code: 400, + }); + } const residentIds = residents.map((resident) => resident.userId); const existingGroup = await prisma.notificationGroup.findMany({ diff --git a/frontend/src/components/pages/announcements/AnnouncementsPage.tsx b/frontend/src/components/pages/announcements/AnnouncementsPage.tsx index 04b63a5..bd6ceca 100644 --- a/frontend/src/components/pages/announcements/AnnouncementsPage.tsx +++ b/frontend/src/components/pages/announcements/AnnouncementsPage.tsx @@ -204,22 +204,17 @@ const AnnouncementsPage = (): React.ReactElement => { ) => { try { if (selectedIds.length > 1) { - throw Object.assign( - new Error('Only include one room id.'), - { code: 400 } - ); + throw Object.assign(new Error("Only include one room id."), { + code: 400, + }); } else if (selectedIds.length === 0) { - throw Object.assign( - new Error('No rooms selected.'), - { code: 400 } - ); + throw Object.assign(new Error("No rooms selected."), { code: 400 }); } let newGroup; if (selectedIds[0] === -1) { - newGroup = ( - await createAnnouncementGroup({}) - ).data.createNotificationGroup; + newGroup = (await createAnnouncementGroup({})).data + .createNotificationGroup; } else { newGroup = ( await createNotificationGroup({ @@ -231,8 +226,42 @@ const AnnouncementsPage = (): React.ReactElement => { } await sendNotification(message, newGroup.id, newGroup); - } catch (e) { - console.log(e); + } catch (e: any) { + if (e.message === "Announcement Group already exists.") { + const announcementId = announcements.find( + (group) => group.announcementGroup === true, + )?.id; + + if (announcementId) { + await sendNotification(message, announcementId); + setSelectedGroup(announcementId); + } + } else if ( + e.message === + "Notification Group already exists with specified roomIds." + ) { + const groupId = announcements.find((group) => { + if ( + group.recipients && + group.recipients.length === selectedIds.length + ) { + for (let i = 0; i < group.recipients.length; i += 1) { + if (!selectedIds.includes(group.recipients[i].roomNumber)) { + return false; + } + } + return true; + } + return false; + })?.id; + + if (groupId) { + await sendNotification(message, groupId); + setSelectedGroup(groupId); + } + } else { + console.log(e); + } } };