222 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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'],
 | 
						|
    dependencies=[Depends(get_current_user)]
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
@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(
 | 
						|
    '/delete',
 | 
						|
    response_model=DealDeleteResponse,
 | 
						|
    operation_id='deleteDeal'
 | 
						|
)
 | 
						|
async def delete(
 | 
						|
        request: DealDeleteRequest,
 | 
						|
        session: Annotated[AsyncSession, Depends(get_session)]
 | 
						|
):
 | 
						|
    return await DealService(session).delete(request)
 | 
						|
 | 
						|
 | 
						|
@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_manual(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=DealSummaryResponse,
 | 
						|
    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
 |