| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """API - 商品参数值管理"""
- from fastapi import APIRouter, Depends, HTTPException, Request
- from pydantic import ValidationError
- from sqlalchemy.orm import Session
- from app.core.database import get_db
- from app.core.auth import get_current_user
- from app.core.admin_request_json import parse_admin_request_json
- from app.core.response import success_response, error_response
- from app.crud.product_parameter_value import product_parameter_value
- from app.schemas.product_parameter_value import ProductParameterValueBatchSave
- router = APIRouter(prefix="/web/admin/product-parameter-values", tags=["商品参数值管理"])
- def require_admin(current_user: dict = Depends(get_current_user)):
- """验证运营人员权限"""
- if current_user.get("role") not in {"admin", "super_admin"}:
- raise HTTPException(status_code=403, detail="需要运营人员权限")
- return current_user
- @router.get("/product/{product_id}", response_model=dict)
- def get_product_parameter_values(
- product_id: str,
- db: Session = Depends(get_db),
- current_user: dict = Depends(require_admin)
- ):
- """获取商品的参数值"""
- values = product_parameter_value.get_by_product_with_detail(db, product_id)
-
- return success_response({
- "list": values,
- "total": len(values)
- })
- @router.post("/product/{product_id}", response_model=dict)
- async def save_product_parameter_values(
- product_id: str,
- request: Request,
- db: Session = Depends(get_db),
- current_user: dict = Depends(require_admin)
- ):
- """批量保存商品参数值(兼容密文信封)"""
- data, err = await parse_admin_request_json(
- request, current_user, source="admin_product_parameter_values"
- )
- if err:
- return error_response(400, err)
- if not isinstance(data, dict):
- return error_response(400, "请求体格式错误")
- try:
- save_data = ProductParameterValueBatchSave.model_validate(data)
- except ValidationError as exc:
- return error_response(400, str(exc))
- if save_data.product_id != product_id:
- return error_response(400, "请求体中的商品ID与路径不一致")
- creator = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")}
- values_data = [item.model_dump() for item in save_data.values]
- product_parameter_value.batch_save(db, product_id, values_data, creator)
-
- # 重新获取更新后的列表
- values = product_parameter_value.get_by_product_with_detail(db, product_id)
-
- return success_response({
- "list": values,
- "total": len(values)
- })
|