107 lines
6.0 KiB
Python
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()
|