Партии: «выбывшие» игроки (красный крестик) = последнее место

Выбор места при завершении партии получает опцию «✕ выбыл»; выбывшему
авто-проставляется общее последнее место (ничья последнего ранга), плюс флаг
eliminated для отрисовки красным крестиком. В результатах и списке партий
выбывшие показываются крестиком и идут в конец. Подсчёт очков не меняется
(используются обычные числовые места).

Бэкенд: модель MatchParticipant.eliminated + миграция 0009 (идемпотентная);
схемы (place стал необязательным, +eliminated); match_service (хелпер
_resolve_finish_places, finish/update); проброс eliminated в роутерах и stats.
Фронт: выбор места с крестиком в MatchDetailPage и AdminMatchEdit, отрисовка в
результатах и MatchList, стиль .place-badge.eliminated; регенерация schema.d.ts.
Тесты: завершение с выбывшим (последнее место, засчитан), все-выбывшие → 422.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 16:54:37 +03:00
co-authored by Claude Opus 4.8
parent cd7e5d16b4
commit 1438a17441
13 changed files with 226 additions and 17 deletions
+22 -2
View File
@@ -1566,7 +1566,12 @@ export interface components {
/** User Id */
user_id: number;
/** Place */
place: number;
place?: number | null;
/**
* Eliminated
* @default false
*/
eliminated: boolean;
/** Comment */
comment?: string | null;
/** Faction Id */
@@ -1626,6 +1631,11 @@ export interface components {
faction_name: string;
/** Place */
place?: number | null;
/**
* Eliminated
* @default false
*/
eliminated: boolean;
/** Was Random */
was_random: boolean;
/** Comment */
@@ -1643,6 +1653,11 @@ export interface components {
faction_name: string;
/** Place */
place?: number | null;
/**
* Eliminated
* @default false
*/
eliminated: boolean;
/** Was Random */
was_random: boolean;
/** Comment */
@@ -1816,7 +1831,12 @@ export interface components {
/** Faction Id */
faction_id: number;
/** Place */
place: number;
place?: number | null;
/**
* Eliminated
* @default false
*/
eliminated: boolean;
/**
* Was Random
* @default false