from fastapi import APIRouter, HTTPException, Depends, Query from typing import Optional, List from pydantic import BaseModel from services.system_config_manager import system_config_manager from api.auth import api_auth router = APIRouter(prefix="/api/system-config") class SystemConfigResponse(BaseModel): key: str value: str created_at: Optional[float] = None updated_at: Optional[float] = None class SystemConfigCreate(BaseModel): key: str value: str class SystemConfigUpdate(BaseModel): value: str @router.get("/", response_model=List[SystemConfigResponse]) async def list_configs(authenticated_device_id: str = Depends(api_auth)): """列出所有系统配置""" configs = await system_config_manager.list_configs() return [SystemConfigResponse(**c.__dict__) for c in configs] @router.get("/{key}", response_model=SystemConfigResponse) async def get_config(key: str, authenticated_device_id: str = Depends(api_auth)): """获取指定key的系统配置""" config = await system_config_manager.get_config(key) if not config: raise HTTPException(status_code=404, detail="配置不存在") return SystemConfigResponse(**config.__dict__) @router.post("/", response_model=SystemConfigResponse) async def create_config( config: SystemConfigCreate, authenticated_device_id: str = Depends(api_auth) ): """新增系统配置""" success = await system_config_manager.create_config(config.key, config.value) if not success: raise HTTPException(status_code=400, detail="创建配置失败") new_config = await system_config_manager.get_config(config.key) return SystemConfigResponse(**new_config.__dict__) @router.put("/{key}", response_model=SystemConfigResponse) async def update_config( key: str, config: SystemConfigUpdate, authenticated_device_id: str = Depends(api_auth) ): """更新系统配置""" success = await system_config_manager.update_config(key, config.value) if not success: raise HTTPException(status_code=400, detail="更新配置失败") updated_config = await system_config_manager.get_config(key) return SystemConfigResponse(**updated_config.__dict__) @router.delete("/{key}") async def delete_config(key: str, authenticated_device_id: str = Depends(api_auth)): """删除系统配置""" success = await system_config_manager.delete_config(key) if not success: raise HTTPException(status_code=400, detail="删除配置失败") return {"detail": "删除成功"}