from io import BytesIO from fastapi import APIRouter, Depends, Response from backend.dependecies import WmsSessionDependency from generators.warehouse_place_qr_code_generator import WarehousePlaceQRCodeGenerator from schemas.warehouse_management import * from services.auth import authorized_user from services.warehouse_management import WmsService wms_router = APIRouter( prefix="/wms", tags=["wms"], ) # region Place types @wms_router.get( '/place-type', operation_id='get_place_types', response_model=GetPlaceTypesResponse, dependencies=[Depends(authorized_user)], ) async def get_place_types( session: WmsSessionDependency, ): return await WmsService(session).get_place_types() @wms_router.get( '/place-type/flat/{parent_place_type_id}', operation_id='get_flat_place_types', response_model=GetFlatPlaceTypesResponse, dependencies=[Depends(authorized_user)], ) async def get_flat_place_types( session: WmsSessionDependency, parent_place_type_id: int, ): return await WmsService(session).get_flat_place_types(parent_place_type_id) @wms_router.post( '/place-type', operation_id='create_place_type', response_model=CreatePlaceTypeResponse, dependencies=[Depends(authorized_user)], ) async def create_place_type( session: WmsSessionDependency, request: CreatePlaceTypeRequest, ): return await WmsService(session).create_place_type(request) @wms_router.patch( '/place-type', operation_id='edit_place_type', response_model=EditPlaceTypeResponse, dependencies=[Depends(authorized_user)], ) async def edit_place_type( session: WmsSessionDependency, request: EditPlaceTypeRequest, ): return await WmsService(session).edit_place_type(request) @wms_router.delete( '/place-type/{place_type_id}', operation_id='delete_place_type', response_model=DeletePlaceTypeResponse, dependencies=[Depends(authorized_user)], ) async def delete_place_type( session: WmsSessionDependency, place_type_id: int, ): return await WmsService(session).delete_place_type(place_type_id) # endregion # region Places @wms_router.get( '/place', operation_id='get_places', response_model=GetPlacesResponse, dependencies=[Depends(authorized_user)], ) async def get_places( session: WmsSessionDependency, ): return await WmsService(session).get_places() @wms_router.post( '/place', operation_id='create_place', response_model=CreatePlaceResponse, dependencies=[Depends(authorized_user)], ) async def create_place( session: WmsSessionDependency, request: CreatePlaceRequest, ): return await WmsService(session).create_place(request) @wms_router.patch( '/place', operation_id='edit_place', response_model=EditPlaceResponse, dependencies=[Depends(authorized_user)], ) async def edit_place( session: WmsSessionDependency, request: EditPlaceRequest, ): return await WmsService(session).edit_place(request) @wms_router.delete( '/place/{place_id}', operation_id='delete_place', response_model=DeletePlaceResponse, dependencies=[Depends(authorized_user)], ) async def delete_place( session: WmsSessionDependency, place_id: int, ): return await WmsService(session).delete_place(place_id) @wms_router.get( "/place/pdf/{place_id}/{is_short}", operation_id="get_place_qr_code_pdf", ) async def generate_place_qr_code_pdf( session: WmsSessionDependency, place_id: int, is_short: bool = False, ): pdf_file: BytesIO = await WarehousePlaceQRCodeGenerator(session).generate(place_id, is_short) return Response(pdf_file.getvalue(), media_type="application/pdf") # endregion