product_parameter_value.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. """API - 商品参数值管理"""
  2. from typing import List
  3. from fastapi import APIRouter, Depends, HTTPException
  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.product_parameter_value import product_parameter_value
  9. from app.schemas.product_parameter_value import (
  10. ProductParameterValueBatchSave,
  11. ProductParameterValueResponse,
  12. ProductParameterValueListResponse
  13. )
  14. router = APIRouter(prefix="/web/admin/product-parameter-values", tags=["商品参数值管理"])
  15. def require_admin(current_user: dict = Depends(get_current_user)):
  16. """验证运营人员权限"""
  17. if current_user.get("role") != "admin":
  18. raise HTTPException(status_code=403, detail="需要运营人员权限")
  19. return current_user
  20. @router.get("/product/{product_id}", response_model=dict)
  21. def get_product_parameter_values(
  22. product_id: str,
  23. db: Session = Depends(get_db),
  24. current_user: dict = Depends(require_admin)
  25. ):
  26. """获取商品的参数值"""
  27. values = product_parameter_value.get_by_product_with_detail(db, product_id)
  28. return success_response({
  29. "list": values,
  30. "total": len(values)
  31. })
  32. @router.post("/product/{product_id}", response_model=dict)
  33. def save_product_parameter_values(
  34. product_id: str,
  35. save_data: ProductParameterValueBatchSave,
  36. db: Session = Depends(get_db),
  37. current_user: dict = Depends(require_admin)
  38. ):
  39. """批量保存商品参数值"""
  40. creator = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")}
  41. values_data = [item.model_dump() for item in save_data.values]
  42. product_parameter_value.batch_save(db, product_id, values_data, creator)
  43. # 重新获取更新后的列表
  44. values = product_parameter_value.get_by_product_with_detail(db, product_id)
  45. return success_response({
  46. "list": values,
  47. "total": len(values)
  48. })