ymt-python / routers /product_packaging.py
hsailorj's picture
Add application file
551658a
Raw
History Blame Contribute Delete
4.36 kB
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