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( '/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) @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)