196 lines
5.5 KiB
Python
196 lines
5.5 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']
|
|
)
|
|
|
|
|
|
@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.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
|