File size: 4,362 Bytes
551658a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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