Профиль: история партий игрока и настройки её витрины
Выборки партий по игроку в бэкенде не было — только по группе. Добавлен
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:
@@ -73,6 +73,10 @@ class User(SQLModel, table=True):
|
||||
"role <> 'admin' OR password_hash IS NOT NULL",
|
||||
name="ck_users_admin_has_password",
|
||||
),
|
||||
CheckConstraint("history_mode IN ('all','best')", name="ck_users_history_mode"),
|
||||
CheckConstraint(
|
||||
"history_detail IN ('compact','full')", name="ck_users_history_detail"
|
||||
),
|
||||
)
|
||||
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
@@ -97,6 +101,16 @@ class User(SQLModel, table=True):
|
||||
index=True,
|
||||
)
|
||||
)
|
||||
# Витрина истории партий в профиле: что показывать (все / только лучшая по очкам)
|
||||
# и насколько подробно. Действует и для гостей профиля, не только для владельца.
|
||||
history_mode: str = Field(
|
||||
default="all",
|
||||
sa_column=Column(String(8), nullable=False, server_default="all"),
|
||||
)
|
||||
history_detail: str = Field(
|
||||
default="compact",
|
||||
sa_column=Column(String(8), nullable=False, server_default="compact"),
|
||||
)
|
||||
# Любимая фракция — личный выбор игрока в кастомизации профиля, а НЕ вычисление
|
||||
# по истории партий (её считает «Чаще всего играет на»). NULL — выбор не сделан.
|
||||
favorite_faction_id: int | None = Field(
|
||||
|
||||
Reference in New Issue
Block a user