diff --git a/app/features/tournament/TournamentRepository.server.ts b/app/features/tournament/TournamentRepository.server.ts index 5b76db9cb..7d32df730 100644 --- a/app/features/tournament/TournamentRepository.server.ts +++ b/app/features/tournament/TournamentRepository.server.ts @@ -490,7 +490,9 @@ export function forShowcase() { eb("CalendarEventDate.startTime", ">", databaseTimestampNow()), ]), ) - .select(({ fn }) => [fn.countAll().as("teamsCount")]) + .select(({ fn }) => [ + fn.count("TournamentTeam.id").distinct().as("teamsCount"), + ]) .as("teamsCount"), tournamentLogoWithDefault(eb).as("logoUrl"), jsonObjectFrom( diff --git a/app/features/tournament/TournamentTeamRepository.server.ts b/app/features/tournament/TournamentTeamRepository.server.ts index 0661e20e4..64458bc1c 100644 --- a/app/features/tournament/TournamentTeamRepository.server.ts +++ b/app/features/tournament/TournamentTeamRepository.server.ts @@ -423,11 +423,17 @@ export function checkIn( return db.transaction().execute(async (trx) => { let query = trx .deleteFrom("TournamentTeamCheckIn") - .where("TournamentTeamCheckIn.tournamentTeamId", "=", tournamentTeamId) - .where("TournamentTeamCheckIn.isCheckOut", "=", 1); + .where("TournamentTeamCheckIn.tournamentTeamId", "=", tournamentTeamId); if (typeof bracketIdx === "number") { query = query.where("TournamentTeamCheckIn.bracketIdx", "=", bracketIdx); + } else { + query = query.where((eb) => + eb.or([ + eb("TournamentTeamCheckIn.isCheckOut", "=", 1), + eb("TournamentTeamCheckIn.bracketIdx", "is", null), + ]), + ); } await query.execute(); diff --git a/db-test.sqlite3 b/db-test.sqlite3 index 7b5c26491..001fd8141 100644 Binary files a/db-test.sqlite3 and b/db-test.sqlite3 differ diff --git a/e2e/seeds/db-seed-AB_RR.sqlite3 b/e2e/seeds/db-seed-AB_RR.sqlite3 index d0b569c57..3c1c7f2bc 100644 Binary files a/e2e/seeds/db-seed-AB_RR.sqlite3 and b/e2e/seeds/db-seed-AB_RR.sqlite3 differ diff --git a/e2e/seeds/db-seed-DEFAULT.sqlite3 b/e2e/seeds/db-seed-DEFAULT.sqlite3 index 6ea084d1e..2999eece0 100644 Binary files a/e2e/seeds/db-seed-DEFAULT.sqlite3 and b/e2e/seeds/db-seed-DEFAULT.sqlite3 differ diff --git a/e2e/seeds/db-seed-FINALIZED_BRACKET.sqlite3 b/e2e/seeds/db-seed-FINALIZED_BRACKET.sqlite3 index 07795956e..1f31319c7 100644 Binary files a/e2e/seeds/db-seed-FINALIZED_BRACKET.sqlite3 and b/e2e/seeds/db-seed-FINALIZED_BRACKET.sqlite3 differ diff --git a/e2e/seeds/db-seed-NO_SCRIMS.sqlite3 b/e2e/seeds/db-seed-NO_SCRIMS.sqlite3 index 7a7fb7490..a65c98047 100644 Binary files a/e2e/seeds/db-seed-NO_SCRIMS.sqlite3 and b/e2e/seeds/db-seed-NO_SCRIMS.sqlite3 differ diff --git a/e2e/seeds/db-seed-NO_SQ_GROUPS.sqlite3 b/e2e/seeds/db-seed-NO_SQ_GROUPS.sqlite3 index 32078b287..810045f55 100644 Binary files a/e2e/seeds/db-seed-NO_SQ_GROUPS.sqlite3 and b/e2e/seeds/db-seed-NO_SQ_GROUPS.sqlite3 differ diff --git a/e2e/seeds/db-seed-NO_TOURNAMENT_TEAMS.sqlite3 b/e2e/seeds/db-seed-NO_TOURNAMENT_TEAMS.sqlite3 index ed290e1ec..9870755de 100644 Binary files a/e2e/seeds/db-seed-NO_TOURNAMENT_TEAMS.sqlite3 and b/e2e/seeds/db-seed-NO_TOURNAMENT_TEAMS.sqlite3 differ diff --git a/e2e/seeds/db-seed-NZAP_IN_TEAM.sqlite3 b/e2e/seeds/db-seed-NZAP_IN_TEAM.sqlite3 index 87f56620a..cccea5a17 100644 Binary files a/e2e/seeds/db-seed-NZAP_IN_TEAM.sqlite3 and b/e2e/seeds/db-seed-NZAP_IN_TEAM.sqlite3 differ diff --git a/e2e/seeds/db-seed-REG_OPEN.sqlite3 b/e2e/seeds/db-seed-REG_OPEN.sqlite3 index f75c5156a..ecad88183 100644 Binary files a/e2e/seeds/db-seed-REG_OPEN.sqlite3 and b/e2e/seeds/db-seed-REG_OPEN.sqlite3 differ diff --git a/e2e/seeds/db-seed-SMALL_SOS.sqlite3 b/e2e/seeds/db-seed-SMALL_SOS.sqlite3 index aa90e3a40..db01ec2f4 100644 Binary files a/e2e/seeds/db-seed-SMALL_SOS.sqlite3 and b/e2e/seeds/db-seed-SMALL_SOS.sqlite3 differ diff --git a/e2e/seeds/db-seed-TEAM_MAP_PREFS.sqlite3 b/e2e/seeds/db-seed-TEAM_MAP_PREFS.sqlite3 index c48a82ca3..8aa5bc077 100644 Binary files a/e2e/seeds/db-seed-TEAM_MAP_PREFS.sqlite3 and b/e2e/seeds/db-seed-TEAM_MAP_PREFS.sqlite3 differ diff --git a/migrations/135-tournament-team-check-in-unique.js b/migrations/135-tournament-team-check-in-unique.js new file mode 100644 index 000000000..325e79ee8 --- /dev/null +++ b/migrations/135-tournament-team-check-in-unique.js @@ -0,0 +1,19 @@ +export function up(db) { + db.transaction(() => { + db.prepare( + /* sql */ ` + delete from "TournamentTeamCheckIn" + where "rowid" not in ( + select max("rowid") + from "TournamentTeamCheckIn" + group by "tournamentTeamId", coalesce("bracketIdx", -1) + )`, + ).run(); + + db.prepare( + /* sql */ ` + create unique index "tournament_team_check_in_team_bracket_unique" + on "TournamentTeamCheckIn"("tournamentTeamId", coalesce("bracketIdx", -1))`, + ).run(); + })(); +}