import asyncio from sqlalchemy import select from app.config import settings from app.database import SessionLocal from app.models import AdminUser from app.security import hash_password async def bootstrap() -> None: async with SessionLocal() as session: result = await session.execute( select(AdminUser).where(AdminUser.username == settings.admin_username) ) admin = result.scalar_one_or_none() if admin is None: session.add( AdminUser( username=settings.admin_username, email=settings.admin_email, password_hash=hash_password(settings.admin_password), is_active=True, ) ) await session.commit() print(f"Admin user '{settings.admin_username}' created from ENV") else: # Keep password in sync with ENV on boot (convenient for Dokploy) admin.email = settings.admin_email admin.password_hash = hash_password(settings.admin_password) admin.is_active = True await session.commit() print(f"Admin user '{settings.admin_username}' synced from ENV") if __name__ == "__main__": asyncio.run(bootstrap())