diff --git a/backend/seed_units.py b/backend/seed_units.py new file mode 100644 index 0000000..8a6d2e6 --- /dev/null +++ b/backend/seed_units.py @@ -0,0 +1,67 @@ +"""E2-сид: справочник подразделений МЧС (иерархия РЦУ РЧС → ОУМЧС → Г(Р)ОЧС). + +Идемпотентный: существующие названия не дублируются. +Запуск: docker exec vector-backend sh -c 'cd /app && python backend/seed_units.py' +""" +from __future__ import annotations + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) + +from backend.database import SessionLocal # noqa: E402 +from backend.models import MchsUnit # noqa: E402 + +OBLASTS = [ + ('Минское областное управление МЧС', 'oblast'), + ('Брестское областное управление МЧС', 'oblast'), + ('Витебское областное управление МЧС', 'oblast'), + ('Гомельское областное управление МЧС', 'oblast'), + ('Гродненское областное управление МЧС', 'oblast'), + ('Могилёвское областное управление МЧС', 'oblast'), +] + +# Демо-набор Г(Р)ОЧС по одной области (Минская) — реальный справочник наполняется +# региональными админами через админку/скрипт при развёртывании. +MINSK_RAYONS = [ + 'Борисовский ГРОЧС', 'Жодинский ГРОЧС', 'Слуцкий ГРОЧС', + 'Молодечненский ГРОЧС', 'Столбцовский ГРОЧС', +] + + +def get_or_create(db, name, kind, parent_id=None): + existing = db.query(MchsUnit).filter_by(name=name).first() + if existing: + return existing + u = MchsUnit(name=name, kind=kind, parent_id=parent_id) + db.add(u) + db.flush() + return u + + +def main(): + db = SessionLocal() + try: + rcu = get_or_create(db, 'РЦУ РЧС', 'rcu') + created = 0 + for name, kind in OBLASTS: + before = db.query(MchsUnit).filter_by(name=name).count() + oblast = get_or_create(db, name, kind, rcu.id) + if not before: + created += 1 + minsk = db.query(MchsUnit).filter_by(name=OBLASTS[0][0]).first() + for name in MINSK_RAYONS: + before = db.query(MchsUnit).filter_by(name=name).count() + get_or_create(db, name, 'grochs', minsk.id) + if not before: + created += 1 + db.commit() + total = db.query(MchsUnit).count() + print(f'сид подразделений: создано {created}, всего {total}') + finally: + db.close() + + +if __name__ == '__main__': + main()