from io import BytesIO from fastapi import APIRouter, Depends, Response from backend.dependecies import SessionDependency from generators.shipping_qr_code_generator import ShippingQRCodeGenerator from schemas.shipping import * from services.auth import authorized_user from services.shipping import ShippingService shipping_router = APIRouter( prefix="/shipping", tags=["shipping"], ) @shipping_router.post( '/pallet/{card_id}', response_model=CreatePalletResponse, operation_id='create_pallet', dependencies=[Depends(authorized_user)], ) async def create_pallet( session: SessionDependency, card_id: int, ): return await ShippingService(session).create_pallet(card_id) @shipping_router.delete( '/pallet/{pallet_id}', response_model=DeletePalletResponse, operation_id='delete_pallet', dependencies=[Depends(authorized_user)], ) async def delete_pallet( session: SessionDependency, pallet_id: int, ): return await ShippingService(session).delete_pallet(pallet_id) @shipping_router.post( '/product', response_model=UpdateShippingProductResponse, operation_id='update_shipping_product', dependencies=[Depends(authorized_user)], ) async def update_shipping_product( session: SessionDependency, request: UpdateShippingProductRequest, ): return await ShippingService(session).update_shipping_product(request) @shipping_router.delete( '/product/{shipping_product_id}', response_model=DeleteShippingProductResponse, operation_id='delete_shipping_product', dependencies=[Depends(authorized_user)], ) async def delete_shipping_product( session: SessionDependency, shipping_product_id: int, ): return await ShippingService(session).delete_shipping_product(shipping_product_id) @shipping_router.post( '/box', response_model=UpdateBoxResponse, operation_id='update_box', dependencies=[Depends(authorized_user)], ) async def update_box( session: SessionDependency, request: UpdateBoxRequest, ): return await ShippingService(session).update_box(request) @shipping_router.delete( '/box/{box_id}', response_model=DeleteBoxResponse, operation_id='delete_box', dependencies=[Depends(authorized_user)], ) async def delete_box( session: SessionDependency, box_id: int, ): return await ShippingService(session).delete_box(box_id) @shipping_router.get( "/pdf/deal/{deal_id}", operation_id="get_deal_qr_code_pdf", ) async def generate_deal_qr_code_pdf( session: SessionDependency, deal_id: int, ): pdf_file: BytesIO = await ShippingQRCodeGenerator(session).generate_deal(deal_id) return Response(pdf_file.getvalue(), media_type="application/pdf") @shipping_router.get( "/pdf/pallets/{deal_id}", operation_id="get_pallets_pdf", ) async def generate_pallets_pdf( session: SessionDependency, deal_id: int, ): pdf_file: BytesIO = await ShippingQRCodeGenerator(session).generate_pallets(deal_id) return Response(pdf_file.getvalue(), media_type="application/pdf") @shipping_router.get( "/pdf/boxes/{deal_id}", operation_id="get_boxes_pdf", ) async def generate_boxes_pdf( session: SessionDependency, deal_id: int, ): pdf_file: BytesIO = await ShippingQRCodeGenerator(session).generate_boxes(deal_id) return Response(pdf_file.getvalue(), media_type="application/pdf")