admin_config_router.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Query
  2. from sqlalchemy.orm import Session
  3. from app.database import get_db
  4. from app.services.config_service import ConfigService
  5. from app.schemas.config_schema import (
  6. ConfigBatchUpdate, ConfigListResponse, ConfigResponse
  7. )
  8. from app.dependencies.auth import get_current_admin
  9. router = APIRouter(prefix="/api/admin", tags=["系统配置"])
  10. @router.get("/config", response_model=ConfigListResponse)
  11. def get_all_configs(
  12. db: Session = Depends(get_db),
  13. admin = Depends(get_current_admin)
  14. ):
  15. """获取所有配置项"""
  16. service = ConfigService(db)
  17. configs = service.get_all_configs()
  18. return ConfigListResponse(data=configs)
  19. @router.put("/config", response_model=ConfigResponse)
  20. def update_configs(
  21. update_data: ConfigBatchUpdate,
  22. db: Session = Depends(get_db),
  23. admin = Depends(get_current_admin)
  24. ):
  25. """批量更新配置项"""
  26. service = ConfigService(db)
  27. try:
  28. service.update_configs(update_data.configs, admin.id)
  29. return ConfigResponse(message="配置更新成功", data=None)
  30. except ValueError as e:
  31. raise HTTPException(status_code=400, detail=str(e))
  32. @router.get("/config/{config_key}/history", response_model=ConfigResponse)
  33. def get_config_history(
  34. config_key: str,
  35. page: int = 1,
  36. size: int = 20,
  37. db: Session = Depends(get_db),
  38. admin = Depends(get_current_admin)
  39. ):
  40. """获取配置修改历史"""
  41. service = ConfigService(db)
  42. history = service.get_config_history(config_key, page, size)
  43. return ConfigResponse(data=history)
  44. @router.post("/config/{config_key}/reset", response_model=ConfigResponse)
  45. def reset_config(
  46. config_key: str,
  47. db: Session = Depends(get_db),
  48. admin = Depends(get_current_admin)
  49. ):
  50. """重置配置为默认值"""
  51. service = ConfigService(db)
  52. try:
  53. service.reset_config(config_key, admin.id)
  54. return ConfigResponse(message="配置重置成功", data=None)
  55. except ValueError as e:
  56. raise HTTPException(status_code=400, detail=str(e))
  57. @router.post("/oss/upload")
  58. async def admin_upload_file(
  59. file: UploadFile = File(...),
  60. prefix: str = Query(default="uploads"),
  61. admin = Depends(get_current_admin)
  62. ):
  63. """管理员上传文件到 OSS"""
  64. from app.services.oss_service import get_oss_service
  65. content = await file.read()
  66. if len(content) > 10 * 1024 * 1024:
  67. raise HTTPException(status_code=400, detail="文件大小不能超过 10MB")
  68. oss_service = get_oss_service()
  69. try:
  70. url = oss_service.upload_file(content, prefix, file.filename)
  71. return {"code": 200, "data": {"url": url, "filename": file.filename}}
  72. except Exception as e:
  73. raise HTTPException(status_code=500, detail=f"上传失败: {str(e)}")