useUserMatches (frontend/src/hooks/users.ts:20) запрашивает историю без limit/offset, поэтому бэкенд отдаёт дефолтные 20 записей (backend/app/routers/users.py:172). AccountPage и PublicProfilePage рисуют items и игнорируют total, который приходит в том же ответе.
Что видит игрок: у кого сыграно 40 партий, под заголовком «История игр» показываются только 20 последних — без счётчика, без кнопки «показать ещё» и без намёка, что список обрезан.
Почему не поправил в рамках ревью #8: это витрина, а не дефект логики, и нужен ваш выбор:
`useUserMatches` (`frontend/src/hooks/users.ts:20`) запрашивает историю без `limit`/`offset`, поэтому бэкенд отдаёт дефолтные 20 записей (`backend/app/routers/users.py:172`). `AccountPage` и `PublicProfilePage` рисуют `items` и игнорируют `total`, который приходит в том же ответе.
**Что видит игрок:** у кого сыграно 40 партий, под заголовком «История игр» показываются только 20 последних — без счётчика, без кнопки «показать ещё» и без намёка, что список обрезан.
**Почему не поправил в рамках ревью #8:** это витрина, а не дефект логики, и нужен ваш выбор:
1. кнопка «Показать ещё» с догрузкой страницами;
2. просто показать «20 из 40» в заголовке блока;
3. поднять лимит запроса и оставить один экран.
Обнаружено при работе над #8.
Agent
added this to the v1.35 - промежуточная полировка версии 1.3 milestone 2026-09-09 15:31:02 +03:00
Итог: история грузится страницами по 20, под списком — «Показать ещё» без счётчика рядом; общее число партий вынесено в шапку профиля к нику, и в своём, и в чужом. Кнопка живёт в самом компоненте истории, поэтому работает в обоих профилях и обоих режимах подробности.
Две детали, которые повлияли на решение: постраничная загрузка вместо «поднять лимит» — у эндпоинта потолок 100, и обрезка вернулась бы на 101-й партии; счётчик берётся из статистики, а не из total истории — в режиме «только лучшая партия» total равен единице и счётчик врал бы.
Проверки:npm run build — зелёный; pytest — 91 passed (бэкенд не менялся). Ручного прогона в dev не делал — стенд был занят.
Статус:Status/In Review Осталось за вами: ревью и мёрж PR — задача закроется автоматически. Дальше по вехе v1.35 остаются #32 и #33.
Работа выполнена, открыт PR: https://gitea.arseniev.info/NotBigGhost/ForbiddenStarsApp/pulls/42
**Итог:** история грузится страницами по 20, под списком — «Показать ещё» без счётчика рядом; общее число партий вынесено в шапку профиля к нику, и в своём, и в чужом. Кнопка живёт в самом компоненте истории, поэтому работает в обоих профилях и обоих режимах подробности.
Две детали, которые повлияли на решение: постраничная загрузка вместо «поднять лимит» — у эндпоинта потолок 100, и обрезка вернулась бы на 101-й партии; счётчик берётся из статистики, а не из `total` истории — в режиме «только лучшая партия» `total` равен единице и счётчик врал бы.
**Проверки:** `npm run build` — зелёный; `pytest` — 91 passed (бэкенд не менялся). Ручного прогона в dev не делал — стенд был занят.
**Статус:** `Status/In Review`
**Осталось за вами:** ревью и мёрж PR — задача закроется автоматически. Дальше по вехе v1.35 остаются #32 и #33.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
useUserMatches(frontend/src/hooks/users.ts:20) запрашивает историю безlimit/offset, поэтому бэкенд отдаёт дефолтные 20 записей (backend/app/routers/users.py:172).AccountPageиPublicProfilePageрисуютitemsи игнорируютtotal, который приходит в том же ответе.Что видит игрок: у кого сыграно 40 партий, под заголовком «История игр» показываются только 20 последних — без счётчика, без кнопки «показать ещё» и без намёка, что список обрезан.
Почему не поправил в рамках ревью #8: это витрина, а не дефект логики, и нужен ваш выбор:
Обнаружено при работе над #8.
Работа выполнена, открыт PR: #42
Итог: история грузится страницами по 20, под списком — «Показать ещё» без счётчика рядом; общее число партий вынесено в шапку профиля к нику, и в своём, и в чужом. Кнопка живёт в самом компоненте истории, поэтому работает в обоих профилях и обоих режимах подробности.
Две детали, которые повлияли на решение: постраничная загрузка вместо «поднять лимит» — у эндпоинта потолок 100, и обрезка вернулась бы на 101-й партии; счётчик берётся из статистики, а не из
totalистории — в режиме «только лучшая партия»totalравен единице и счётчик врал бы.Проверки:
npm run build— зелёный;pytest— 91 passed (бэкенд не менялся). Ручного прогона в dev не делал — стенд был занят.Статус:
Status/In ReviewОсталось за вами: ревью и мёрж PR — задача закроется автоматически. Дальше по вехе v1.35 остаются #32 и #33.