From 01722dd26db1acebad5d2cec7f570c7fb3737fd0 Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sun, 14 Aug 2022 13:15:18 +0300 Subject: [PATCH] Calendar db queries to sql files --- ...nagersByUserId.sql => managedByUserId.sql} | 0 app/db/models/badges/queries.server.ts | 8 +- app/db/models/calendar/create.sql | 18 ++ app/db/models/calendar/createBadge.sql | 4 + app/db/models/calendar/createDate.sql | 4 + .../models/calendar/deleteBadgesByEventId.sql | 4 + .../models/calendar/deleteDatesByEventId.sql | 4 + .../calendar/deleteResultTeamsByEventId.sql | 4 + app/db/models/calendar/eventsToReport.sql | 18 ++ .../calendar/findAllBetweenTwoTimestamps.sql | 41 +++ .../models/calendar/findBadgesByEventId.sql | 10 + app/db/models/calendar/findById.sql | 31 ++ .../calendar/findMatesByResultTeamId.sql | 16 + .../models/calendar/findResultsByUserId.sql | 23 ++ .../models/calendar/findWinnersByEventId.sql | 18 ++ app/db/models/calendar/insertResultPlayer.sql | 4 + app/db/models/calendar/insertResultTeam.sql | 4 + app/db/models/calendar/queries.server.ts | 296 +++--------------- app/db/models/calendar/startTimesOfRange.sql | 7 + app/db/models/calendar/update.sql | 10 + .../calendar/updateParticipantsCount.sql | 6 + app/routes/calendar/$id/index.tsx | 2 +- app/routes/calendar/index.tsx | 2 +- app/routes/calendar/new.tsx | 2 +- 24 files changed, 279 insertions(+), 257 deletions(-) rename app/db/models/badges/{managersByUserId.sql => managedByUserId.sql} (100%) create mode 100644 app/db/models/calendar/create.sql create mode 100644 app/db/models/calendar/createBadge.sql create mode 100644 app/db/models/calendar/createDate.sql create mode 100644 app/db/models/calendar/deleteBadgesByEventId.sql create mode 100644 app/db/models/calendar/deleteDatesByEventId.sql create mode 100644 app/db/models/calendar/deleteResultTeamsByEventId.sql create mode 100644 app/db/models/calendar/eventsToReport.sql create mode 100644 app/db/models/calendar/findAllBetweenTwoTimestamps.sql create mode 100644 app/db/models/calendar/findBadgesByEventId.sql create mode 100644 app/db/models/calendar/findById.sql create mode 100644 app/db/models/calendar/findMatesByResultTeamId.sql create mode 100644 app/db/models/calendar/findResultsByUserId.sql create mode 100644 app/db/models/calendar/findWinnersByEventId.sql create mode 100644 app/db/models/calendar/insertResultPlayer.sql create mode 100644 app/db/models/calendar/insertResultTeam.sql create mode 100644 app/db/models/calendar/startTimesOfRange.sql create mode 100644 app/db/models/calendar/update.sql create mode 100644 app/db/models/calendar/updateParticipantsCount.sql diff --git a/app/db/models/badges/managersByUserId.sql b/app/db/models/badges/managedByUserId.sql similarity index 100% rename from app/db/models/badges/managersByUserId.sql rename to app/db/models/badges/managedByUserId.sql diff --git a/app/db/models/badges/queries.server.ts b/app/db/models/badges/queries.server.ts index 951f6d924..0434830d3 100644 --- a/app/db/models/badges/queries.server.ts +++ b/app/db/models/badges/queries.server.ts @@ -9,7 +9,7 @@ import countsByUserIdSql from "./countsByUserId.sql"; import findAllSql from "./findAll.sql"; import ownersByBadgeIdSql from "./ownersByBadgeId.sql"; import managersByBadgeIdSql from "./managersByBadgeId.sql"; -import managersByUserIdSql from "./managersByUserId.sql"; +import managedByUserIdSql from "./managedByUserId.sql"; const deleteManyManagersStm = sql.prepare(deleteManyManagersSql); const createManagerStm = sql.prepare(createManagerSql); @@ -97,10 +97,10 @@ export function managersByBadgeId(id: Badge["id"]) { return managersByBadgeIdStm.all({ id }) as ManagersByBadgeId; } -const managersByUserIdStm = sql.prepare(managersByUserIdSql); +const managedByUserIdStm = sql.prepare(managedByUserIdSql); -export function managersByUserId(userId: User["id"]) { - return managersByUserIdStm.all({ userId }) as Array< +export function managedByUserId(userId: User["id"]) { + return managedByUserIdStm.all({ userId }) as Array< Pick >; } diff --git a/app/db/models/calendar/create.sql b/app/db/models/calendar/create.sql new file mode 100644 index 000000000..e4f118660 --- /dev/null +++ b/app/db/models/calendar/create.sql @@ -0,0 +1,18 @@ +insert into + "CalendarEvent" ( + "name", + "authorId", + "tags", + "description", + "discordInviteCode", + "bracketUrl" + ) +values + ( + @name, + @authorId, + @tags, + @description, + @discordInviteCode, + @bracketUrl + ) returning * \ No newline at end of file diff --git a/app/db/models/calendar/createBadge.sql b/app/db/models/calendar/createBadge.sql new file mode 100644 index 000000000..69255d51a --- /dev/null +++ b/app/db/models/calendar/createBadge.sql @@ -0,0 +1,4 @@ +insert into + "CalendarEventBadge" ("eventId", "badgeId") +values + (@eventId, @badgeId) \ No newline at end of file diff --git a/app/db/models/calendar/createDate.sql b/app/db/models/calendar/createDate.sql new file mode 100644 index 000000000..c3fde4018 --- /dev/null +++ b/app/db/models/calendar/createDate.sql @@ -0,0 +1,4 @@ +insert into + "CalendarEventDate" ("eventId", "startTime") +values + (@eventId, @startTime) \ No newline at end of file diff --git a/app/db/models/calendar/deleteBadgesByEventId.sql b/app/db/models/calendar/deleteBadgesByEventId.sql new file mode 100644 index 000000000..b3900fd2a --- /dev/null +++ b/app/db/models/calendar/deleteBadgesByEventId.sql @@ -0,0 +1,4 @@ +delete from + "CalendarEventBadge" +where + "eventId" = @eventId \ No newline at end of file diff --git a/app/db/models/calendar/deleteDatesByEventId.sql b/app/db/models/calendar/deleteDatesByEventId.sql new file mode 100644 index 000000000..41da0cfd1 --- /dev/null +++ b/app/db/models/calendar/deleteDatesByEventId.sql @@ -0,0 +1,4 @@ +delete from + "CalendarEventDate" +where + "eventId" = @eventId \ No newline at end of file diff --git a/app/db/models/calendar/deleteResultTeamsByEventId.sql b/app/db/models/calendar/deleteResultTeamsByEventId.sql new file mode 100644 index 000000000..1d5c5ee83 --- /dev/null +++ b/app/db/models/calendar/deleteResultTeamsByEventId.sql @@ -0,0 +1,4 @@ +delete from + "CalendarEventResultTeam" +where + "eventId" = @eventId \ No newline at end of file diff --git a/app/db/models/calendar/eventsToReport.sql b/app/db/models/calendar/eventsToReport.sql new file mode 100644 index 000000000..afb80df76 --- /dev/null +++ b/app/db/models/calendar/eventsToReport.sql @@ -0,0 +1,18 @@ +select + "CalendarEvent"."id", + "CalendarEvent"."name", + ( + select + max("startTime") + from + "CalendarEventDate" + where + "eventId" = "CalendarEvent"."id" + ) as "startTime" +from + "CalendarEvent" +where + "CalendarEvent"."authorId" = @authorId + and "startTime" > @lowerLimitTime + and "startTime" < @upperLimitTime + and "CalendarEvent"."participantCount" is null \ No newline at end of file diff --git a/app/db/models/calendar/findAllBetweenTwoTimestamps.sql b/app/db/models/calendar/findAllBetweenTwoTimestamps.sql new file mode 100644 index 000000000..893f2568f --- /dev/null +++ b/app/db/models/calendar/findAllBetweenTwoTimestamps.sql @@ -0,0 +1,41 @@ +select + "CalendarEvent"."name", + "CalendarEvent"."discordUrl", + "CalendarEvent"."bracketUrl", + "CalendarEvent"."tags", + "CalendarEventDate"."id" as "eventDateId", + "CalendarEventDate"."eventId", + "CalendarEventDate"."startTime", + "User"."discordName", + "User"."discordDiscriminator", + "CalendarEventRanks"."nthAppearance", + exists ( + select + 1 + from + "CalendarEventBadge" + where + "CalendarEventBadge"."eventId" = "CalendarEventDate"."eventId" + ) as "hasBadge" +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 \ No newline at end of file diff --git a/app/db/models/calendar/findBadgesByEventId.sql b/app/db/models/calendar/findBadgesByEventId.sql new file mode 100644 index 000000000..5993f5cf2 --- /dev/null +++ b/app/db/models/calendar/findBadgesByEventId.sql @@ -0,0 +1,10 @@ +select + "Badge"."id", + "Badge"."code", + "Badge"."hue", + "Badge"."displayName" +from + "CalendarEventBadge" + join "Badge" on "CalendarEventBadge"."badgeId" = "Badge"."id" +where + "CalendarEventBadge"."eventId" = @eventId \ No newline at end of file diff --git a/app/db/models/calendar/findById.sql b/app/db/models/calendar/findById.sql new file mode 100644 index 000000000..42c5f95c5 --- /dev/null +++ b/app/db/models/calendar/findById.sql @@ -0,0 +1,31 @@ +select + "CalendarEvent"."name", + "CalendarEvent"."description", + "CalendarEvent"."discordInviteCode", + "CalendarEvent"."discordUrl", + "CalendarEvent"."bracketUrl", + "CalendarEvent"."tags", + "CalendarEvent"."participantCount", + "User"."id" as "authorId", + exists ( + select + 1 + from + "CalendarEventBadge" + where + "CalendarEventBadge"."eventId" = "CalendarEventDate"."eventId" + ) as "hasBadge", + "CalendarEventDate"."startTime", + "CalendarEventDate"."eventId", + "User"."discordName", + "User"."discordDiscriminator", + "User"."discordId", + "User"."discordAvatar" +from + "CalendarEvent" + join "CalendarEventDate" on "CalendarEvent"."id" = "CalendarEventDate"."eventId" + join "User" on "CalendarEvent"."authorId" = "User"."id" +where + "CalendarEvent"."id" = @id +order by + "CalendarEventDate"."startTime" asc \ No newline at end of file diff --git a/app/db/models/calendar/findMatesByResultTeamId.sql b/app/db/models/calendar/findMatesByResultTeamId.sql new file mode 100644 index 000000000..c6232dc79 --- /dev/null +++ b/app/db/models/calendar/findMatesByResultTeamId.sql @@ -0,0 +1,16 @@ +select + "CalendarEventResultPlayer"."name", + "User"."id", + "User"."discordName" as "discordName", + "User"."discordDiscriminator" as "discordDiscriminator", + "User"."discordId" as "discordId", + "User"."discordAvatar" as "discordAvatar" +from + "CalendarEventResultPlayer" + left join "User" on "User"."id" = "CalendarEventResultPlayer"."userId" +where + "teamId" = @teamId + and ( + "CalendarEventResultPlayer"."userId" is null + or "CalendarEventResultPlayer"."userId" != @userId + ) \ No newline at end of file diff --git a/app/db/models/calendar/findResultsByUserId.sql b/app/db/models/calendar/findResultsByUserId.sql new file mode 100644 index 000000000..db2e6e9fc --- /dev/null +++ b/app/db/models/calendar/findResultsByUserId.sql @@ -0,0 +1,23 @@ +select + "CalendarEvent"."id" as "eventId", + "CalendarEvent"."name" as "eventName", + "CalendarEventResultTeam"."id" as "teamId", + "CalendarEventResultTeam"."name" as "teamName", + "CalendarEventResultTeam"."placement", + "CalendarEvent"."participantCount", + ( + select + max("startTime") + from + "CalendarEventDate" + where + "eventId" = "CalendarEvent"."id" + ) as "startTime" +from + "CalendarEventResultPlayer" + join "CalendarEventResultTeam" on "CalendarEventResultTeam"."id" = "CalendarEventResultPlayer"."teamId" + join "CalendarEvent" on "CalendarEvent"."id" = "CalendarEventResultTeam"."eventId" +where + "CalendarEventResultPlayer"."userId" = @userId +order by + "startTime" desc \ No newline at end of file diff --git a/app/db/models/calendar/findWinnersByEventId.sql b/app/db/models/calendar/findWinnersByEventId.sql new file mode 100644 index 000000000..1643590f1 --- /dev/null +++ b/app/db/models/calendar/findWinnersByEventId.sql @@ -0,0 +1,18 @@ +select + "CalendarEventResultTeam"."id", + "CalendarEventResultTeam"."name" as "teamName", + "CalendarEventResultTeam"."placement", + "CalendarEventResultPlayer"."userId" as "playerId", + "CalendarEventResultPlayer"."name" as "playerName", + "User"."discordName" as "playerDiscordName", + "User"."discordDiscriminator" as "playerDiscordDiscriminator", + "User"."discordId" as "playerDiscordId", + "User"."discordAvatar" as "playerDiscordAvatar" +from + "CalendarEventResultTeam" + left join "CalendarEventResultPlayer" on "CalendarEventResultPlayer"."teamId" = "CalendarEventResultTeam"."id" + left join "User" on "User"."id" = "CalendarEventResultPlayer"."userId" +where + "CalendarEventResultTeam"."eventId" = @eventId +order by + "CalendarEventResultTeam"."placement" asc \ No newline at end of file diff --git a/app/db/models/calendar/insertResultPlayer.sql b/app/db/models/calendar/insertResultPlayer.sql new file mode 100644 index 000000000..e24b033fc --- /dev/null +++ b/app/db/models/calendar/insertResultPlayer.sql @@ -0,0 +1,4 @@ +insert into + "CalendarEventResultPlayer" ("teamId", "userId", "name") +values + (@teamId, @userId, @name) \ No newline at end of file diff --git a/app/db/models/calendar/insertResultTeam.sql b/app/db/models/calendar/insertResultTeam.sql new file mode 100644 index 000000000..117a0b81e --- /dev/null +++ b/app/db/models/calendar/insertResultTeam.sql @@ -0,0 +1,4 @@ +insert into + "CalendarEventResultTeam" ("eventId", "name", "placement") +values + (@eventId, @name, @placement) returning * \ No newline at end of file diff --git a/app/db/models/calendar/queries.server.ts b/app/db/models/calendar/queries.server.ts index 2f76a2ffc..24a3ea899 100644 --- a/app/db/models/calendar/queries.server.ts +++ b/app/db/models/calendar/queries.server.ts @@ -11,65 +11,31 @@ import type { CalendarEventResultPlayer, } from "../../types"; -const createStm = sql.prepare(` - insert into "CalendarEvent" ( - "name", - "authorId", - "tags", - "description", - "discordInviteCode", - "bracketUrl" - ) values ( - $name, - $authorId, - $tags, - $description, - $discordInviteCode, - $bracketUrl - ) returning * -`); +import createSql from "./create.sql"; +import updateSql from "./update.sql"; +import createDateSql from "./createDate.sql"; +import deleteDatesByEventIdSql from "./deleteDatesByEventId.sql"; +import createBadgeSql from "./createBadge.sql"; +import deleteBadgesByEventIdSql from "./deleteBadgesByEventId.sql"; +import updateParticipantsCountSql from "./updateParticipantsCount.sql"; +import deleteResultTeamsByEventIdSql from "./deleteResultTeamsByEventId.sql"; +import insertResultTeamSql from "./insertResultTeam.sql"; +import insertResultPlayerSql from "./insertResultPlayer.sql"; +import findWinnersByEventIdSql from "./findWinnersByEventId.sql"; +import findResultsByUserIdSql from "./findResultsByUserId.sql"; +import findMatesByResultTeamIdSql from "./findMatesByResultTeamId.sql"; +import findAllBetweenTwoTimestampsSql from "./findAllBetweenTwoTimestamps.sql"; +import findByIdSql from "./findById.sql"; +import startTimesOfRangeSql from "./startTimesOfRange.sql"; +import findBadgesByEventIdSql from "./findBadgesByEventId.sql"; +import eventsToReportSql from "./eventsToReport.sql"; -const updateStm = sql.prepare(` - update "CalendarEvent" set - "name" = $name, - "tags" = $tags, - "description" = $description, - "discordInviteCode" = $discordInviteCode, - "bracketUrl" = $bracketUrl - where "id" = $eventId -`); - -const createDateStm = sql.prepare(` - insert into "CalendarEventDate" ( - "eventId", - "startTime" - ) - values ( - $eventId, - $startTime - ) -`); - -const deleteDatesByEventIdStm = sql.prepare(` - delete from "CalendarEventDate" - where "eventId" = $eventId -`); - -const createBadgeStm = sql.prepare(` - insert into "CalendarEventBadge" ( - "eventId", - "badgeId" - ) - values ( - $eventId, - $badgeId - ) -`); - -const deleteBadgesByEventIdStm = sql.prepare(` - delete from "CalendarEventBadge" - where "eventId" = $eventId -`); +const createStm = sql.prepare(createSql); +const updateStm = sql.prepare(updateSql); +const createDateStm = sql.prepare(createDateSql); +const deleteDatesByEventIdStm = sql.prepare(deleteDatesByEventIdSql); +const createBadgeStm = sql.prepare(createBadgeSql); +const deleteBadgesByEventIdStm = sql.prepare(deleteBadgesByEventIdSql); export type CreateArgs = Pick< CalendarEvent, @@ -132,41 +98,12 @@ export const update = sql.transaction( } ); -const updateCalendarEventParticipantsCountStm = sql.prepare(` - update "CalendarEvent" - set "participantCount" = $participantCount - where "id" = $eventId -`); - -const deleteCalendarEventResultTeamsByEventIdStm = sql.prepare(` - delete from "CalendarEventResultTeam" - where "eventId" = $eventId -`); - -const insertCalendarEventResultTeamStm = sql.prepare(` - insert into "CalendarEventResultTeam" ( - "eventId", - "name", - "placement" - ) values ( - $eventId, - $name, - $placement - ) - returning * -`); - -const insertCalendarEventResultPlayerStm = sql.prepare(` - insert into "CalendarEventResultPlayer" ( - "teamId", - "userId", - "name" - ) values ( - $teamId, - $userId, - $name - ) -`); +const updateParticipantsCountStm = sql.prepare(updateParticipantsCountSql); +const deleteResultTeamsByEventIdStm = sql.prepare( + deleteResultTeamsByEventIdSql +); +const insertResultTeamStm = sql.prepare(insertResultTeamSql); +const insertResultPlayerStm = sql.prepare(insertResultPlayerSql); export const upsertReportedScores = sql.transaction( ({ @@ -185,18 +122,18 @@ export const upsertReportedScores = sql.transaction( }>; }>; }) => { - updateCalendarEventParticipantsCountStm.run({ eventId, participantCount }); - deleteCalendarEventResultTeamsByEventIdStm.run({ eventId }); + updateParticipantsCountStm.run({ eventId, participantCount }); + deleteResultTeamsByEventIdStm.run({ eventId }); for (const { players, ...teamArgs } of results) { - const teamInDb = insertCalendarEventResultTeamStm.get({ + const teamInDb = insertResultTeamStm.get({ eventId, name: teamArgs.teamName, placement: teamArgs.placement, }) as CalendarEventResultTeam; for (const playerArgs of players) { - insertCalendarEventResultPlayerStm.run({ + insertResultPlayerStm.run({ teamId: teamInDb.id, userId: playerArgs.userId, name: playerArgs.name, @@ -206,29 +143,7 @@ export const upsertReportedScores = sql.transaction( } ); -const findWinnersByEventIdStm = sql.prepare(` - select - "CalendarEventResultTeam"."id", - "CalendarEventResultTeam"."name" as "teamName", - "CalendarEventResultTeam"."placement", - "CalendarEventResultPlayer"."userId" as "playerId", - "CalendarEventResultPlayer"."name" as "playerName", - "User"."discordName" as "playerDiscordName", - "User"."discordDiscriminator" as "playerDiscordDiscriminator", - "User"."discordId" as "playerDiscordId", - "User"."discordAvatar" as "playerDiscordAvatar" - from "CalendarEventResultTeam" - left join - "CalendarEventResultPlayer" - on - "CalendarEventResultPlayer"."teamId" = "CalendarEventResultTeam"."id" - left join - "User" - on - "User"."id" = "CalendarEventResultPlayer"."userId" - where "CalendarEventResultTeam"."eventId" = $eventId - order by "placement" asc -`); +const findWinnersByEventIdStm = sql.prepare(findWinnersByEventIdSql); export function findResultsByEventId(eventId: CalendarEvent["id"]) { const rows = findWinnersByEventIdStm.all({ eventId }) as Array<{ @@ -285,46 +200,8 @@ export function findResultsByEventId(eventId: CalendarEvent["id"]) { return result; } -const findResultsByUserIdStm = sql.prepare(` - select - "CalendarEvent"."id" as "eventId", - "CalendarEvent"."name" as "eventName", - "CalendarEventResultTeam"."id" as "teamId", - "CalendarEventResultTeam"."name" as "teamName", - "CalendarEventResultTeam"."placement", - "CalendarEvent"."participantCount", - (select max("startTime") - from "CalendarEventDate" - where "eventId" = "CalendarEvent"."id") - as "startTime" - from "CalendarEventResultPlayer" - join "CalendarEventResultTeam" - on "CalendarEventResultTeam"."id" = "CalendarEventResultPlayer"."teamId" - join "CalendarEvent" - on "CalendarEvent"."id" = "CalendarEventResultTeam"."eventId" - where "CalendarEventResultPlayer"."userId" = $userId - order by "startTime" desc -`); - -const findMatesByResultTeamIdStm = sql.prepare(` - select - "CalendarEventResultPlayer"."name", - "User"."id", - "User"."discordName" as "discordName", - "User"."discordDiscriminator" as "discordDiscriminator", - "User"."discordId" as "discordId", - "User"."discordAvatar" as "discordAvatar" - from "CalendarEventResultPlayer" - left join "User" - on "User"."id" = "CalendarEventResultPlayer"."userId" - where "teamId" = $teamId - and ( - "CalendarEventResultPlayer"."userId" is null - or - "CalendarEventResultPlayer"."userId" != $userId - ) -`); - +const findResultsByUserIdStm = sql.prepare(findResultsByUserIdSql); +const findMatesByResultTeamIdStm = sql.prepare(findMatesByResultTeamIdSql); export function findResultsByUserId(userId: User["id"]) { return ( findResultsByUserIdStm.all({ userId }) as Array<{ @@ -354,36 +231,9 @@ export function findResultsByUserId(userId: User["id"]) { })); } -const findAllBetweenTwoTimestampsStm = sql.prepare(` - select - "CalendarEvent"."name", - "CalendarEvent"."discordUrl", - "CalendarEvent"."bracketUrl", - "CalendarEvent"."tags", - "CalendarEventDate"."id" as "eventDateId", - "CalendarEventDate"."eventId", - "CalendarEventDate"."startTime", - "User"."discordName", - "User"."discordDiscriminator", - "CalendarEventRanks"."nthAppearance", - exists (select 1 - from "CalendarEventBadge" - where "CalendarEventBadge"."eventId" = "CalendarEventDate"."eventId" - ) as "hasBadge" - 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 -`); +const findAllBetweenTwoTimestampsStm = sql.prepare( + findAllBetweenTwoTimestampsSql +); function addTagArray< T extends { hasBadge: number; tags?: CalendarEvent["tags"] } @@ -418,32 +268,7 @@ export function findAllBetweenTwoTimestamps({ return rows.map(addTagArray); } -const findByIdStm = sql.prepare(` - select - "CalendarEvent"."name", - "CalendarEvent"."description", - "CalendarEvent"."discordInviteCode", - "CalendarEvent"."discordUrl", - "CalendarEvent"."bracketUrl", - "CalendarEvent"."tags", - "CalendarEvent"."participantCount", - "User"."id" as "authorId", - exists (select 1 - from "CalendarEventBadge" - where "CalendarEventBadge"."eventId" = "CalendarEventDate"."eventId" - ) as "hasBadge", - "CalendarEventDate"."startTime", - "CalendarEventDate"."eventId", - "User"."discordName", - "User"."discordDiscriminator", - "User"."discordId", - "User"."discordAvatar" - from "CalendarEvent" - join "CalendarEventDate" on "CalendarEvent"."id" = "CalendarEventDate"."eventId" - join "User" on "CalendarEvent"."authorId" = "User"."id" - where "CalendarEvent"."id" = $id - order by "CalendarEventDate"."startTime" asc -`); +const findByIdStm = sql.prepare(findByIdSql); export function findById(id: CalendarEvent["id"]) { const [firstRow, ...rest] = findByIdStm.all({ id }) as Array< @@ -474,13 +299,7 @@ export function findById(id: CalendarEvent["id"]) { }); } -const startTimesOfRangeStm = sql.prepare(` - select - "CalendarEventDate"."startTime" - from "CalendarEventDate" - where "CalendarEventDate"."startTime" between $startTime and $endTime -`); - +const startTimesOfRangeStm = sql.prepare(startTimesOfRangeSql); export function startTimesOfRange({ startTime, endTime, @@ -496,37 +315,14 @@ export function startTimesOfRange({ ).map(({ startTime }) => startTime); } -const findBadgesByIdStm = sql.prepare(` - select "Badge"."id", "Badge"."code", "Badge"."hue", "Badge"."displayName" - from "CalendarEventBadge" - join "Badge" on "CalendarEventBadge"."badgeId" = "Badge"."id" - where "CalendarEventBadge"."eventId" = $eventId -`); - -export function findBadgesById(eventId: CalendarEvent["id"]) { - return findBadgesByIdStm.all({ eventId }) as Array< +const findBadgesByEventIdStm = sql.prepare(findBadgesByEventIdSql); +export function findBadgesByEventId(eventId: CalendarEvent["id"]) { + return findBadgesByEventIdStm.all({ eventId }) as Array< Pick >; } -const eventsToReportStm = sql.prepare(` - select - "CalendarEvent"."id", - "CalendarEvent"."name", - (select max("startTime") - from "CalendarEventDate" - where "eventId" = "CalendarEvent"."id") as "startTime" - from "CalendarEvent" - where - "CalendarEvent"."authorId" = $authorId - and - "startTime" > $lowerLimitTime - and - "startTime" < $upperLimitTime - and - "CalendarEvent"."participantCount" is null -`); - +const eventsToReportStm = sql.prepare(eventsToReportSql); export function eventsToReport(authorId?: CalendarEvent["authorId"]) { if (!authorId) return []; diff --git a/app/db/models/calendar/startTimesOfRange.sql b/app/db/models/calendar/startTimesOfRange.sql new file mode 100644 index 000000000..b21061211 --- /dev/null +++ b/app/db/models/calendar/startTimesOfRange.sql @@ -0,0 +1,7 @@ +select + "CalendarEventDate"."startTime" +from + "CalendarEventDate" +where + "CalendarEventDate"."startTime" between @startTime + and @endTime \ No newline at end of file diff --git a/app/db/models/calendar/update.sql b/app/db/models/calendar/update.sql new file mode 100644 index 000000000..675ccf73b --- /dev/null +++ b/app/db/models/calendar/update.sql @@ -0,0 +1,10 @@ +update + "CalendarEvent" +set + "name" = @name, + "tags" = @tags, + "description" = @description, + "discordInviteCode" = @discordInviteCode, + "bracketUrl" = @bracketUrl +where + "id" = @eventId \ No newline at end of file diff --git a/app/db/models/calendar/updateParticipantsCount.sql b/app/db/models/calendar/updateParticipantsCount.sql new file mode 100644 index 000000000..a27abdd16 --- /dev/null +++ b/app/db/models/calendar/updateParticipantsCount.sql @@ -0,0 +1,6 @@ +update + "CalendarEvent" +set + "participantCount" = @participantCount +where + "id" = @eventId \ No newline at end of file diff --git a/app/routes/calendar/$id/index.tsx b/app/routes/calendar/$id/index.tsx index bf2b9c68f..ffd210028 100644 --- a/app/routes/calendar/$id/index.tsx +++ b/app/routes/calendar/$id/index.tsx @@ -64,7 +64,7 @@ export const loader = async ({ params, request }: LoaderArgs) => { return json({ event, - badgePrizes: db.calendarEvents.findBadgesById(parsedParams.id), + badgePrizes: db.calendarEvents.findBadgesByEventId(parsedParams.id), title: makeTitle([event.name, t("pages.calendar")]), results: db.calendarEvents.findResultsByEventId(parsedParams.id), }); diff --git a/app/routes/calendar/index.tsx b/app/routes/calendar/index.tsx index 76b843728..7564a6128 100644 --- a/app/routes/calendar/index.tsx +++ b/app/routes/calendar/index.tsx @@ -123,7 +123,7 @@ function fetchEventsOfWeek(args: { week: number; year: number }) { .map((event) => ({ ...event, badgePrizes: event.tags.includes("BADGE") - ? db.calendarEvents.findBadgesById(event.eventId) + ? db.calendarEvents.findBadgesByEventId(event.eventId) : [], })); } diff --git a/app/routes/calendar/new.tsx b/app/routes/calendar/new.tsx index a1df838f0..9b6c23012 100644 --- a/app/routes/calendar/new.tsx +++ b/app/routes/calendar/new.tsx @@ -180,7 +180,7 @@ export const loader = async ({ request }: LoaderArgs) => { ...eventToEdit, // "BADGE" tag is special and can't be edited like other tags tags: eventToEdit.tags.filter((tag) => tag !== "BADGE"), - badges: db.calendarEvents.findBadgesById(eventId), + badges: db.calendarEvents.findBadgesByEventId(eventId), } : undefined, title: makeTitle([canEditEvent ? "Edit" : "New", t("pages.calendar")]),