Files

107 lines
6.0 KiB
Python

"""Наполнение справочников: федеральные округа, регионы, роли.
Запуск:
docker compose exec api python -m scripts.seed
"""
from sqlalchemy import select
from app.db.session import SessionLocal
from app.models.enums import RoleCode
from app.models.region import FederalDistrict, Region
from app.models.user import Role
DISTRICTS: dict[str, list[str]] = {
"ЦФО": [
"Белгородская область", "Брянская область", "Владимирская область",
"Воронежская область", "Ивановская область", "Калужская область",
"Костромская область", "Курская область", "Липецкая область",
"Московская область", "Орловская область", "Рязанская область",
"Смоленская область", "Тамбовская область", "Тверская область",
"Тульская область", "Ярославская область", "Москва",
],
"СЗФО": [
"Республика Карелия", "Республика Коми", "Архангельская область",
"Вологодская область", "Калининградская область", "Ленинградская область",
"Мурманская область", "Новгородская область", "Псковская область",
"Санкт-Петербург", "Ненецкий автономный округ",
],
"ЮФО": [
"Республика Адыгея", "Республика Калмыкия", "Республика Крым",
"Краснодарский край", "Астраханская область", "Волгоградская область",
"Ростовская область", "Севастополь",
"Донецкая Народная Республика", "Луганская Народная Республика",
"Запорожская область", "Херсонская область",
],
"СКФО": [
"Республика Дагестан", "Республика Ингушетия",
"Кабардино-Балкарская Республика", "Карачаево-Черкесская Республика",
"Республика Северная Осетия — Алания", "Чеченская Республика",
"Ставропольский край",
],
"ПФО": [
"Республика Башкортостан", "Республика Марий Эл", "Республика Мордовия",
"Республика Татарстан", "Удмуртская Республика", "Чувашская Республика",
"Пермский край", "Кировская область", "Нижегородская область",
"Оренбургская область", "Пензенская область", "Самарская область",
"Саратовская область", "Ульяновская область",
],
"УФО": [
"Курганская область", "Свердловская область", "Тюменская область",
"Челябинская область", "Ханты-Мансийский автономный округ — Югра",
"Ямало-Ненецкий автономный округ",
],
"СФО": [
"Республика Алтай", "Республика Тыва", "Республика Хакасия",
"Алтайский край", "Красноярский край", "Кемеровская область — Кузбасс",
"Иркутская область", "Новосибирская область", "Омская область",
"Томская область",
],
"ДФО": [
"Республика Бурятия", "Республика Саха (Якутия)", "Забайкальский край",
"Камчатский край", "Приморский край", "Хабаровский край",
"Амурская область", "Магаданская область", "Сахалинская область",
"Еврейская автономная область", "Чукотский автономный округ",
],
}
ROLES: list[tuple[RoleCode, str]] = [
(RoleCode.ADMIN, "Администратор платформы"),
(RoleCode.COORDINATOR, "Координатор"),
(RoleCode.REGION_HEAD, "Руководитель регионального отделения"),
(RoleCode.MEMBER, "Член Организации"),
(RoleCode.DEPUTY, "Заместитель"),
]
def seed() -> None:
db = SessionLocal()
try:
# Роли
for code, name in ROLES:
if not db.scalar(select(Role).where(Role.code == code)):
db.add(Role(code=code, name=name))
# Округа и регионы
for district_name, regions in DISTRICTS.items():
district = db.scalar(
select(FederalDistrict).where(FederalDistrict.name == district_name)
)
if not district:
district = FederalDistrict(name=district_name, code=district_name)
db.add(district)
db.flush()
for region_name in regions:
if not db.scalar(select(Region).where(Region.name == region_name)):
db.add(Region(name=region_name, federal_district_id=district.id))
db.commit()
regions_count = len(db.scalars(select(Region)).all())
districts_count = len(db.scalars(select(FederalDistrict)).all())
print(f"Справочники наполнены: округов — {districts_count}, регионов — {regions_count}.")
finally:
db.close()
if __name__ == "__main__":
seed()