sendou.ink/migrations/026-full-tournament-v2.js
Kalle ef78d3a2c2
Tournament full (#1373)
* Got something going

* Style overwrites

* width != height

* More playing with lines

* Migrations

* Start bracket initial

* Unhardcode stage generation params

* Link to match page

* Matches page initial

* Support directly adding seed to map list generator

* Add docs

* Maps in matches page

* Add invariant about tie breaker map pool

* Fix PICNIC lacking tie breaker maps

* Only link in bracket when tournament has started

* Styled tournament roster inputs

* Prefer IGN in tournament match page

* ModeProgressIndicator

* Some conditional rendering

* Match action initial + better error display

* Persist bestOf in DB

* Resolve best of ahead of time

* Move brackets-manager to core

* Score reporting works

* Clear winner on score report

* ModeProgressIndicator: highlight winners

* Fix inconsistent input

* Better text when submitting match

* mapCountPlayedInSetWithCertainty that works

* UNDO_REPORT_SCORE implemented

* Permission check when starting tournament

* Remove IGN from upsert

* View match results page

* Source in DB

* Match page waiting for teams

* Move tournament bracket to feature folder

* REOPEN_MATCH initial

* Handle proper resetting of match

* Inline bracket-manager

* Syncify

* Transactions

* Handle match is locked gracefully

* Match page auto refresh

* Fix match refresh called "globally"

* Bracket autoupdate

* Move fillWithNullTillPowerOfTwo to utils with testing

* Fix map lists not visible after tournament started

* Optimize match events

* Show UI while in progress to members

* Fix start tournament alert not being responsive

* Teams can check in

* Fix map list 400

* xxx -> TODO

* Seeds page

* Remove map icons for team page

* Don't display link to seeds after tournament has started

* Admin actions initial

* Change captain admin action

* Make all hooks ts

* Admin actions functioning

* Fix validate error not displaying in CatchBoundary

* Adjust validate args order

* Remove admin loader

* Make delete team button menancing

* Only include checked in teams to bracket

* Optimize to.id route loads

* Working show map list generator toggle

* Update full tournaments flow

* Make full tournaments work with many start times

* Handle undefined in crud

* Dynamic stage banner

* Handle default strat if map list generation fails

* Fix crash on brackets if less than 2 teams

* Add commented out test for reference

* Add TODO

* Add players from team during register

* TrustRelationship

* Prefers not to host feature

* Last before merge

* Rename some vars

* More renames
2023-05-15 22:37:43 +03:00

235 lines
7.9 KiB
JavaScript

module.exports.up = function (db) {
db.prepare(/* sql */ `drop index "calendar_event_custom_url_unique"`).run();
db.prepare(/*sql*/ `drop table "TournamentBracket"`).run();
db.prepare(/*sql*/ `drop table "TournamentMatchParticipant"`).run();
db.prepare(/*sql*/ `drop table "TournamentRound"`).run();
db.prepare(/*sql*/ `drop table "TournamentMatch"`).run();
db.prepare(/*sql*/ `drop table "TournamentTeam"`).run();
db.prepare(/*sql*/ `drop table "TournamentTeamMember"`).run();
db.prepare(/*sql*/ `drop table "TournamentMatchGameResult"`).run();
db.prepare(
/* sql */ `alter table "CalendarEvent" drop column "customUrl"`
).run();
db.prepare(
/* sql */ `alter table "CalendarEvent" drop column "toToolsEnabled"`
).run();
db.prepare(
/* sql */ `alter table "CalendarEvent" drop column "toToolsMode"`
).run();
db.prepare(
/* sql */ `alter table "CalendarEvent" drop column "isBeforeStart"`
).run();
db.prepare(
/* sql */ `alter table "CalendarEvent" add "tournamentId" integer`
).run();
db.prepare(
/*sql*/ `create index calendar_event_tournament_id on "CalendarEvent"("tournamentId")`
).run();
db.prepare(
/*sql*/ `
create table "Tournament" (
"id" integer primary key,
"mapPickingStyle" text not null,
"format" text not null,
"showMapListGenerator" integer default 0
) strict
`
).run();
db.prepare(
/*sql*/ `
create table "TournamentTeam" (
"id" integer primary key,
"name" text not null,
"createdAt" integer default (strftime('%s', 'now')) not null,
"seed" integer,
"inviteCode" text not null unique,
"tournamentId" integer not null,
"prefersNotToHost" integer not null default 0,
foreign key ("tournamentId") references "Tournament"("id") on delete cascade,
unique("tournamentId", "name") on conflict rollback
) strict
`
).run();
db.prepare(
/*sql*/ `create index tournament_team_tournament_id on "TournamentTeam"("tournamentId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentTeamCheckIn" (
"tournamentTeamId" integer not null,
"checkedInAt" integer not null,
foreign key ("tournamentTeamId") references "TournamentTeam"("id") on delete cascade
) strict
`
).run();
db.prepare(
/*sql*/ `create index tournament_team_check_in_tournament_team_id on "TournamentTeamCheckIn"("tournamentTeamId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentTeamMember" (
"tournamentTeamId" integer not null,
"userId" integer not null,
"isOwner" integer not null default 0,
"createdAt" integer default (strftime('%s', 'now')) not null,
foreign key ("tournamentTeamId") references "TournamentTeam"("id") on delete cascade,
unique("tournamentTeamId", "userId") on conflict rollback
) strict
`
).run();
db.prepare(
/*sql*/ `create index tournament_team_member_tournament_team_id on "TournamentTeamMember"("tournamentTeamId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentStage" (
"id" integer primary key,
"tournamentId" integer not null,
"name" text not null,
"type" text not null,
"settings" text not null,
"number" integer not null,
foreign key ("tournamentId") references "Tournament"("id") on delete cascade,
unique("number", "tournamentId") on conflict rollback
) strict
`
).run();
db.prepare(
`create index tournament_stage_tournament_id on "TournamentStage"("tournamentId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentGroup" (
"id" integer primary key,
"stageId" integer not null,
"number" integer not null,
foreign key ("stageId") references "TournamentStage"("id") on delete cascade,
unique("number", "stageId") on conflict rollback
) strict
`
).run();
db.prepare(
`create index tournament_group_stage_id on "TournamentGroup"("stageId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentRound" (
"id" integer primary key,
"stageId" integer not null,
"groupId" integer not null,
"number" integer not null,
foreign key ("stageId") references "TournamentStage"("id") on delete cascade,
foreign key ("groupId") references "TournamentGroup"("id") on delete cascade,
unique("number", "groupId") on conflict rollback
) strict
`
).run();
db.prepare(
`create index tournament_round_stage_id on "TournamentRound"("stageId")`
).run();
db.prepare(
`create index tournament_round_group_id on "TournamentRound"("groupId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentMatch" (
"id" integer primary key,
"childCount" integer not null,
"bestOf" integer not null default 3,
"roundId" integer not null,
"stageId" integer not null,
"groupId" integer not null,
"number" integer not null,
"opponentOne" text not null,
"opponentTwo" text not null,
"status" integer not null,
foreign key ("roundId") references "TournamentRound"("id") on delete cascade,
foreign key ("stageId") references "TournamentStage"("id") on delete cascade,
foreign key ("groupId") references "TournamentGroup"("id") on delete cascade,
unique("number", "roundId") on conflict rollback
) strict
`
).run();
db.prepare(
`create index tournament_match_round_id on "TournamentMatch"("roundId")`
).run();
db.prepare(
`create index tournament_match_stage_id on "TournamentMatch"("stageId")`
).run();
db.prepare(
`create index tournament_match_group_id on "TournamentMatch"("groupId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentMatchGameResult" (
"id" integer primary key,
"matchId" integer not null,
"number" integer not null,
"stageId" integer not null,
"mode" text not null,
"source" text not null,
"winnerTeamId" integer not null,
"reporterId" integer not null,
"createdAt" integer default (strftime('%s', 'now')) not null,
foreign key ("matchId") references "TournamentMatch"("id") on delete cascade,
foreign key ("winnerTeamId") references "TournamentTeam"("id") on delete restrict,
foreign key ("reporterId") references "User"("id") on delete restrict,
unique("matchId", "number") on conflict rollback
) strict
`
).run();
db.prepare(
/*sql*/ `create index tournament_match_game_result_match_id on "TournamentMatchGameResult"("matchId")`
).run();
db.prepare(
/*sql*/ `create index tournament_match_game_result_winner_team_id on "TournamentMatchGameResult"("winnerTeamId")`
).run();
db.prepare(
/*sql*/ `
create table "TournamentMatchGameResultParticipant" (
"matchGameResultId" integer not null,
"userId" integer not null,
foreign key ("matchGameResultId") references "TournamentMatchGameResult"("id") on delete cascade,
foreign key ("userId") references "User"("id") on delete cascade,
unique("matchGameResultId", "userId") on conflict rollback
) strict
`
).run();
db.prepare(
`create index tournament_match_game_result_participant_match_game_result_id on "TournamentMatchGameResultParticipant"("matchGameResultId")`
).run();
db.prepare(
`create index tournament_match_game_result_participant_user_id on "TournamentMatchGameResultParticipant"("userId")`
).run();
db.prepare(
/*sql*/ `
create table "TrustRelationship" (
"trustGiverUserId" integer not null,
"trustReceiverUserId" integer not null,
foreign key ("trustGiverUserId") references "User"("id") on delete cascade,
foreign key ("trustReceiverUserId") references "User"("id") on delete cascade,
unique("trustGiverUserId", "trustReceiverUserId") on conflict ignore
) strict
`
).run();
db.prepare(
`create index trust_relationship_trust_giver_user_id on "TrustRelationship"("trustGiverUserId")`
).run();
db.prepare(
`create index trust_relationship_trust_receiver_user_id on "TrustRelationship"("trustReceiverUserId")`
).run();
};