from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.models.database import get_db from app.models.merchant_category import MerchantCategoryDB, MerchantCategoryCreate, MerchantCategoryUpdate, MerchantCategory from app.core.response import success_response, error_response, ResponseModel from app.api.deps import get_admin_user from typing import List router = APIRouter() @router.post("", response_model=ResponseModel) async def create_category( category: MerchantCategoryCreate, db: Session = Depends(get_db), admin = Depends(get_admin_user) ): """创建商家分类(管理员)""" db_category = MerchantCategoryDB(**category.model_dump()) db.add(db_category) try: db.commit() db.refresh(db_category) return success_response(data=MerchantCategory.model_validate(db_category)) except Exception as e: db.rollback() return error_response(code=500, message=f"创建失败: {str(e)}") @router.put("/{category_id}", response_model=ResponseModel) async def update_category( category_id: int, category: MerchantCategoryUpdate, db: Session = Depends(get_db), admin = Depends(get_admin_user) ): """更新商家分类(管理员)""" db_category = db.query(MerchantCategoryDB).filter( MerchantCategoryDB.id == category_id ).first() if not db_category: return error_response(code=404, message="分类不存在") update_data = category.model_dump(exclude_unset=True) for key, value in update_data.items(): setattr(db_category, key, value) try: db.commit() db.refresh(db_category) return success_response(data=MerchantCategory.model_validate(db_category)) except Exception as e: db.rollback() return error_response(code=500, message=f"更新失败: {str(e)}") @router.get("", response_model=ResponseModel) async def list_categories( db: Session = Depends(get_db), skip: int = 0, limit: int = 100 ): """获取商家分类列表""" categories = db.query(MerchantCategoryDB).order_by( MerchantCategoryDB.sort.desc() ).offset(skip).limit(limit).all() total = db.query(MerchantCategoryDB).count() return success_response(data={ "total": total, "items": [MerchantCategory.model_validate(c) for c in categories] })