diff --git a/app/features/tournament-bracket/actions/to.$id.brackets.server.ts b/app/features/tournament-bracket/actions/to.$id.brackets.server.ts index bc7c58f03..3502a4bdb 100644 --- a/app/features/tournament-bracket/actions/to.$id.brackets.server.ts +++ b/app/features/tournament-bracket/actions/to.$id.brackets.server.ts @@ -10,6 +10,7 @@ import { import { createSwissBracketInTransaction } from "~/features/tournament/queries/createSwissBracketInTransaction.server"; import { updateRoundMaps } from "~/features/tournament/queries/updateRoundMaps.server"; import * as TournamentRepository from "~/features/tournament/TournamentRepository.server"; +import * as TournamentTeamRepository from "~/features/tournament/TournamentTeamRepository.server"; import * as Progression from "~/features/tournament-bracket/core/Progression"; import invariant from "~/utils/invariant"; import { logger } from "~/utils/logger"; @@ -287,7 +288,7 @@ export const action: ActionFunction = async ({ params, request }) => { `Checking in (bracket try): tournament team id: ${teamMemberOf.id} - user id: ${user.id} - tournament id: ${tournament.ctx.id} - bracket idx: ${data.bracketIdx}`, ); - await TournamentRepository.checkIn({ + await TournamentTeamRepository.checkIn({ bracketIdx: data.bracketIdx, tournamentTeamId: teamMemberOf.id, }); diff --git a/app/features/tournament/TournamentRepository.server.ts b/app/features/tournament/TournamentRepository.server.ts index 979353454..c5a46fcc8 100644 --- a/app/features/tournament/TournamentRepository.server.ts +++ b/app/features/tournament/TournamentRepository.server.ts @@ -646,68 +646,6 @@ export async function friendCodesByTournamentId(tournamentId: number) { ); } -export function checkIn({ - tournamentTeamId, - bracketIdx, -}: { - tournamentTeamId: number; - bracketIdx: number | null; -}) { - return db.transaction().execute(async (trx) => { - let query = trx - .deleteFrom("TournamentTeamCheckIn") - .where("TournamentTeamCheckIn.tournamentTeamId", "=", tournamentTeamId) - .where("TournamentTeamCheckIn.isCheckOut", "=", 1); - - if (typeof bracketIdx === "number") { - query = query.where("TournamentTeamCheckIn.bracketIdx", "=", bracketIdx); - } - - await query.execute(); - - await trx - .insertInto("TournamentTeamCheckIn") - .values({ - checkedInAt: dateToDatabaseTimestamp(new Date()), - tournamentTeamId, - bracketIdx, - }) - .execute(); - }); -} - -export function checkOut({ - tournamentTeamId, - bracketIdx, -}: { - tournamentTeamId: number; - bracketIdx: number | null; -}) { - return db.transaction().execute(async (trx) => { - let query = trx - .deleteFrom("TournamentTeamCheckIn") - .where("TournamentTeamCheckIn.tournamentTeamId", "=", tournamentTeamId); - - if (typeof bracketIdx === "number") { - query = query.where("TournamentTeamCheckIn.bracketIdx", "=", bracketIdx); - } - - await query.execute(); - - if (typeof bracketIdx === "number") { - await trx - .insertInto("TournamentTeamCheckIn") - .values({ - checkedInAt: dateToDatabaseTimestamp(new Date()), - tournamentTeamId, - bracketIdx, - isCheckOut: 1, - }) - .execute(); - } - }); -} - export function updateProgression({ tournamentId, bracketProgression, @@ -800,56 +738,6 @@ export function overrideTeamBracketProgression({ .execute(); } -export function updateTeamName({ - tournamentTeamId, - name, -}: { - tournamentTeamId: number; - name: string; -}) { - return db - .updateTable("TournamentTeam") - .set({ - name, - }) - .where("id", "=", tournamentTeamId) - .execute(); -} - -export function dropTeamOut({ - tournamentTeamId, - previewBracketIdxs, -}: { - tournamentTeamId: number; - previewBracketIdxs: number[]; -}) { - return db.transaction().execute(async (trx) => { - await trx - .deleteFrom("TournamentTeamCheckIn") - .where("tournamentTeamId", "=", tournamentTeamId) - .where("TournamentTeamCheckIn.bracketIdx", "in", previewBracketIdxs) - .execute(); - - await trx - .updateTable("TournamentTeam") - .set({ - droppedOut: 1, - }) - .where("id", "=", tournamentTeamId) - .execute(); - }); -} - -export function undoDropTeamOut(tournamentTeamId: number) { - return db - .updateTable("TournamentTeam") - .set({ - droppedOut: 0, - }) - .where("id", "=", tournamentTeamId) - .execute(); -} - export function addStaff({ tournamentId, userId, diff --git a/app/features/tournament/TournamentTeamRepository.server.ts b/app/features/tournament/TournamentTeamRepository.server.ts index 3ef2f11c5..df5fc8ecc 100644 --- a/app/features/tournament/TournamentTeamRepository.server.ts +++ b/app/features/tournament/TournamentTeamRepository.server.ts @@ -1,12 +1,10 @@ -// TODO: add rest of the functions here that relate more to tournament teams than tournament/bracket - import type { Transaction } from "kysely"; import { sql } from "kysely"; import { db } from "~/db/sql"; import type { DB, Tables } from "~/db/tables"; import type { ModeShort, StageId } from "~/modules/in-game-lists/types"; import { flatZip } from "~/utils/arrays"; -import { databaseTimestampNow } from "~/utils/dates"; +import { databaseTimestampNow, dateToDatabaseTimestamp } from "~/utils/dates"; import { shortNanoid } from "~/utils/id"; import invariant from "~/utils/invariant"; @@ -357,6 +355,118 @@ export function updateStartingBrackets( }); } +export function checkIn({ + tournamentTeamId, + bracketIdx, +}: { + tournamentTeamId: number; + bracketIdx: number | null; +}) { + return db.transaction().execute(async (trx) => { + let query = trx + .deleteFrom("TournamentTeamCheckIn") + .where("TournamentTeamCheckIn.tournamentTeamId", "=", tournamentTeamId) + .where("TournamentTeamCheckIn.isCheckOut", "=", 1); + + if (typeof bracketIdx === "number") { + query = query.where("TournamentTeamCheckIn.bracketIdx", "=", bracketIdx); + } + + await query.execute(); + + await trx + .insertInto("TournamentTeamCheckIn") + .values({ + checkedInAt: dateToDatabaseTimestamp(new Date()), + tournamentTeamId, + bracketIdx, + }) + .execute(); + }); +} + +export function checkOut({ + tournamentTeamId, + bracketIdx, +}: { + tournamentTeamId: number; + bracketIdx: number | null; +}) { + return db.transaction().execute(async (trx) => { + let query = trx + .deleteFrom("TournamentTeamCheckIn") + .where("TournamentTeamCheckIn.tournamentTeamId", "=", tournamentTeamId); + + if (typeof bracketIdx === "number") { + query = query.where("TournamentTeamCheckIn.bracketIdx", "=", bracketIdx); + } + + await query.execute(); + + if (typeof bracketIdx === "number") { + await trx + .insertInto("TournamentTeamCheckIn") + .values({ + checkedInAt: dateToDatabaseTimestamp(new Date()), + tournamentTeamId, + bracketIdx, + isCheckOut: 1, + }) + .execute(); + } + }); +} + +export function updateName({ + tournamentTeamId, + name, +}: { + tournamentTeamId: number; + name: string; +}) { + return db + .updateTable("TournamentTeam") + .set({ + name, + }) + .where("id", "=", tournamentTeamId) + .execute(); +} + +export function dropOut({ + tournamentTeamId, + previewBracketIdxs, +}: { + tournamentTeamId: number; + previewBracketIdxs: number[]; +}) { + return db.transaction().execute(async (trx) => { + await trx + .deleteFrom("TournamentTeamCheckIn") + .where("tournamentTeamId", "=", tournamentTeamId) + .where("TournamentTeamCheckIn.bracketIdx", "in", previewBracketIdxs) + .execute(); + + await trx + .updateTable("TournamentTeam") + .set({ + droppedOut: 1, + }) + .where("id", "=", tournamentTeamId) + .execute(); + }); +} + +export function undoDropOut(tournamentTeamId: number) { + return db + .updateTable("TournamentTeam") + .set({ + droppedOut: 0, + }) + .where("id", "=", tournamentTeamId) + .execute(); +} + async function findTeamRecentMaps(teamId: number, limit: number) { return db .selectFrom("TournamentMatchGameResult") diff --git a/app/features/tournament/actions/to.$id.admin.server.ts b/app/features/tournament/actions/to.$id.admin.server.ts index 31d5addf9..4b26a9d90 100644 --- a/app/features/tournament/actions/to.$id.admin.server.ts +++ b/app/features/tournament/actions/to.$id.admin.server.ts @@ -121,7 +121,7 @@ export const action: ActionFunction = async ({ request, params }) => { const team = tournament.teamById(data.teamId); errorToastIfFalsy(team, "Invalid team id"); - await TournamentRepository.updateTeamName({ + await TournamentTeamRepository.updateName({ tournamentTeamId: data.teamId, name: data.teamName, }); @@ -147,7 +147,7 @@ export const action: ActionFunction = async ({ request, params }) => { invariant(bracket, "Invalid bracket idx"); errorToastIfFalsy(bracket.preview, "Bracket has been started"); - await TournamentRepository.checkIn({ + await TournamentTeamRepository.checkIn({ tournamentTeamId: data.teamId, // no sources = regular check in bracketIdx: !bracket.sources ? null : data.bracketIdx, @@ -169,7 +169,7 @@ export const action: ActionFunction = async ({ request, params }) => { invariant(bracket, "Invalid bracket idx"); errorToastIfFalsy(bracket.preview, "Bracket has been started"); - await TournamentRepository.checkOut({ + await TournamentTeamRepository.checkOut({ tournamentTeamId: data.teamId, // no sources = regular check in bracketIdx: !bracket.sources ? null : data.bracketIdx, @@ -402,7 +402,7 @@ export const action: ActionFunction = async ({ request, params }) => { droppedTeamId: data.teamId, }); - await TournamentRepository.dropTeamOut({ + await TournamentTeamRepository.dropOut({ tournamentTeamId: data.teamId, previewBracketIdxs: tournament.brackets.flatMap((b, idx) => b.preview ? idx : [], @@ -415,7 +415,7 @@ export const action: ActionFunction = async ({ request, params }) => { case "UNDO_DROP_TEAM_OUT": { validateIsTournamentOrganizer(); - await TournamentRepository.undoDropTeamOut(data.teamId); + await TournamentTeamRepository.undoDropOut(data.teamId); message = "Team drop out undone"; break; diff --git a/app/features/tournament/tournament-test-utils.ts b/app/features/tournament/tournament-test-utils.ts index d35a12119..4d7169e4c 100644 --- a/app/features/tournament/tournament-test-utils.ts +++ b/app/features/tournament/tournament-test-utils.ts @@ -5,7 +5,6 @@ import { getServerTournamentManager } from "../tournament-bracket/core/brackets- import { tournamentFromDB } from "../tournament-bracket/core/Tournament.server"; import { joinTeam } from "./queries/joinLeaveTeam.server"; import { updateRoundMaps } from "./queries/updateRoundMaps.server"; -import * as TournamentRepository from "./TournamentRepository.server"; import * as TournamentTeamRepository from "./TournamentTeamRepository.server"; /** @@ -79,7 +78,7 @@ export async function dbInsertTournamentTeam({ }); } - await TournamentRepository.checkIn({ + await TournamentTeamRepository.checkIn({ tournamentTeamId: tournamentTeam.id, // no sources = regular check in bracketIdx: null,