| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- """API - 分类参数关联管理"""
- from typing import List
- from fastapi import APIRouter, Depends, HTTPException, Query
- from sqlalchemy.orm import Session
- from app.core.database import get_db
- from app.core.response import success_response, error_response
- from app.core.menu_guard import require_admin_or_super_admin
- from app.crud.category_parameter import category_parameter
- from app.schemas.category_parameter import (
- CategoryParameterBase,
- CategoryParameterBatchUpdate,
- CategoryParameterWithDetailResponse,
- CategoryParameterListResponse
- )
- router = APIRouter(prefix="/web/admin/categories", tags=["分类参数关联管理"])
- @router.get("/{category_id}/parameters", response_model=dict)
- def get_category_parameters(
- category_id: str,
- db: Session = Depends(get_db),
- current_user: dict = Depends(require_admin_or_super_admin)
- ):
- """获取分类关联的参数列表"""
- params = category_parameter.get_by_category_with_detail(db, category_id)
-
- return success_response({
- "list": params,
- "total": len(params)
- })
- @router.put("/{category_id}/parameters", response_model=dict)
- def update_category_parameters(
- category_id: str,
- request: dict,
- db: Session = Depends(get_db),
- current_user: dict = Depends(require_admin_or_super_admin)
- ):
- """更新分类关联的参数"""
- from app.api.admin import _resolve_admin_payload_with_crypto_fallback
- payload, req_err = _resolve_admin_payload_with_crypto_fallback(request, current_user)
- if req_err is not None:
- return req_err
- try:
- update_data = CategoryParameterBatchUpdate.model_validate(payload)
- except Exception as exc:
- return error_response(400, f"参数错误: {exc}")
- creator = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")}
-
- items_data = [item.model_dump() for item in update_data.items]
- category_parameter.batch_save(db, category_id, items_data, creator)
-
- # 重新获取更新后的列表
- params = category_parameter.get_by_category_with_detail(db, category_id)
-
- return success_response({
- "list": params,
- "total": len(params)
- })
|