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,74 @@
from modules.fulfillment_base.schemas.product import ProductSchema
from modules.fulfillment_base.schemas.product_service import ProductServiceSchema
from schemas.base import BaseSchema, BaseResponse
# region Entity
class DealProductSchema(BaseSchema):
deal_id: int
product_id: int
product: ProductSchema
quantity: int
comment: str
product_services: list[ProductServiceSchema]
class CreateDealProductSchema(BaseSchema):
deal_id: int
product_id: int
quantity: int
comment: str
class UpdateDealProductSchema(BaseSchema):
quantity: int
comment: str
# endregion
# region Request
class CreateDealProductRequest(BaseSchema):
entity: CreateDealProductSchema
class UpdateDealProductRequest(BaseSchema):
entity: UpdateDealProductSchema
class DealProductAddKitRequest(BaseSchema):
deal_id: int
product_id: int
kit_id: int
# endregion
# region Response
class GetDealProductsResponse(BaseSchema):
items: list[DealProductSchema]
class CreateDealProductResponse(BaseResponse):
entity: DealProductSchema
class UpdateDealProductResponse(BaseResponse):
pass
class DeleteDealProductResponse(BaseResponse):
pass
class DealProductAddKitResponse(BaseResponse):
pass
# endregion

View File

@ -0,0 +1,64 @@
from modules.fulfillment_base.schemas.service import ServiceSchema
from schemas.base import BaseSchema, BaseResponse
# region Entity
class DealServiceSchema(BaseSchema):
deal_id: int
service_id: int
service: ServiceSchema
quantity: int
price: float
is_fixed_price: bool
class CreateDealServiceSchema(BaseSchema):
deal_id: int
service_id: int
quantity: int
price: float
class UpdateDealServiceSchema(BaseSchema):
quantity: int
price: float
is_fixed_price: bool
# endregion
# region Request
class CreateDealServiceRequest(BaseSchema):
entity: CreateDealServiceSchema
class UpdateDealServiceRequest(BaseSchema):
entity: UpdateDealServiceSchema
# endregion
# region Response
class GetDealServicesResponse(BaseSchema):
items: list[DealServiceSchema]
class CreateDealServiceResponse(BaseResponse):
entity: DealServiceSchema
class UpdateDealServiceResponse(BaseResponse):
pass
class DeleteDealServiceResponse(BaseResponse):
pass
# endregion

View File

@ -0,0 +1,77 @@
from typing import Optional
from schemas.base import BaseSchema, BaseResponse
# region Entity
class ProductImageSchema(BaseSchema):
id: int
product_id: int
image_url: str
class CreateProductSchema(BaseSchema):
name: str
article: str
factory_article: str
brand: Optional[str]
color: Optional[str]
composition: Optional[str]
size: Optional[str]
additional_info: Optional[str]
class ProductSchema(CreateProductSchema):
id: int
class UpdateProductSchema(BaseSchema):
name: Optional[str] = None
article: Optional[str] = None
factory_article: Optional[str] = None
brand: Optional[str] = None
color: Optional[str] = None
composition: Optional[str] = None
size: Optional[str] = None
additional_info: Optional[str] = None
images: list[ProductImageSchema] | None = []
# endregion
# region Request
class CreateProductRequest(BaseSchema):
entity: CreateProductSchema
class UpdateProductRequest(BaseSchema):
entity: UpdateProductSchema
# endregion
# region Response
class GetProductsResponse(BaseSchema):
items: list[ProductSchema]
class CreateProductResponse(BaseResponse):
entity: ProductSchema
class UpdateProductResponse(BaseResponse):
pass
class DeleteProductResponse(BaseResponse):
pass
# endregion

View File

@ -0,0 +1,69 @@
from modules.fulfillment_base.schemas.service import ServiceSchema
from schemas.base import BaseSchema, BaseResponse
# region Entity
class ProductServiceSchema(BaseSchema):
deal_id: int
product_id: int
service_id: int
service: ServiceSchema
price: float
is_fixed_price: bool
class CreateProductServiceSchema(BaseSchema):
deal_id: int
product_id: int
service_id: int
price: float
class UpdateProductServiceSchema(BaseSchema):
price: float
is_fixed_price: bool
# endregion
# region Request
class CreateProductServiceRequest(BaseSchema):
entity: CreateProductServiceSchema
class UpdateProductServiceRequest(BaseSchema):
entity: UpdateProductServiceSchema
class ProductServicesDuplicateRequest(BaseSchema):
deal_id: int
source_deal_product_id: int
target_deal_product_ids: list[int]
# endregion
# region Response
class CreateProductServiceResponse(BaseResponse):
entity: ProductServiceSchema
class UpdateProductServiceResponse(BaseResponse):
pass
class DeleteProductServiceResponse(BaseResponse):
pass
class ProductServicesDuplicateResponse(BaseResponse):
pass
# endregion

View File

@ -0,0 +1,76 @@
from typing import Optional
from schemas.base import BaseSchema, BaseResponse
# region Entity
class ServicePriceRangeSchema(BaseSchema):
id: int | None
from_quantity: int
to_quantity: int
price: float
class ServiceCategorySchema(BaseSchema):
id: int
name: str
deal_service_rank: str
product_service_rank: str
class ServiceSchema(BaseSchema):
id: int
name: str
category: ServiceCategorySchema
price: float
service_type: int
price_ranges: list[ServicePriceRangeSchema]
cost: Optional[float]
lexorank: str
class UpdateServiceSchema(ServiceSchema):
pass
class CreateServiceSchema(ServiceSchema):
pass
# endregion
# region Request
class CreateServiceRequest(BaseSchema):
entity: CreateServiceSchema
class UpdateServiceRequest(BaseSchema):
entity: UpdateServiceSchema
# endregion
# region Response
class GetServicesResponse(BaseSchema):
items: list[ServiceSchema]
class CreateServiceResponse(BaseResponse):
entity: ServiceSchema
class UpdateServiceResponse(BaseResponse):
pass
class DeleteServiceResponse(BaseResponse):
pass
# endregion

View File

@ -0,0 +1,60 @@
from modules.fulfillment_base.schemas.service import ServiceSchema
from schemas.base import BaseSchema, BaseResponse
# region Entity
class BaseServicesKitSchema(BaseSchema):
name: str
service_type: int
class ServicesKitSchema(BaseServicesKitSchema):
id: int
services: list[ServiceSchema]
class CreateServicesKitSchema(BaseServicesKitSchema):
services_ids: list[int]
class UpdateServicesKitSchema(BaseServicesKitSchema):
services_ids: list[int]
# endregion
# region Request
class CreateServicesKitRequest(BaseSchema):
entity: CreateServicesKitSchema
class UpdateServicesKitRequest(BaseSchema):
entity: UpdateServicesKitSchema
# endregion
# region Response
class GetServicesKitResponse(BaseSchema):
items: list[ServicesKitSchema]
class CreateServicesKitResponse(BaseResponse):
entity: ServicesKitSchema
class UpdateServicesKitResponse(BaseResponse):
pass
class DeleteServicesKitResponse(BaseResponse):
pass
# endregion