""" 品类相关路由 提供品类、子类型、颜色的查询接口 """ from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from ..database import get_db from ..models import Category, SubType, Color from ..schemas import CategoryResponse, SubTypeResponse, ColorResponse router = APIRouter(prefix="/api/categories", tags=["品类"]) @router.get("", response_model=List[CategoryResponse]) def get_categories(db: Session = Depends(get_db)): """ 获取所有品类列表 按 sort_order 排序,无需认证 """ categories = db.query(Category).order_by(Category.sort_order).all() return categories @router.get("/{category_id}/sub-types", response_model=List[SubTypeResponse]) def get_category_sub_types( category_id: int, db: Session = Depends(get_db) ): """ 获取品类下的子类型 无需认证 """ # 检查品类是否存在 category = db.query(Category).filter(Category.id == category_id).first() if not category: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="品类不存在" ) sub_types = db.query(SubType).filter( SubType.category_id == category_id ).order_by(SubType.sort_order).all() return sub_types @router.get("/{category_id}/colors", response_model=List[ColorResponse]) def get_category_colors( category_id: int, db: Session = Depends(get_db) ): """ 获取品类下的颜色选项 无需认证 """ # 检查品类是否存在 category = db.query(Category).filter(Category.id == category_id).first() if not category: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="品类不存在" ) colors = db.query(Color).filter( Color.category_id == category_id ).order_by(Color.sort_order).all() return colors