import src.messages as messages import src.products.exceptions as exceptions import src.products.service as service from fastapi import APIRouter, Depends, HTTPException, Query from sqlmodel import Session from src import models from src.auth.auth import get_current_user from src.database import get_session router = APIRouter(prefix='/products') @router.get('', response_model=list[models.ProductPublic], ) def get_products( user: models.User = Depends(get_current_user), session: Session = Depends(get_session), names: list[str] = Query([]), types: list[str] = Query([]), productors: list[str] = Query([]), ): return service.get_all( session, user, names, productors, types, ) @router.get('/{id}', response_model=models.ProductPublic) def get_product( id: int, user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): result = service.get_one(session, id) if result is None: raise HTTPException(status_code=404, detail=messages.Messages.not_found('product')) return result @router.post('', response_model=models.ProductPublic) def create_product( product: models.ProductCreate, user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): try: result = service.create_one(session, product) except exceptions.ProductCreateError as error: raise HTTPException(status_code=400, detail=str(error)) except exceptions.ProductorNotFoundError as error: raise HTTPException(status_code=404, detail=str(error)) return result @router.put('/{id}', response_model=models.ProductPublic) def update_product( id: int, product: models.ProductUpdate, user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): try: result = service.update_one(session, id, product) except exceptions.ProductNotFoundError as error: raise HTTPException(status_code=404, detail=str(error)) except exceptions.ProductorNotFoundError as error: raise HTTPException(status_code=404, detail=str(error)) return result @router.delete('/{id}', response_model=models.ProductPublic) def delete_product( id: int, user: models.User = Depends(get_current_user), session: Session = Depends(get_session) ): try: result = service.delete_one(session, id) except exceptions.ProductNotFoundError as error: raise HTTPException(status_code=404, detail=str(error)) return result