v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""Справочные данные: дополнения и фракции. Идемпотентный сидинг по `code`."""
|
||||
from __future__ import annotations
|
||||
|
||||
from sqlmodel import Session, select
|
||||
|
||||
from app.models import Expansion, Faction
|
||||
|
||||
# (code, name_ru, is_base, sort_order)
|
||||
EXPANSIONS: list[tuple[str, str, bool, int]] = [
|
||||
("base", "Базовая игра", True, 0),
|
||||
("forgotten_worlds", "Forgotten Worlds", False, 1),
|
||||
("forsaken_voids", "Forsaken Voids", False, 2),
|
||||
]
|
||||
|
||||
# (code, name_ru, expansion_code, sort_order)
|
||||
FACTIONS: list[tuple[str, str, str, int]] = [
|
||||
# База
|
||||
("orks", "Орки", "base", 0),
|
||||
("ultramarines", "Ультрамарины", "base", 1),
|
||||
("eldar", "Эльдары", "base", 2),
|
||||
("chaos", "Хаоситы", "base", 3),
|
||||
# Forgotten Worlds
|
||||
("astra_militarum", "Имперская гвардия", "forgotten_worlds", 0),
|
||||
("tau", "Тау", "forgotten_worlds", 1),
|
||||
("necrons", "Некроны", "forgotten_worlds", 2),
|
||||
("tyranids", "Тираниды", "forgotten_worlds", 3),
|
||||
# Forsaken Voids
|
||||
("inquisition", "Инквизиция", "forsaken_voids", 0),
|
||||
("sisters_of_battle", "Сёстры битвы", "forsaken_voids", 1),
|
||||
("drukhari", "Друкхари", "forsaken_voids", 2),
|
||||
("adeptus_mechanicus", "Адептус Механикус", "forsaken_voids", 3),
|
||||
]
|
||||
|
||||
|
||||
def seed_reference_data(session: Session) -> None:
|
||||
"""Создаёт/обновляет дополнения и фракции. Безопасно вызывать многократно."""
|
||||
code_to_expansion: dict[str, Expansion] = {}
|
||||
|
||||
for code, name_ru, is_base, order in EXPANSIONS:
|
||||
exp = session.exec(select(Expansion).where(Expansion.code == code)).first()
|
||||
if exp is None:
|
||||
exp = Expansion(code=code, name_ru=name_ru, is_base=is_base, sort_order=order)
|
||||
session.add(exp)
|
||||
else:
|
||||
exp.name_ru = name_ru
|
||||
exp.is_base = is_base
|
||||
exp.sort_order = order
|
||||
code_to_expansion[code] = exp
|
||||
|
||||
session.flush() # получить id дополнений
|
||||
|
||||
for code, name_ru, exp_code, order in FACTIONS:
|
||||
expansion = code_to_expansion[exp_code]
|
||||
fac = session.exec(select(Faction).where(Faction.code == code)).first()
|
||||
if fac is None:
|
||||
fac = Faction(
|
||||
code=code,
|
||||
name_ru=name_ru,
|
||||
expansion_id=expansion.id, # type: ignore[arg-type]
|
||||
sort_order=order,
|
||||
)
|
||||
session.add(fac)
|
||||
else:
|
||||
fac.name_ru = name_ru
|
||||
fac.expansion_id = expansion.id # type: ignore[assignment]
|
||||
fac.sort_order = order
|
||||
|
||||
session.commit()
|
||||
Reference in New Issue
Block a user