Профиль: любимая фракция — выбор игрока, а не вывод из статистики
Раньше «любимая» вычислялась как самая частая среди партий с ручным выбором фракции. Теперь это поле профиля: users.favorite_faction_id (FK на factions, ON DELETE SET NULL, миграция 0010) и необязательное поле в PATCH /api/users/me/profile. Роутер профиля переведён на model_dump(exclude_unset=True) и обновляет только пришедшие поля — иначе сохранение одного «о себе» обнуляло бы выбранную фракцию. «Основная фракция» логику не меняет (она и так считалась по всем партиям, включая рандомные раздачи) и переезжает в подпись «Чаще всего играет на»: FactionStat получает name_ru_prepositional из словаря предложного падежа в faction_service. Словарь в коде, а не в БД: набор фракций задан игрой; фракция вне словаря выводится в именительном. Служебное chosen_games существовало только ради старой «любимой» — убрано из SQL вместе с ней. #17 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ps52xzuUXnWrJ5SRnEeaLk
This commit is contained in:
@@ -18,3 +18,27 @@ def list_factions(session: Session) -> list[Faction]:
|
||||
select(Faction).order_by(Faction.expansion_id, Faction.sort_order)
|
||||
).all()
|
||||
)
|
||||
|
||||
|
||||
# Предложный падеж названий фракций для фразы «Чаще всего играет на …».
|
||||
# Словарь в коде, а не колонка в БД: набор фракций задан игрой и не меняется.
|
||||
# Фракция, добавленная админом мимо словаря, выводится в именительном падеже.
|
||||
_PREPOSITIONAL: dict[str, str] = {
|
||||
"orks": "Орках",
|
||||
"ultramarines": "Ультрамаринах",
|
||||
"eldar": "Эльдарах",
|
||||
"chaos": "Хаоситах",
|
||||
"astra_militarum": "Имперской гвардии",
|
||||
"tau": "Тау",
|
||||
"necrons": "Некронах",
|
||||
"tyranids": "Тиранидах",
|
||||
"inquisition": "Инквизиции",
|
||||
"sisters_of_battle": "Сёстрах битвы",
|
||||
"drukhari": "Друкхари",
|
||||
"adeptus_mechanicus": "Адептус Механикус",
|
||||
}
|
||||
|
||||
|
||||
def prepositional(code: str, name_ru: str) -> str:
|
||||
"""Название фракции в предложном падеже; вне словаря — именительный как есть."""
|
||||
return _PREPOSITIONAL.get(code, name_ru)
|
||||
|
||||
Reference in New Issue
Block a user