from fastapi import APIRouter, Path from backend.dependecies import SessionDependency from modules.fulfillment_base.schemas.deal_product import * from modules.fulfillment_base.schemas.product_service import * from modules.fulfillment_base.services import DealProductService, ProductServiceService router = APIRouter(tags=["deal-product"]) # region DealProduct @router.get( "/{dealId}", response_model=GetDealProductsResponse, operation_id="get_deal_products", ) async def get_deal_products( session: SessionDependency, deal_id: int = Path(alias="dealId"), ): return await DealProductService(session).get_all(deal_id) @router.post( "/", response_model=CreateDealProductResponse, operation_id="create_deal_product", ) async def create_deal_product( session: SessionDependency, request: CreateDealProductRequest, ): return await DealProductService(session).create(request) @router.patch( "/{dealId}/product/{productId}", response_model=UpdateDealProductResponse, operation_id="update_deal_product", ) async def update_deal_product( session: SessionDependency, request: UpdateDealProductRequest, deal_id: int = Path(alias="dealId"), product_id: int = Path(alias="productId"), ): return await DealProductService(session).update(deal_id, product_id, request) @router.delete( "/{dealId}/product/{productId}", response_model=DeleteDealProductResponse, operation_id="delete_deal_product", ) async def delete_deal_product( session: SessionDependency, deal_id: int = Path(alias="dealId"), product_id: int = Path(alias="productId"), ): return await DealProductService(session).delete(deal_id, product_id) # endregion # region DealProductService @router.post( "/service", response_model=CreateProductServiceResponse, operation_id="create_deal_product_service", ) async def create_deal_product_service( session: SessionDependency, request: CreateProductServiceRequest, ): return await ProductServiceService(session).create(request) @router.patch( "/{dealId}/product/{productId}/service/{serviceId}", response_model=UpdateProductServiceResponse, operation_id="update_deal_product_service", ) async def update_deal_product_service( session: SessionDependency, request: UpdateProductServiceRequest, deal_id: int = Path(alias="dealId"), product_id: int = Path(alias="productId"), service_id: int = Path(alias="serviceId"), ): return await ProductServiceService(session).update( deal_id, product_id, service_id, request ) @router.delete( "/{dealId}/product/{productId}/service/{serviceId}", response_model=DeleteProductServiceResponse, operation_id="delete_deal_product_service", ) async def delete_deal_product_service( session: SessionDependency, deal_id: int = Path(alias="dealId"), product_id: int = Path(alias="productId"), service_id: int = Path(alias="serviceId"), ): return await ProductServiceService(session).delete(deal_id, product_id, service_id) @router.post( "/services/duplicate", response_model=ProductServicesDuplicateResponse, operation_id="duplicate_product_services", ) async def copy_product_services( session: SessionDependency, request: ProductServicesDuplicateRequest, ): return await ProductServiceService(session).duplicate_product_services(request) @router.post( "/add-services-kit", response_model=DealProductAddKitResponse, operation_id="add_kit_to_deal_product", ) async def add_kit_to_deal_product( session: SessionDependency, request: DealProductAddKitRequest, ): return await ProductServiceService(session).add_services_kit(request) # endregion