from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from app.database import get_db from app.models.dress import Dress from app.schemas.dress import DressCreate, DressUpdate, DressResponse from app.utils.response import APIResponse router = APIRouter() @router.post("/", response_model=DressResponse) def create_dress(dress: DressCreate, db: Session = Depends(get_db)): """创建服装记录""" try: db_dress = Dress(**dress.dict()) db.add(db_dress) db.commit() db.refresh(db_dress) return db_dress except Exception as e: db.rollback() raise HTTPException( status_code=500, detail=f"服装创建失败: {str(e)}" ) @router.get("/", response_model=List[DressResponse]) def get_all_dresses( skip: int = 0, limit: int = 100, db: Session = Depends(get_db) ): """获取所有服装记录""" try: dresses = db.query(Dress).offset(skip).limit(limit).all() total = db.query(Dress).count() # 构建分页数据 result = { "items": dresses, "total": total, "page": skip // limit + 1 if limit > 0 else 1, "size": limit } return result except Exception as e: raise HTTPException( status_code=500, detail=f"获取服装列表失败: {str(e)}" ) @router.get("/{dress_id}", response_model=DressResponse) def get_dress(dress_id: int, db: Session = Depends(get_db)): """获取单个服装记录""" dress = db.query(Dress).filter(Dress.id == dress_id).first() if dress is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"未找到ID为{dress_id}的服装" ) return dress @router.put("/{dress_id}", response_model=DressResponse) def update_dress(dress_id: int, dress: DressUpdate, db: Session = Depends(get_db)): """更新服装记录""" try: db_dress = db.query(Dress).filter(Dress.id == dress_id).first() if db_dress is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"未找到ID为{dress_id}的服装" ) # 更新服装字段 for field, value in dress.dict(exclude_unset=True).items(): setattr(db_dress, field, value) db.commit() db.refresh(db_dress) return db_dress except HTTPException: db.rollback() raise except Exception as e: db.rollback() raise HTTPException( status_code=500, detail=f"更新服装失败: {str(e)}" ) @router.delete("/{dress_id}", status_code=status.HTTP_200_OK) def delete_dress(dress_id: int, db: Session = Depends(get_db)): """删除服装记录""" try: db_dress = db.query(Dress).filter(Dress.id == dress_id).first() if db_dress is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"未找到ID为{dress_id}的服装" ) db.delete(db_dress) db.commit() return {"message": "服装删除成功"} except HTTPException: db.rollback() raise except Exception as e: db.rollback() raise HTTPException( status_code=500, detail=f"删除服装失败: {str(e)}" )