加入部分消息通知入口,同步前端管理
This commit is contained in:
@@ -490,3 +490,51 @@ async def admin_delete_invite_code(
|
||||
await db.delete(invite)
|
||||
await db.commit()
|
||||
return {"success": True}
|
||||
|
||||
|
||||
# ===================== System Config Endpoints =====================
|
||||
|
||||
from shared.models.system_config import SystemConfig
|
||||
|
||||
|
||||
@app.get("/admin/config")
|
||||
async def admin_get_config(
|
||||
admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""获取系统配置"""
|
||||
result = await db.execute(select(SystemConfig))
|
||||
rows = result.scalars().all()
|
||||
config = {r.key: r.value for r in rows}
|
||||
return {"success": True, "data": config}
|
||||
|
||||
|
||||
@app.put("/admin/config")
|
||||
async def admin_update_config(
|
||||
body: dict,
|
||||
admin: User = Depends(require_admin),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""更新系统配置,同时通知调度器重新加载"""
|
||||
allowed_keys = {"webhook_url", "daily_report_hour", "daily_report_minute"}
|
||||
for key, value in body.items():
|
||||
if key not in allowed_keys:
|
||||
continue
|
||||
result = await db.execute(select(SystemConfig).where(SystemConfig.key == key))
|
||||
row = result.scalar_one_or_none()
|
||||
if row:
|
||||
row.value = str(value)
|
||||
else:
|
||||
db.add(SystemConfig(key=key, value=str(value)))
|
||||
await db.commit()
|
||||
|
||||
# 通过 Redis 通知调度器重新加载配置
|
||||
try:
|
||||
import redis.asyncio as aioredis
|
||||
r = aioredis.from_url(shared_settings.REDIS_URL, decode_responses=True)
|
||||
await r.publish("config_updates", "reload")
|
||||
await r.close()
|
||||
except Exception as e:
|
||||
logger.warning(f"通知调度器失败(不影响保存): {e}")
|
||||
|
||||
return {"success": True, "message": "配置已保存"}
|
||||
|
||||
Reference in New Issue
Block a user