From e22d169670f62c786625ec9841f2f7dba3b3e83b Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Wed, 27 Jul 2022 00:49:21 +0300 Subject: [PATCH] Add SQL solution to findAllBetweenTwoTimestamps by burkhalter83 :) --- app/db/models/calendar.server.ts | 39 +++++++++++++++++--------------- app/routes/calendar/index.tsx | 2 +- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/app/db/models/calendar.server.ts b/app/db/models/calendar.server.ts index 2a7e08e7a..b902c23dc 100644 --- a/app/db/models/calendar.server.ts +++ b/app/db/models/calendar.server.ts @@ -4,17 +4,26 @@ import type { CalendarEvent, CalendarEventDate, User } from "../types"; const findAllBetweenTwoTimestampsStm = sql.prepare(` select - "CalendarEvent"."name", - "CalendarEvent"."discordUrl", - "CalendarEvent"."bracketUrl", - "CalendarEventDate"."id", - "CalendarEventDate"."eventId", - "CalendarEventDate"."startTime", - "User"."discordName", - "User"."discordDiscriminator" + "CalendarEvent"."name", + "CalendarEvent"."discordUrl", + "CalendarEvent"."bracketUrl", + "CalendarEventDate"."id", + "CalendarEventDate"."eventId", + "CalendarEventDate"."startTime", + "User"."discordName", + "User"."discordDiscriminator", + "CalendarEventRanks"."nthAppearance" from "CalendarEvent" join "CalendarEventDate" on "CalendarEvent"."id" = "CalendarEventDate"."eventId" join "User" on "CalendarEvent"."authorId" = "User"."id" + join ( + select + "id", + "eventId", + "startTime", + rank() over(partition by "eventId" order by "startTime" asc) "nthAppearance" + from "CalendarEventDate" + ) "CalendarEventRanks" on "CalendarEventDate"."id" = CalendarEventRanks."id" where "CalendarEventDate"."startTime" between $startTime and $endTime order by "CalendarEventDate"."startTime" asc `); @@ -26,22 +35,16 @@ export function findAllBetweenTwoTimestamps({ startTime: Date; endTime: Date; }) { - const rows = findAllBetweenTwoTimestampsStm.all({ + return findAllBetweenTwoTimestampsStm.all({ startTime: dateToDatabaseTimestamp(startTime), endTime: dateToDatabaseTimestamp(endTime), }) as Array< Pick & Pick & - Pick + Pick & { + nthAppearance: number; + } >; - - const eventsSeen = new Map(); - return rows.map((row) => { - const eventsSoFar = (eventsSeen.get(row.eventId) ?? 0) + 1; - eventsSeen.set(row.eventId, eventsSoFar); - - return { ...row, nthAppearance: eventsSoFar > 1 ? eventsSoFar : undefined }; - }); } const findByIdStm = sql.prepare(` diff --git a/app/routes/calendar/index.tsx b/app/routes/calendar/index.tsx index f83240c8d..b9369c1f0 100644 --- a/app/routes/calendar/index.tsx +++ b/app/routes/calendar/index.tsx @@ -292,7 +292,7 @@ function EventsList() {

{calendarEvent.name}{" "} - {calendarEvent.nthAppearance ? ( + {calendarEvent.nthAppearance > 1 ? ( Day {calendarEvent.nthAppearance}