Files
Budget_Tool_Martinhal/backend/app/bootstrap.py
T

39 lines
1.4 KiB
Python

"""Run once at container start: creates the first admin and the default categories and sites."""
from sqlalchemy import func, select
from .config import settings
from .db import SessionLocal
from .models import Category, Department, Site, User
from .security import hash_password
from .seed import CATEGORIES, SITES
DEFAULT_DEPARTMENT = "IT"
def seed_categories(db, department: Department) -> None:
for i, (en, pt, section) in enumerate(CATEGORIES):
db.add(Category(department_id=department.id, name_en=en, name_pt=pt, section=section, sort_order=(i + 1) * 10))
def bootstrap() -> None:
with SessionLocal() as db:
if not db.scalar(select(func.count(Department.id))):
dept = Department(name=DEFAULT_DEPARTMENT)
db.add(dept)
db.flush()
seed_categories(db, dept)
if not db.scalar(select(func.count(User.id))):
db.add(User(email=settings.admin_email.lower(), name=settings.admin_name,
password_hash=hash_password(settings.admin_password), role="admin",
language=settings.default_language,
department_id=db.scalar(select(Department.id).order_by(Department.id))))
print(f"Created admin user {settings.admin_email}")
if not db.scalar(select(func.count(Site.id))):
for name in SITES:
db.add(Site(name=name))
db.commit()
if __name__ == "__main__":
bootstrap()