90 lines
3.2 KiB
Python
90 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
SystemConfig API - 系统配置管理接口
|
|
提供 SSO 登录和消息通知等系统配置的前端管理接口
|
|
"""
|
|
from typing import Dict, Any
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.database import get_db
|
|
from app.base_schema import ResponseModel
|
|
from app.config_manager import config_manager, GROUP_ENV_MAPPING
|
|
from core.system_config.schema import GroupConfigUpdate
|
|
from core.system_config.service import SystemConfigService
|
|
|
|
router = APIRouter(prefix="/system-config", tags=["系统配置管理"])
|
|
|
|
|
|
@router.get("/groups", summary="获取所有配置分组定义")
|
|
async def get_groups():
|
|
"""获取所有配置分组及其字段定义"""
|
|
return config_manager.get_group_list()
|
|
|
|
|
|
@router.get("/all", summary="获取所有分组配置")
|
|
async def get_all_configs():
|
|
"""获取所有分组配置(敏感字段脱敏)"""
|
|
return await SystemConfigService.get_all_groups_config(mask_secrets=True)
|
|
|
|
|
|
@router.get("/group/{group}", summary="获取分组配置")
|
|
async def get_group_config(group: str):
|
|
"""
|
|
获取指定分组的配置(敏感字段脱敏)
|
|
|
|
三级获取优先级: Redis → 数据库 → env 配置文件
|
|
"""
|
|
if group not in GROUP_ENV_MAPPING:
|
|
raise HTTPException(status_code=400, detail=f"不支持的配置分组: {group}")
|
|
|
|
return await SystemConfigService.get_group_config(group, mask_secrets=True)
|
|
|
|
|
|
@router.put("/group/{group}", response_model=ResponseModel, summary="更新分组配置")
|
|
async def update_group_config(
|
|
group: str,
|
|
data: GroupConfigUpdate,
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
"""
|
|
批量更新指定分组的配置
|
|
|
|
- 敏感字段如果传入脱敏值(含 ***),则跳过不更新
|
|
- 更新后自动清除 Redis 缓存
|
|
"""
|
|
if group not in GROUP_ENV_MAPPING:
|
|
raise HTTPException(status_code=400, detail=f"不支持的配置分组: {group}")
|
|
|
|
updated = await SystemConfigService.update_group_config(db, group, data.configs)
|
|
return ResponseModel(message="更新成功", data=updated)
|
|
|
|
|
|
@router.delete("/group/{group}", response_model=ResponseModel, summary="删除分组配置")
|
|
async def delete_group_config(
|
|
group: str,
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
"""删除指定分组的数据库配置(恢复为 env 配置文件默认值)"""
|
|
if group not in GROUP_ENV_MAPPING:
|
|
raise HTTPException(status_code=400, detail=f"不支持的配置分组: {group}")
|
|
|
|
success = await SystemConfigService.delete_group_config(db, group)
|
|
return ResponseModel(message="已恢复为默认配置" if success else "该分组无自定义配置")
|
|
|
|
|
|
@router.post("/cache/warmup", response_model=ResponseModel, summary="预热配置缓存")
|
|
async def warmup_cache():
|
|
"""手动预热所有配置到 Redis 缓存"""
|
|
await config_manager.warmup()
|
|
return ResponseModel(message="缓存预热完成")
|
|
|
|
|
|
@router.delete("/cache", response_model=ResponseModel, summary="清除配置缓存")
|
|
async def clear_cache():
|
|
"""清除所有配置的 Redis 缓存"""
|
|
await config_manager.invalidate_all()
|
|
return ResponseModel(message="缓存已清除")
|