| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Query
- from sqlalchemy.orm import Session
- from app.database import get_db
- from app.services.config_service import ConfigService
- from app.schemas.config_schema import (
- ConfigBatchUpdate, ConfigListResponse, ConfigResponse
- )
- from app.dependencies.auth import get_current_admin
- router = APIRouter(prefix="/api/admin", tags=["系统配置"])
- @router.get("/config", response_model=ConfigListResponse)
- def get_all_configs(
- db: Session = Depends(get_db),
- admin = Depends(get_current_admin)
- ):
- """获取所有配置项"""
- service = ConfigService(db)
- configs = service.get_all_configs()
- return ConfigListResponse(data=configs)
- @router.put("/config", response_model=ConfigResponse)
- def update_configs(
- update_data: ConfigBatchUpdate,
- db: Session = Depends(get_db),
- admin = Depends(get_current_admin)
- ):
- """批量更新配置项"""
- service = ConfigService(db)
- try:
- service.update_configs(update_data.configs, admin.id)
- return ConfigResponse(message="配置更新成功", data=None)
- except ValueError as e:
- raise HTTPException(status_code=400, detail=str(e))
- @router.get("/config/{config_key}/history", response_model=ConfigResponse)
- def get_config_history(
- config_key: str,
- page: int = 1,
- size: int = 20,
- db: Session = Depends(get_db),
- admin = Depends(get_current_admin)
- ):
- """获取配置修改历史"""
- service = ConfigService(db)
- history = service.get_config_history(config_key, page, size)
- return ConfigResponse(data=history)
- @router.post("/config/{config_key}/reset", response_model=ConfigResponse)
- def reset_config(
- config_key: str,
- db: Session = Depends(get_db),
- admin = Depends(get_current_admin)
- ):
- """重置配置为默认值"""
- service = ConfigService(db)
- try:
- service.reset_config(config_key, admin.id)
- return ConfigResponse(message="配置重置成功", data=None)
- except ValueError as e:
- raise HTTPException(status_code=400, detail=str(e))
- @router.post("/oss/upload")
- async def admin_upload_file(
- file: UploadFile = File(...),
- prefix: str = Query(default="uploads"),
- admin = Depends(get_current_admin)
- ):
- """管理员上传文件到 OSS"""
- from app.services.oss_service import get_oss_service
- content = await file.read()
- if len(content) > 10 * 1024 * 1024:
- raise HTTPException(status_code=400, detail="文件大小不能超过 10MB")
- oss_service = get_oss_service()
- try:
- url = oss_service.upload_file(content, prefix, file.filename)
- return {"code": 200, "data": {"url": url, "filename": file.filename}}
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"上传失败: {str(e)}")
|