from typing import Annotated from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from backend.session import get_session from models import User from schemas.deal import * from services.auth import get_current_user from services.deal import DealService deal_router = APIRouter( prefix='/deal', tags=['deal'] ) @deal_router.post('/create') async def create( request: DealCreateRequest, session: Annotated[AsyncSession, Depends(get_session)], user: Annotated[User, Depends(get_current_user)] ): return await DealService(session).create(request, user) @deal_router.post('/quickCreate', response_model=DealQuickCreateResponse) async def quick_create( request: DealQuickCreateRequest, session: Annotated[AsyncSession, Depends(get_session)], user: Annotated[User, Depends(get_current_user)] ): return await DealService(session).quick_create(request, user) @deal_router.post('/changeStatus', response_model=DealChangeStatusResponse) async def change_status( request: DealChangeStatusRequest, session: Annotated[AsyncSession, Depends(get_session)], user: Annotated[User, Depends(get_current_user)] ): return await DealService(session).change_status(request, user) @deal_router.get('/summaries', response_model=DealSummaryResponse, operation_id='getDealSummaries' ) async def get_summary( session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).get_summary() @deal_router.post( '/summaries/reorder', response_model=DealSummaryReorderResponse, operation_id='reorderDealSummaries' ) async def reorder( session: Annotated[AsyncSession, Depends(get_session)], request: DealSummaryReorderRequest, user: Annotated[User, Depends(get_current_user)] ): return await DealService(session).reorder(request, user) @deal_router.get( '/get-all', response_model=DealGetAllResponse, operation_id='getAllDeals' ) async def get_all( session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).get_all() # endpoint to get deal by id @deal_router.get( '/get/{deal_id}', response_model=DealSchema, operation_id='getDealById' ) async def get_deal_by_id( deal_id: int, session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).get_by_id(deal_id) @deal_router.post( '/update-general-info', response_model=DealUpdateGeneralInfoResponse, operation_id='updateDealGeneralInfo' ) async def update_general_info( request: DealUpdateGeneralInfoRequest, session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).update_general_info(request) # region Deal services @deal_router.post( '/services/add/multiple', response_model=DealAddServicesResponse, operation_id='addMultipleDealServices' ) async def services_add( request: DealAddServicesRequest, session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).add_services(request) @deal_router.post( '/services/add', response_model=DealAddServiceResponse, operation_id='addDealService' ) async def services_add( request: DealAddServiceRequest, session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).add_service(request) @deal_router.post( '/services/update-quantity', response_model=DealUpdateServiceQuantityResponse, operation_id='updateDealServiceQuantity' ) async def services_update( request: DealUpdateServiceQuantityRequest, session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).update_service_quantity(request) @deal_router.post( '/services/delete', response_model=DealDeleteServiceResponse, operation_id='deleteDealService' ) async def services_delete( request: DealDeleteServiceRequest, session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).delete_service(request) @deal_router.post( '/services/delete/multiple', response_model=DealDeleteServicesResponse, operation_id='deleteMultipleDealServices' ) async def services_delete( request: DealDeleteServicesRequest, session: Annotated[AsyncSession, Depends(get_session)] ): return await DealService(session).delete_services(request) # endregion # region Deal products @deal_router.post( '/products/update-quantity', response_model=DealUpdateProductQuantityResponse, operation_id='updateDealProductQuantity') async def products_update( request: DealUpdateProductQuantityRequest, session: Annotated[AsyncSession, Depends(get_session)]): return await DealService(session).update_product_quantity(request) @deal_router.post( '/products/add', response_model=DealAddProductResponse, operation_id='addDealProduct') async def products_add( request: DealAddProductRequest, session: Annotated[AsyncSession, Depends(get_session)]): return await DealService(session).add_product(request) @deal_router.post( '/products/delete', response_model=DealDeleteProductResponse, operation_id='deleteDealProduct') async def products_delete( request: DealDeleteProductRequest, session: Annotated[AsyncSession, Depends(get_session)]): return await DealService(session).delete_product(request) @deal_router.post( '/products/delete/multiple', response_model=DealDeleteProductsResponse, operation_id='deleteMultipleDealProducts') async def products_delete( request: DealDeleteProductsRequest, session: Annotated[AsyncSession, Depends(get_session)]): return await DealService(session).delete_products(request) # endregion