from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from typing import List from database import get_db from models.product_packaging import ProductPackaging from models.user import User from schemas.product import ( ProductPackagingResponse, ProductPackagingCreate, ProductPackagingUpdate ) from routers.auth import get_current_user # 导入日志模块 from utils.logger import logger router = APIRouter() @router.get("/{product_number}/packaging", response_model=List[ProductPackagingResponse]) async def read_product_packaging( product_number: str, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): """获取商品包装列表""" logger.info(f"获取商品包装列表 - product_number: {product_number}, user: {current_user.username}") from routers.auth import is_admin_user query = db.query(ProductPackaging).filter(ProductPackaging.product_number == product_number) if not is_admin_user(current_user): query = query.filter(ProductPackaging.company_code == current_user.company_code) packaging = query.all() logger.info(f"获取商品包装列表成功 - product_number: {product_number}, 共 {len(packaging)} 个包装") return packaging @router.post("/{product_number}/packaging", response_model=ProductPackagingResponse, status_code=status.HTTP_201_CREATED) async def create_product_packaging( product_number: str, packaging: ProductPackagingCreate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): """创建商品包装""" logger.info(f"创建商品包装 - product_number: {product_number}, user: {current_user.username}") packaging_data = packaging.model_dump() packaging_data['product_number'] = product_number packaging_data['company_code'] = current_user.company_code db_packaging = ProductPackaging(**packaging_data) db.add(db_packaging) db.commit() db.refresh(db_packaging) logger.info(f"创建商品包装成功 - packaging_id: {db_packaging.id}, product_number: {product_number}") return db_packaging @router.put("/packaging/{packaging_id}", response_model=ProductPackagingResponse) async def update_product_packaging( packaging_id: int, packaging_update: ProductPackagingUpdate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): """更新商品包装""" logger.info(f"更新商品包装 - packaging_id: {packaging_id}, user: {current_user.username}") from routers.auth import is_admin_user query = db.query(ProductPackaging).filter(ProductPackaging.id == packaging_id) if not is_admin_user(current_user): query = query.filter(ProductPackaging.company_code == current_user.company_code) packaging = query.first() if packaging is None: logger.error(f"包装不存在 - packaging_id: {packaging_id}") raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Packaging not found") update_data = packaging_update.model_dump(exclude_unset=True) for field, value in update_data.items(): setattr(packaging, field, value) db.commit() db.refresh(packaging) logger.info(f"更新商品包装成功 - packaging_id: {packaging_id}") return packaging @router.delete("/packaging/{packaging_id}", status_code=status.HTTP_204_NO_CONTENT) async def delete_product_packaging( packaging_id: int, current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): """删除商品包装""" logger.info(f"删除商品包装 - packaging_id: {packaging_id}, user: {current_user.username}") from routers.auth import is_admin_user query = db.query(ProductPackaging).filter(ProductPackaging.id == packaging_id) if not is_admin_user(current_user): query = query.filter(ProductPackaging.company_code == current_user.company_code) packaging = query.first() if packaging is None: logger.error(f"包装不存在 - packaging_id: {packaging_id}") raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Packaging not found") db.delete(packaging) db.commit() logger.info(f"删除商品包装成功 - packaging_id: {packaging_id}") return None