feat(db): all domain models, initial Alembic migration (32 tables), seed script (8 districts, 89 regions, roles)
This commit is contained in:
1 parent
71460ab56a
commit
4a610ba94a
19 files changed
+1290
-2
No files matched your search
@@ -0,0 +1,106 @@
|
||||
"""Наполнение справочников: федеральные округа, регионы, роли.
|
||||
|
||||
Запуск:
|
||||
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()
|
||||
Reference in new issue
Block a user