diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-18 22:38:15 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-18 22:38:15 +0900 |
| commit | 9f9efc2bc07810d2e06b37bad94e5922681eadef (patch) | |
| tree | 79bcce2bf065a7ea282aa7855822c3bdee92ee7c /openapi | |
| parent | c095200dc79f24c0cd17a2e3ba15c85a2971ea9a (diff) | |
| download | phperkaigi-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 'openapi')
| -rw-r--r-- | openapi/api-server.yaml | 73 |
1 files changed, 43 insertions, 30 deletions
diff --git a/openapi/api-server.yaml b/openapi/api-server.yaml index 21fb989..ed535d3 100644 --- a/openapi/api-server.yaml +++ b/openapi/api-server.yaml @@ -347,40 +347,15 @@ paths: application/json: schema: $ref: '#/components/schemas/Error' - /tournament: + /tournaments/{tournament_id}: get: operationId: getTournament parameters: - - name: game1 - in: query - required: true - schema: - type: integer - explode: false - - name: game2 - in: query - required: true - schema: - type: integer - explode: false - - name: game3 - in: query - required: true - schema: - type: integer - explode: false - - name: game4 - in: query - required: true - schema: - type: integer - explode: false - - name: game5 - in: query + - name: tournament_id + in: path required: true schema: type: integer - explode: false responses: '200': description: The request has succeeded. @@ -530,17 +505,53 @@ components: Tournament: type: object required: + - tournament_id + - display_name + - bracket_size + - num_rounds + - entries - matches properties: + tournament_id: + type: integer + display_name: + type: string + bracket_size: + type: integer + num_rounds: + type: integer + entries: + type: array + items: + $ref: '#/components/schemas/TournamentEntry' matches: type: array items: $ref: '#/components/schemas/TournamentMatch' + TournamentEntry: + type: object + required: + - user + - seed + properties: + user: + $ref: '#/components/schemas/User' + seed: + type: integer TournamentMatch: type: object required: - - game_id + - tournament_match_id + - round + - position + - is_bye properties: + tournament_match_id: + type: integer + round: + type: integer + position: + type: integer game_id: type: integer player1: @@ -551,8 +562,10 @@ components: type: integer player2_score: type: integer - winner: + winner_user_id: type: integer + is_bye: + type: boolean User: type: object required: |
