53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
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"))
|