Skip to content

Commit 8be3f80

Browse files
committed
Heavily simplified this route
1 parent 6d6535e commit 8be3f80

File tree

2 files changed

+25
-30
lines changed

2 files changed

+25
-30
lines changed

src/services/stats/stats-router.test.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,22 +1020,23 @@ describe("GET /stats/attended-at-least/:N", () => {
10201020
const eventC = { ...EVENT_3, eventId: uuidv4() };
10211021
await SupabaseDB.EVENTS.insert([eventA, eventB, eventC]);
10221022

1023-
// Ritam attends 2 events
1024-
await SupabaseDB.EVENT_ATTENDANCES.insert([
1025-
{ eventId: eventA.eventId, attendee: ATTENDEE_RITAM.userId },
1026-
{ eventId: eventB.eventId, attendee: ATTENDEE_RITAM.userId },
1027-
]);
1028-
1029-
// Nathan attends 3 events
1030-
await SupabaseDB.EVENT_ATTENDANCES.insert([
1031-
{ eventId: eventA.eventId, attendee: ATTENDEE_NATHAN.userId },
1032-
{ eventId: eventB.eventId, attendee: ATTENDEE_NATHAN.userId },
1033-
{ eventId: eventC.eventId, attendee: ATTENDEE_NATHAN.userId },
1034-
]);
1035-
1036-
// Timothy attends 1 event
1037-
await SupabaseDB.EVENT_ATTENDANCES.insert([
1038-
{ eventId: eventA.eventId, attendee: ATTENDEE_TIMOTHY.userId },
1023+
await SupabaseDB.ATTENDEE_ATTENDANCES.insert([
1024+
{
1025+
userId: ATTENDEE_RITAM.userId,
1026+
eventsAttended: [eventA.eventId, eventB.eventId],
1027+
},
1028+
{
1029+
userId: ATTENDEE_NATHAN.userId,
1030+
eventsAttended: [
1031+
eventA.eventId,
1032+
eventB.eventId,
1033+
eventC.eventId,
1034+
],
1035+
},
1036+
{
1037+
userId: ATTENDEE_TIMOTHY.userId,
1038+
eventsAttended: [eventA.eventId],
1039+
},
10391040
]);
10401041
});
10411042

src/services/stats/stats-router.ts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ statsRouter.get(
318318
}
319319
);
320320

321-
// Take in paramter n, return the number of attendees who attended at least n events
321+
// Take in parameter n, return the number of attendees who attended at least n events
322322
statsRouter.get(
323323
"/attended-at-least/:N",
324324
RoleChecker([Role.enum.STAFF], false),
@@ -339,21 +339,15 @@ statsRouter.get(
339339
const n = result.data.N;
340340

341341
const { data: attendanceRecords } =
342-
await SupabaseDB.EVENT_ATTENDANCES.select(
343-
"attendee"
342+
await SupabaseDB.ATTENDEE_ATTENDANCES.select(
343+
"eventsAttended"
344344
).throwOnError();
345345

346-
// Count occurrences of each attendee
347-
const attendanceCountMap: Record<string, number> = {};
348-
attendanceRecords?.forEach((record: { attendee: string }) => {
349-
attendanceCountMap[record.attendee] =
350-
(attendanceCountMap[record.attendee] || 0) + 1;
351-
});
352-
353-
// Count how many attendees have attended at least n events
354-
const countAtLeastN = Object.values(attendanceCountMap).filter(
355-
(count) => count >= n
356-
).length;
346+
const countAtLeastN =
347+
attendanceRecords?.filter(
348+
(record: { eventsAttended: string[] }) =>
349+
record.eventsAttended.length >= n
350+
).length ?? 0;
357351

358352
return res.status(StatusCodes.OK).json({ count: countAtLeastN });
359353
}

0 commit comments

Comments
 (0)