from fastapi import APIRouter, Path, Query from backend.dependecies import SessionDependency, PaginationDependency from modules.fulfillment_base.schemas.product import * from modules.fulfillment_base.services import ProductService, BarcodePrinterService router = APIRouter(tags=["product"]) @router.get( "/", response_model=GetProductsResponse, operation_id="get_products", ) async def get_products( session: SessionDependency, pagination: PaginationDependency, client_id: Optional[int] = Query(alias="clientId", default=None), search_input: Optional[str] = Query(alias="searchInput", default=None), ): return await ProductService(session).get_all(pagination, client_id, search_input) @router.post( "/", response_model=CreateProductResponse, operation_id="create_product", ) async def create_product( session: SessionDependency, request: CreateProductRequest, ): return await ProductService(session).create(request) @router.patch( "/{pk}", response_model=UpdateProductResponse, operation_id="update_product", ) async def update_product( session: SessionDependency, request: UpdateProductRequest, pk: int = Path(), ): return await ProductService(session).update(pk, request) @router.delete( "/{pk}", response_model=DeleteProductResponse, operation_id="delete_product", ) async def delete_product( session: SessionDependency, pk: int = Path(), ): return await ProductService(session).delete(pk) @router.post( "/barcode/get-pdf", operation_id="get_product_barcode_pdf", response_model=GetProductBarcodePdfResponse, ) async def get_product_barcode_pdf( request: GetProductBarcodePdfRequest, session: SessionDependency ): service = BarcodePrinterService(session) filename, base64_string = await service.generate_base64(request) return GetProductBarcodePdfResponse( base64_string=base64_string, filename=filename, mime_type="application/pdf" )