AI Implementation feature(910): Scoreboard: Ranking, Matrix, Event Log and Score Graph 1.00 (#53)

This commit was merged in pull request #53.
This commit is contained in:
2026-07-23 05:42:17 +00:00
parent 7c4843d5cc
commit 4273662211
14 changed files with 129 additions and 179 deletions
+9 -4
View File
@@ -3,7 +3,7 @@ type: api
title: Challenges Endpoints
description: Authenticated challenge board, single-challenge detail, flag submission, event-state snapshot, and the combined authenticated SSE stream that pushes status + solve frames.
tags: [api, challenges, board, score, scoreboard, sse, submit]
timestamp: 2026-07-23T05:10:00Z
timestamp: 2026-07-23T05:41:00Z
---
# Endpoints
@@ -181,7 +181,7 @@ sources and emits `MessageEvent` frames whose `type` is one of:
| `event:` | Payload |
|----------|-------------------------------------------------------------------------------------------------|
| `status` | `{ state, server_time_utc, event_start_utc, event_end_utc, seconds_to_start, seconds_to_end }` |
| `solve` | `{ challenge_id, player_id, player_name, awarded_points, rank_bonus, awarded_at_utc, position, live_points, solve_count, initial_points, minimum_points, decay_solves }` |
| `solve` | `{ challenge_id, challenge_name, category_abbreviation, player_id, player_name, awarded_points, rank_bonus, awarded_at_utc, position, live_points, solve_count, initial_points, minimum_points, decay_solves }` |
Sources:
@@ -203,8 +203,13 @@ appended as-is.
`backend/src/modules/challenges/dto/challenges.dto.ts`). The
controller maps both camelCase and snake_case aliases so a
downstream consumer can read either shape (for example
`challenge_id` or `challengeId`, `player_id` or `userId`,
`awarded_points` or `pointsAwarded`).
`challenge_id` or `challengeId`, `challenge_name` or `challengeName`,
`category_abbreviation` or `categoryAbbreviation`, `player_id` or
`userId`, `awarded_points` or `pointsAwarded`). `challenge_name`
and `category_abbreviation` carry the same display metadata that
the `/api/v1/scoreboard/event-log` projection joins in, so the
Scoreboard Event Log tab can render a freshly pushed row without
performing a second lookup.
# Scoreboard endpoints