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, DressListResponse 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 APIResponse.created(data=db_dress, message="服装创建成功") except Exception as e: db.rollback() return APIResponse.error(message=f"服装创建失败: {str(e)}", code=500) @router.get("/", response_model=DressListResponse) 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() return APIResponse.ok( data={ "items": dresses, "total": total, "page": skip // limit + 1 if limit > 0 else 1, "size": limit }, message="服装列表获取成功" ) except Exception as e: return APIResponse.error(message=f"获取服装列表失败: {str(e)}", code=500) @router.get("/{dress_id}", response_model=DressResponse) def get_dress(dress_id: int, db: Session = Depends(get_db)): """获取单个服装记录""" try: dress = db.query(Dress).filter(Dress.id == dress_id).first() if dress is None: return APIResponse.not_found(message=f"未找到ID为{dress_id}的服装") return APIResponse.ok(data=dress, message="服装获取成功") except Exception as e: return APIResponse.error(message=f"获取服装失败: {str(e)}", code=500) @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: return APIResponse.not_found(message=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 APIResponse.ok(data=db_dress, message="服装更新成功") except Exception as e: db.rollback() return APIResponse.error(message=f"更新服装失败: {str(e)}", code=500) @router.delete("/{dress_id}") 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: return APIResponse.not_found(message=f"未找到ID为{dress_id}的服装") db.delete(db_dress) db.commit() return APIResponse.ok(message="服装删除成功") except Exception as e: db.rollback() return APIResponse.error(message=f"删除服装失败: {str(e)}", code=500)