Профиль: история партий игрока и настройки её витрины
Выборки партий по игроку в бэкенде не было — только по группе. Добавлен
stats_service.user_match_list: завершённые партии игрока, свежие сверху;
сборка элементов вынесена из group_match_list в общий _match_items, чтобы
не дублировать её в двух местах.
Витрина профиля задаётся двумя колонками в users (миграция 0011):
history_mode (all/best) и history_detail (compact/full). Режим применяется
на бэкенде, а не на клиенте: это витрина владельца, и в том же виде
профиль видят гости. В режиме best берётся партия с максимальными League
Points из SCORED_CTE (при равных очках — более свежая).
GET /api/users/{user_id}/matches отдаёт список вместе с mode и detail —
гостю хватает одного запроса, чтобы отрисовать историю как задумал владелец.
#1
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -185,6 +185,28 @@ def update_bio(session: Session, user: User, bio: str | None) -> User:
|
||||
return user
|
||||
|
||||
|
||||
_HISTORY_MODES = {"all", "best"}
|
||||
_HISTORY_DETAILS = {"compact", "full"}
|
||||
|
||||
|
||||
def update_history_prefs(
|
||||
session: Session, user: User, *, mode: str | None = None, detail: str | None = None
|
||||
) -> User:
|
||||
"""Витрина истории партий: что показывать и насколько подробно. None — не менять."""
|
||||
if mode is not None:
|
||||
if mode not in _HISTORY_MODES:
|
||||
raise ValidationError("Неизвестный режим истории партий.")
|
||||
user.history_mode = mode
|
||||
if detail is not None:
|
||||
if detail not in _HISTORY_DETAILS:
|
||||
raise ValidationError("Неизвестная подробность истории партий.")
|
||||
user.history_detail = detail
|
||||
session.add(user)
|
||||
session.commit()
|
||||
session.refresh(user)
|
||||
return user
|
||||
|
||||
|
||||
def update_favorite_faction(session: Session, user: User, faction_id: int | None) -> User:
|
||||
"""Любимая фракция — личный выбор игрока; None очищает выбор."""
|
||||
if faction_id is not None and session.get(Faction, faction_id) is None:
|
||||
|
||||
Reference in New Issue
Block a user