Spaces:
Sleeping
Sleeping
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
|