import asyncio from sqlalchemy.ext.asyncio import create_async_engine from app.models import Base, Admin from app.services import hash_password from app.core import get_settings settings = get_settings() async def init_db(): engine = create_async_engine(settings.database_url) async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) print("Tables created.") async def create_admin(username: str, password: str): from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.orm import sessionmaker from sqlalchemy import select engine = create_async_engine(settings.database_url) AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession) async with AsyncSessionLocal() as session: result = await session.execute( select(Admin).where(Admin.username == username) ) if result.scalar_one_or_none(): print(f"Admin '{username}' already exists.") return admin = Admin( username=username, password_hash=hash_password(password), ) session.add(admin) await session.commit() print(f"Admin '{username}' created.") if __name__ == "__main__": import sys asyncio.run(init_db()) if len(sys.argv) >= 3: asyncio.run(create_admin(sys.argv[1], sys.argv[2])) else: asyncio.run(create_admin("admin", "admin123"))