Load all completed rounds in parallel when a tournament is expanded
and display them below the current round. Each finished game row is
clickable and navigates to the existing game review view. A 'Review'
label fades in on hover to signal interactivity.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #17
Summary
▎
▎ - Opening a finished game caused an infinite spinner because the NDJSON stream never delivers events for finished games — it just hangs waiting for events that will never come
▎ - Fix: fetch the full game state via REST on load (GET .../game/{gameId}), apply it to the board immediately, and only open the stream subscription if the game is still ongoing or pending
▎
▎ Changes
▎
▎ - tournament-watch.component.ts — REST fetch now drives the initial state; stream is only started conditionally; extracted applySnapshot(), isFinished(), subscribeToStream()
▎
▎ Test plan
▎
▎ - [ ] Finished game: board shows final position, correct status label, no spinner
▎ - [ ] Live game: board shows current position, stream updates continue to work
▎ - [ ] Pending game: stream starts and updates once the game begins
---------
Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #16
The gameState stream event does not carry player names, so snapshot.white/black
were always undefined and the UI fell back to the literal strings "Black" and
"White". Fix by fetching the full game object (GET /api/tournament/{id}/game/{gameId})
on page load, which includes BotRef with real names, and storing them in
dedicated whiteName/blackName fields.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: LQ63 <lkhermann@web.de>
Reviewed-on: #15
Servers are now env-var configured; the Servers dialog, add form,
remove buttons, and TournamentServerService are all deleted.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
openJoinDialog now fetches user bots and official bots in parallel via
forkJoin. Each section shows its own empty state independently.
Official bot difficulty buttons are hidden when no official bots are
registered. User bots empty state links to /bots to create one.
Disables all join buttons while any join is in progress.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Map raw backend response (evaluation/continuationMoves) to frontend
model (eval/winChance/continuations). Add getFenHistory() call after
loading a game or PGN so runAnalysis() gets per-ply FEN history and
triggers analyzeGame() instead of falling back to single-position
analysis. Remove !hasAnnotations guard so positionAnalysis card shows
even when a game is loaded.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
User Profile info, no game before login/register, menu bar
---------
Co-authored-by: Lala, Shahd <Shahd.Lala@sybit.de>
Co-authored-by: shahdlala66 <shahd.lala66@gmail.com>
Reviewed-on: #2