Introduced pkg modules for environment config, logging, and startup initialization. Replaced direct config and logging setup in main.py with modularized functions. Updated database and migration modules to use environment variables and improved DEBUG handling. Removed tool.py and migrated password utilities to pkg. Cleaned up legacy comments and unused code in models and routes.
36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from loguru import logger
|
||
from sqlmodel import select
|
||
from .setting import Setting
|
||
from pkg import Password
|
||
|
||
default_settings: list[Setting] = [
|
||
Setting(type='string', name='version', value='1.0.0'),
|
||
Setting(type='int', name='ver', value='1'),
|
||
Setting(type='string', name='account', value='admin@yuxiaoqiu.cn'),
|
||
]
|
||
|
||
async def migration(session):
|
||
# 先准备基础配置
|
||
settings: list[Setting] = default_settings.copy()
|
||
|
||
if await Setting.get(session, Setting.name == 'version'):
|
||
# 已有数据,说明不是第一次运行,直接返回
|
||
return
|
||
|
||
# 生成初始密码与密钥
|
||
admin_password = Password.generate()
|
||
logger.warning(f"密码(请牢记,后续不再显示): {admin_password}")
|
||
|
||
settings.append(Setting(type='string', name='password', value=Password.hash(admin_password)))
|
||
settings.append(Setting(type='string', name='SECRET_KEY', value=Password.generate(64)))
|
||
|
||
# 读取库里已存在的 name,避免主键冲突
|
||
names = [s.name for s in settings]
|
||
exist_stmt = select(Setting.name).where(Setting.name.in_(names))
|
||
exist_rs = await session.exec(exist_stmt)
|
||
existed: set[str] = set(exist_rs.all())
|
||
|
||
to_insert = [s for s in settings if s.name not in existed]
|
||
if to_insert:
|
||
# 使用你写好的通用新增方法(是类方法),并传入会话
|
||
await Setting.add(session, to_insert, refresh=False) |