Рейтинг: единый рейтинг вместо группового

Групповая цепочка убрана: рейтинг у игрока один, по всем партиям приложения
(решение владельца). load_history всегда грузит всю историю, одно
проигрывание на запрос. Страница группы: игры, победы, винрейт и среднее
место — по партиям группы, рейтинг — общий; «Новичок» тоже по общему числу
партий (новое поле rating_confirmed), поэтому опытный игрок в новой группе
ранжирован. Участники, не игравшие в группе, показывают общий рейтинг.
Главная и профиль — общие показатели; в блоке активной группы игры по
группе, рейтинг общий. У profile_stats убран неиспользуемый group_id.

Фронт: цвет рейтинга в списках берётся из rating_confirmed; справка —
«Один рейтинг на всё приложение». Документ рейтинга: раздел 8 и решение 7
в разделе 9.

Тесты: рейтинг в группах равен общему при групповых играх и победах,
главная и блок активной группы, ветеран в новой группе ранжирован,
«Ещё не играли» с общим рейтингом. #80

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqSoRj99iwVEH5U5fnZgsd
This commit is contained in:
2026-09-15 00:18:53 +03:00
co-authored by Claude Opus 5
parent 1c391448c1
commit 640f712037
10 changed files with 124 additions and 54 deletions
+5
View File
@@ -1724,6 +1724,11 @@ export interface components {
rank?: number | null;
/** Avatar Url */
avatar_url?: string | null;
/**
* Rating Confirmed
* @default false
*/
rating_confirmed: boolean;
};
/** MatchCreate */
MatchCreate: {
+8 -2
View File
@@ -30,8 +30,14 @@ function Row({
</div>
</div>
{/* Серебристый — у новичков и у прочерка ещё не игравших; золотой — только
подтверждённый рейтинг. */}
<div className={"lb-score" + (provisional || entry.score == null ? " provisional" : "")}>
подтверждённый рейтинг. Рейтинг общий, поэтому подтверждённость приходит
флагом: в группе «Ещё не играли» бывают и новички, и опытные игроки. */}
<div
className={
"lb-score" +
(provisional || entry.score == null || !entry.rating_confirmed ? " provisional" : "")
}
>
{entry.score ?? "—"}
</div>
</>
+5 -3
View File
@@ -135,10 +135,12 @@ export function HelpPage() {
</div>
<div className="card">
<h3>Общий и групповой рейтинг</h3>
<h3>Один рейтинг на всё приложение</h3>
<p className="small" style={{ margin: 0 }}>
Общий рейтинг считается по всем партиям приложения, групповой — только по партиям
группы. Поэтому числа в общем топе и в топе группы различаются.
Рейтинг у игрока один — по всем его партиям во всех группах, поэтому он одинаковый
в общем топе, в профиле и на странице группы. На странице группы по партиям этой
группы считаются только игры, победы, винрейт и среднее место; рейтинг и статус
«Новичок» там общие.
</p>
</div>