feat: modules, products, services, services kits

This commit is contained in:
2025-09-16 10:54:10 +04:00
parent be8052848c
commit 276626d6f7
55 changed files with 1791 additions and 34 deletions

View File

@ -0,0 +1,137 @@
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)
@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 DealProductService(session).add_services_kit(request)
# 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)
# endregion

View File

@ -0,0 +1,58 @@
from fastapi import APIRouter, Path
from backend.dependecies import SessionDependency
from modules.fulfillment_base.schemas.deal_service import *
from modules.fulfillment_base.services import DealServiceService
router = APIRouter(tags=["deal-service"])
@router.get(
"/{dealId}",
response_model=GetDealServicesResponse,
operation_id="get_deal_services",
)
async def get_deal_services(
session: SessionDependency,
deal_id: int = Path(alias="dealId"),
):
return await DealServiceService(session).get_all(deal_id)
@router.post(
"/",
response_model=CreateDealServiceResponse,
operation_id="create_deal_service",
)
async def create_deal_service(
session: SessionDependency,
request: CreateDealServiceRequest,
):
return await DealServiceService(session).create(request)
@router.patch(
"/{dealId}/service/{serviceId}",
response_model=UpdateDealServiceResponse,
operation_id="update_deal_service",
)
async def update_deal_service(
session: SessionDependency,
request: UpdateDealServiceRequest,
deal_id: int = Path(alias="dealId"),
service_id: int = Path(alias="serviceId"),
):
return await DealServiceService(session).update(deal_id, service_id, request)
@router.delete(
"/{dealId}/service/{serviceId}",
response_model=DeleteDealServiceResponse,
operation_id="delete_deal_service",
)
async def delete_deal_service(
session: SessionDependency,
deal_id: int = Path(alias="dealId"),
service_id: int = Path(alias="serviceId"),
):
return await DealServiceService(session).delete(deal_id, service_id)

View File

@ -0,0 +1,57 @@
from fastapi import APIRouter, Path, Query
from backend.dependecies import SessionDependency, PaginationDependency
from modules.fulfillment_base.schemas.product import *
from modules.fulfillment_base.services import ProductService
router = APIRouter(tags=["product"])
@router.get(
"/",
response_model=GetProductsResponse,
operation_id="get_products",
)
async def get_products(
session: SessionDependency,
pagination: PaginationDependency,
search_input: Optional[str] = Query(alias="searchInput", default=None),
):
return await ProductService(session).get_all(search_input, pagination)
@router.post(
"/",
response_model=CreateProductResponse,
operation_id="create_product",
)
async def create_product(
session: SessionDependency,
request: CreateProductRequest,
):
return await ProductService(session).create(request)
@router.patch(
"/{pk}",
response_model=UpdateProductResponse,
operation_id="update_product",
)
async def update_product(
session: SessionDependency,
request: UpdateProductRequest,
pk: int = Path(),
):
return await ProductService(session).update(pk, request)
@router.delete(
"/{pk}",
response_model=DeleteProductResponse,
operation_id="delete_product",
)
async def delete_product(
session: SessionDependency,
pk: int = Path(),
):
return await ProductService(session).delete(pk)

View File

@ -0,0 +1,55 @@
from fastapi import APIRouter, Path
from backend.dependecies import SessionDependency
from modules.fulfillment_base.schemas.service import *
from modules.fulfillment_base.services import ServiceModelService
router = APIRouter(tags=["service"])
@router.get(
"/",
response_model=GetServicesResponse,
operation_id="get_services",
)
async def get_services(
session: SessionDependency,
):
return await ServiceModelService(session).get_all()
@router.post(
"/",
response_model=CreateServiceResponse,
operation_id="create_service",
)
async def create_service(
session: SessionDependency,
request: CreateServiceRequest,
):
return await ServiceModelService(session).create(request)
@router.patch(
"/{pk}",
response_model=UpdateServiceResponse,
operation_id="update_service",
)
async def update_service(
session: SessionDependency,
request: UpdateServiceRequest,
pk: int = Path(),
):
return await ServiceModelService(session).update(pk, request)
@router.delete(
"/{pk}",
response_model=DeleteServiceResponse,
operation_id="delete_service",
)
async def delete_service(
session: SessionDependency,
pk: int = Path(),
):
return await ServiceModelService(session).delete(pk)

View File

@ -0,0 +1,55 @@
from fastapi import APIRouter, Path
from backend.dependecies import SessionDependency
from modules.fulfillment_base.schemas.services_kit import *
from modules.fulfillment_base.services import ServicesKitService
router = APIRouter(tags=["services-kit"])
@router.get(
"/",
response_model=GetServicesKitResponse,
operation_id="get_services_kits",
)
async def get_services_kits(
session: SessionDependency,
):
return await ServicesKitService(session).get_all()
@router.post(
"/",
response_model=CreateServicesKitResponse,
operation_id="create_services_kit",
)
async def create_services_kit(
session: SessionDependency,
request: CreateServicesKitRequest,
):
return await ServicesKitService(session).create(request)
@router.patch(
"/{pk}",
response_model=UpdateServicesKitResponse,
operation_id="update_services_kit",
)
async def update_services_kit(
session: SessionDependency,
request: UpdateServicesKitRequest,
pk: int = Path(),
):
return await ServicesKitService(session).update(pk, request)
@router.delete(
"/{pk}",
response_model=DeleteServicesKitResponse,
operation_id="delete_services_kit",
)
async def delete_services_kit(
session: SessionDependency,
pk: int = Path(),
):
return await ServicesKitService(session).delete(pk)