From d2860118d80b529165f35f8a110c9323be4c507f Mon Sep 17 00:00:00 2001 From: viktot14-ai Date: Wed, 9 Sep 2026 21:46:20 +0300 Subject: [PATCH] =?UTF-8?q?E2:=20=D1=81=D0=B8=D0=B4=20=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20(=D0=A0=D0=A6=D0=A3=20=D0=A0=D0=A7=D0=A1=20=E2=86=92?= =?UTF-8?q?=206=20=D0=9E=D0=A3=D0=9C=D0=A7=D0=A1=20=E2=86=92=20=D0=B4?= =?UTF-8?q?=D0=B5=D0=BC=D0=BE=20=D0=93(=D0=A0)=D0=9E=D0=A7=D0=A1=20=D0=9C?= =?UTF-8?q?=D0=B8=D0=BD=D1=81=D0=BA=D0=BE=D0=B9=20=D0=BE=D0=B1=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D0=B8),=20=D0=B8=D0=B4=D0=B5=D0=BC=D0=BF=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D0=BD=D1=82=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/seed_units.py | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 backend/seed_units.py 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()