27 lines
980 B
Python
27 lines
980 B
Python
from sqlalchemy.ext.asyncio import AsyncEngine
|
|
from ..models.user import Base, User, UserRole
|
|
from sqlalchemy import select
|
|
from config import SYSTEM_ADMIN_CONFIG
|
|
from services.auth import get_password_hash
|
|
|
|
async def init_db(engine: AsyncEngine):
|
|
"""初始化数据库"""
|
|
async with engine.begin() as conn:
|
|
# 创建所有表
|
|
await conn.run_sync(Base.metadata.create_all)
|
|
|
|
# 检查系统管理员是否存在
|
|
result = await conn.execute(
|
|
select(User).where(User.role == UserRole.SYSTEM_ADMIN)
|
|
)
|
|
if not result.scalars().first():
|
|
# 创建默认系统管理员
|
|
admin = User(
|
|
username=SYSTEM_ADMIN_CONFIG['username'],
|
|
password=get_password_hash(SYSTEM_ADMIN_CONFIG['password']),
|
|
role=UserRole.SYSTEM_ADMIN,
|
|
description=SYSTEM_ADMIN_CONFIG['description']
|
|
)
|
|
conn.add(admin)
|
|
await conn.commit()
|