mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-26 01:09:02 -05:00
82 lines
1.8 KiB
TypeScript
82 lines
1.8 KiB
TypeScript
import { sql } from "~/db/sql";
|
|
import { deleteSub } from "~/features/tournament-subs/queries/deleteSub.server";
|
|
import invariant from "~/utils/invariant";
|
|
import { checkOut } from "./checkOut.server";
|
|
|
|
const createTeamMemberStm = sql.prepare(/*sql*/ `
|
|
insert into "TournamentTeamMember" (
|
|
"tournamentTeamId",
|
|
"inGameName",
|
|
"userId"
|
|
) values (
|
|
@tournamentTeamId,
|
|
@inGameName,
|
|
@userId
|
|
)
|
|
`);
|
|
|
|
const deleteTeamStm = sql.prepare(/*sql*/ `
|
|
delete from "TournamentTeam"
|
|
where "id" = @tournamentTeamId
|
|
`);
|
|
|
|
const deleteMemberStm = sql.prepare(/*sql*/ `
|
|
delete from "TournamentTeamMember"
|
|
where "tournamentTeamId" = @tournamentTeamId
|
|
and "userId" = @userId
|
|
`);
|
|
|
|
export const joinTeam = sql.transaction(
|
|
({
|
|
previousTeamId,
|
|
whatToDoWithPreviousTeam,
|
|
newTeamId,
|
|
userId,
|
|
inGameName,
|
|
tournamentId,
|
|
checkOutTeam = false,
|
|
}: {
|
|
previousTeamId?: number;
|
|
whatToDoWithPreviousTeam?: "LEAVE" | "DELETE";
|
|
newTeamId: number;
|
|
userId: number;
|
|
inGameName: string | null;
|
|
tournamentId: number;
|
|
checkOutTeam?: boolean;
|
|
}) => {
|
|
if (whatToDoWithPreviousTeam === "DELETE") {
|
|
deleteTeamStm.run({ tournamentTeamId: previousTeamId ?? null });
|
|
} else if (whatToDoWithPreviousTeam === "LEAVE") {
|
|
deleteMemberStm.run({ tournamentTeamId: previousTeamId ?? null, userId });
|
|
}
|
|
|
|
if (!previousTeamId) {
|
|
deleteSub({ tournamentId, userId });
|
|
}
|
|
|
|
if (checkOutTeam) {
|
|
invariant(
|
|
previousTeamId,
|
|
"previousTeamId is required when checking out team",
|
|
);
|
|
checkOut(previousTeamId);
|
|
}
|
|
|
|
createTeamMemberStm.run({
|
|
tournamentTeamId: newTeamId,
|
|
userId,
|
|
inGameName,
|
|
});
|
|
},
|
|
);
|
|
|
|
export const leaveTeam = ({
|
|
teamId,
|
|
userId,
|
|
}: {
|
|
teamId: number;
|
|
userId: number;
|
|
}) => {
|
|
deleteMemberStm.run({ tournamentTeamId: teamId, userId });
|
|
};
|