category_parameter.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. """API - 分类参数关联管理"""
  2. from typing import List
  3. from fastapi import APIRouter, Depends, HTTPException, Query
  4. from sqlalchemy.orm import Session
  5. from app.core.database import get_db
  6. from app.core.auth import get_current_user
  7. from app.core.response import success_response, error_response
  8. from app.crud.category_parameter import category_parameter
  9. from app.schemas.category_parameter import (
  10. CategoryParameterBase,
  11. CategoryParameterBatchUpdate,
  12. CategoryParameterWithDetailResponse,
  13. CategoryParameterListResponse
  14. )
  15. router = APIRouter(prefix="/web/admin/categories", tags=["分类参数关联管理"])
  16. def require_admin(current_user: dict = Depends(get_current_user)):
  17. """验证运营人员权限"""
  18. if current_user.get("role") != "admin":
  19. raise HTTPException(status_code=403, detail="需要运营人员权限")
  20. return current_user
  21. @router.get("/{category_id}/parameters", response_model=dict)
  22. def get_category_parameters(
  23. category_id: str,
  24. db: Session = Depends(get_db),
  25. current_user: dict = Depends(require_admin)
  26. ):
  27. """获取分类关联的参数列表"""
  28. params = category_parameter.get_by_category_with_detail(db, category_id)
  29. return success_response({
  30. "list": params,
  31. "total": len(params)
  32. })
  33. @router.put("/{category_id}/parameters", response_model=dict)
  34. def update_category_parameters(
  35. category_id: str,
  36. update_data: CategoryParameterBatchUpdate,
  37. db: Session = Depends(get_db),
  38. current_user: dict = Depends(require_admin)
  39. ):
  40. """更新分类关联的参数"""
  41. creator = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")}
  42. items_data = [item.model_dump() for item in update_data.items]
  43. category_parameter.batch_save(db, category_id, items_data, creator)
  44. # 重新获取更新后的列表
  45. params = category_parameter.get_by_category_with_detail(db, category_id)
  46. return success_response({
  47. "list": params,
  48. "total": len(params)
  49. })