aboutsummaryrefslogtreecommitdiffhomepage
path: root/typespec/api-server
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-18 22:38:15 +0900
committernsfisis <nsfisis@gmail.com>2026-02-18 22:38:15 +0900
commit9f9efc2bc07810d2e06b37bad94e5922681eadef (patch)
tree79bcce2bf065a7ea282aa7855822c3bdee92ee7c /typespec/api-server
parentc095200dc79f24c0cd17a2e3ba15c85a2971ea9a (diff)
downloadphperkaigi-2026-albatross-9f9efc2bc07810d2e06b37bad94e5922681eadef.tar.gz
phperkaigi-2026-albatross-9f9efc2bc07810d2e06b37bad94e5922681eadef.tar.zst
phperkaigi-2026-albatross-9f9efc2bc07810d2e06b37bad94e5922681eadef.zip
feat: refactor tournament to generic DB-backed N-person bracket
Replace hardcoded 6-person tournament with a generic single-elimination bracket system backed by new DB tables (tournaments, tournament_entries, tournament_matches). Includes admin CRUD, standard seeding algorithm, bye handling, and a CSS Grid bracket renderer on the frontend. Add comprehensive tests for backend API/admin handlers, seeding logic, and frontend bracket component. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'typespec/api-server')
-rw-r--r--typespec/api-server/models.tsp18
-rw-r--r--typespec/api-server/routes.tsp10
2 files changed, 18 insertions, 10 deletions
diff --git a/typespec/api-server/models.tsp b/typespec/api-server/models.tsp
index 47519be..6605767 100644
--- a/typespec/api-server/models.tsp
+++ b/typespec/api-server/models.tsp
@@ -106,14 +106,28 @@ model RankingEntry {
}
model Tournament {
+ tournament_id: integer;
+ display_name: string;
+ bracket_size: integer;
+ num_rounds: integer;
+ entries: TournamentEntry[];
matches: TournamentMatch[];
}
+model TournamentEntry {
+ user: User;
+ seed: integer;
+}
+
model TournamentMatch {
- game_id: integer;
+ tournament_match_id: integer;
+ round: integer;
+ position: integer;
+ game_id?: integer;
player1?: User;
player2?: User;
player1_score?: integer;
player2_score?: integer;
- winner?: integer;
+ winner_user_id?: integer;
+ is_bye: boolean;
}
diff --git a/typespec/api-server/routes.tsp b/typespec/api-server/routes.tsp
index 3409cea..a67ab8f 100644
--- a/typespec/api-server/routes.tsp
+++ b/typespec/api-server/routes.tsp
@@ -110,16 +110,10 @@ op getGameWatchLatestStates(@path game_id: integer): {
// ---------- Tournament ----------
-@route("/tournament")
+@route("/tournaments/{tournament_id}")
@get
@operationId("getTournament")
-op getTournament(
- @query game1: integer,
- @query game2: integer,
- @query game3: integer,
- @query game4: integer,
- @query game5: integer,
-): {
+op getTournament(@path tournament_id: integer): {
@body body: {
tournament: Tournament;
};