Commit Graph

93 Commits

Author SHA1 Message Date
Daniel Schädler 27ed1e191c Merge remote-tracking branch 'origin/master' into codex/tur-225-user-organizer-accounts
# Conflicts:
#	db/schema.rb
#	spec/e2e/http/api_surface_spec.rb
2026-05-04 19:21:01 +02:00
Daniel Schädler ed299aba57 feat(accounts): support multiple team players
Teams now use a join table so organizers can attach more than one player account while players still get public profile data.
2026-05-04 15:25:26 +02:00
Daniel Schädler 794f835148 fix(tournaments): keep owner data out metadata
Tournament metadata remains optional and tournament-scoped.
2026-05-04 14:55:48 +02:00
Daniel Schädler 995a2cc250 feat(accounts): add player team profiles
Teams can link to player accounts by email while keeping profile tournament data public unless viewed by the account owner.
2026-05-04 14:52:59 +02:00
Daniel Schädler 9b10cc12d2 feat(tournaments): add metadata fields
Add typed tournament metadata to API payloads and follower sync.
2026-05-04 14:43:20 +02:00
Daniel Schädler 54975d969b Merge remote-tracking branch 'origin/master' into codex/tur-30-transaction-log 2026-04-30 14:07:12 +02:00
Daniel Schädler 21e1463b64 feat: add tournament transaction log 2026-04-30 10:04:56 +02:00
Daniel Schädler 2b63e61475 fix(sync): protect follower sync tokens
Store read-only receiver tokens as keyed digests and expose only sync_auth_configured in owner responses. Keep leader push tokens write-only in API responses because outbound sync still needs to send them.

Refs TUR-84
2026-04-30 09:32:37 +02:00
Daniel Schädler 90e71a068c Merge master and fix e2e service env 2026-04-28 22:58:09 +02:00
Daniel Schädler fe0f3c868e
TUR-130 update dependencies and ruby 2026-04-28 13:55:47 +02:00
Daniel Schädler 3008b9fd50
TUR-137 add timer reasons 2026-04-28 12:28:01 +02:00
Daniel Schädler 68b72cc01a test: update beamer e2e contract 2026-04-26 23:45:35 +02:00
Daniel Schädler acdef9f5b4 feat(beamers): replace asset URLs with config
Add beamer config JSON, drop obsolete asset URL fields, and narrow display_state to the new beamer API states. Migration maps legacy display states to supported values and initializes config to {}.
2026-04-26 16:13:12 +02:00
Daniel Schädler e9ef73c230 refactor: rename timer db column 2026-04-24 11:39:26 +02:00
Daniel Schädler b0bbbb8ce5 Merge branch 'master' into 'codex/tur-55-tur-56-timer-websocket'
# Conflicts:
#   e2e/lib/action_cable_client.rb
#   tasks.py
2026-04-23 21:57:14 +00:00
Daniel Schädler afff813994 feat: add timer modes and websocket updates 2026-04-23 23:29:03 +02:00
Daniel Schädler b40e64cde8 feat: add manual team action list creation 2026-04-23 22:47:51 +02:00
Daniel Schädler 7151976d26 feat: add backend beamer live updates 2026-04-23 14:35:16 +02:00
Daniel Schädler e41ef870f9 Merge branch 'codex/TUR-80-team-action-lists' into 'master'
TUR-80 playoff token collection tracking

Closes TUR-80

See merge request turniere/turniere-backend!49
2026-04-23 11:46:41 +00:00
Daniel Schädler 883638f4fd feat: add websocket team action updates 2026-04-23 10:19:47 +02:00
Daniel Schädler ad96668a04 Merge branch 'TUR-52-backend-match-swap' into 'master'
TUR-52 backend match swap endpoint

Closes TUR-52

See merge request turniere/turniere-backend!48
2026-04-22 15:10:45 +00:00
Daniel Schädler 7d65e4df82 feat: track team action list completion 2026-04-22 16:51:17 +02:00
Daniel Schädler f3ef3f4373 refactor: simplify playoff loser lookup 2026-04-22 16:15:25 +02:00
Daniel Schädler 99538a3343 Add backend group match swap endpoint 2026-04-22 15:48:06 +02:00
Daniel Schädler 57aecd7cc5 feat: add third place playoff match 2026-04-22 15:46:48 +02:00
Daniel Schädler 8789c2cb2e Merge origin/master into follower sync 2026-04-16 15:54:32 +02:00
Daniel Schädler 761bb8daea Simplify default beamer handling 2026-04-16 13:02:40 +02:00
Tobias Huber 2ceba1dfcf Merge branch 'master' into TUR-32_backend-beamer 2026-04-16 08:11:02 +02:00
Daniel Schädler 07b7a78bd5 Merge origin/master into follower sync 2026-04-15 16:43:38 +02:00
Daniel Schädler ce7b5c5ac7 Fix match points specs 2026-04-15 11:22:55 +02:00
Daniel Schädler 2d273f067c Optimize tournament render hot path 2026-04-15 09:36:56 +02:00
Daniel Schädler 0ba86c84f0 Clear follower token on takeover 2026-04-14 18:29:30 +02:00
Daniel Schädler bbb1ad97ef Make follower sync asynchronous 2026-04-13 20:54:28 +02:00
Daniel Schädler 133ebae847 Add read-only tournament follower sync 2026-04-13 20:32:34 +02:00
Tobias Huber 85fce7faac add backend beamer 2026-04-13 20:01:48 +02:00
Daniel Schädler 4713a020fa Implement TUR-58 group stage decider matches 2026-04-12 19:13:52 +02:00
Daniel Schädler eedafe1276 Add ranking decision metadata for group scores 2026-04-12 17:47:28 +02:00
Daniel Schädler 7cef4a9b5e Fix group score direct comparison tiebreak 2026-04-12 17:03:33 +02:00
Daniel Schädler 79bafec693 Add advancing teams into tournaments show endpoint 2025-03-09 21:05:41 +01:00
Daniel Schädler 5d857c5d82 Remove position from comparison 2024-04-07 21:40:59 +02:00
Daniel Schädler 4a8cb71fc4 Add and calculate position to sort group_scores by 2024-04-07 21:17:45 +02:00
Daniel Schädler 1084d836c1 Implement sorting correctly with <=> operator 2024-04-07 18:07:55 +02:00
Daniel Schädler c3af6f9232
Rubocop -A 2021-08-15 14:31:50 +02:00
Daniel Schädler 33ccab8988 Return all matches also from groups 2019-10-26 00:32:14 +02:00
Daniel Schädler 77c76b7a31 Add matches method to tournament
The method collects all matches from all stages
2019-10-25 23:47:38 +02:00
Daniel Schädler 4e72d015ff Implement method to check if stage is over 2019-06-18 19:22:05 +02:00
Daniel Schädler c5780c2da3 Implement function to calculate the difference in points 2019-06-18 19:22:05 +02:00
Thor77 6640be1e9a Add devise confirmable to user model 2019-06-18 12:27:00 +02:00
Daniel Schädler 98319e9625 Assign :intermediate_stage to first stage if single_team matches present 2019-06-17 15:02:30 +02:00
Daniel Schädler 36db03293e Return a "winner" for :single_team matches 2019-06-17 15:02:30 +02:00