category_parameter.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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.response import success_response, error_response
  7. from app.core.menu_guard import require_admin_or_super_admin
  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. @router.get("/{category_id}/parameters", response_model=dict)
  17. def get_category_parameters(
  18. category_id: str,
  19. db: Session = Depends(get_db),
  20. current_user: dict = Depends(require_admin_or_super_admin)
  21. ):
  22. """获取分类关联的参数列表"""
  23. params = category_parameter.get_by_category_with_detail(db, category_id)
  24. return success_response({
  25. "list": params,
  26. "total": len(params)
  27. })
  28. @router.put("/{category_id}/parameters", response_model=dict)
  29. def update_category_parameters(
  30. category_id: str,
  31. request: dict,
  32. db: Session = Depends(get_db),
  33. current_user: dict = Depends(require_admin_or_super_admin)
  34. ):
  35. """更新分类关联的参数"""
  36. from app.api.admin import _resolve_admin_payload_with_crypto_fallback
  37. payload, req_err = _resolve_admin_payload_with_crypto_fallback(request, current_user)
  38. if req_err is not None:
  39. return req_err
  40. try:
  41. update_data = CategoryParameterBatchUpdate.model_validate(payload)
  42. except Exception as exc:
  43. return error_response(400, f"参数错误: {exc}")
  44. creator = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")}
  45. items_data = [item.model_dump() for item in update_data.items]
  46. category_parameter.batch_save(db, category_id, items_data, creator)
  47. # 重新获取更新后的列表
  48. params = category_parameter.get_by_category_with_detail(db, category_id)
  49. return success_response({
  50. "list": params,
  51. "total": len(params)
  52. })