80 lines
1.4 KiB
Python
80 lines
1.4 KiB
Python
from typing import Optional
|
|
|
|
from pydantic import field_validator
|
|
|
|
from modules.fulfillment_base.schemas.service_category import ServiceCategorySchema
|
|
from schemas.base import BaseSchema, BaseResponse
|
|
|
|
|
|
# region Entity
|
|
|
|
|
|
class ServicePriceRangeSchema(BaseSchema):
|
|
id: int | None
|
|
from_quantity: int
|
|
to_quantity: int
|
|
price: float
|
|
|
|
|
|
class CreateServiceSchema(BaseSchema):
|
|
name: str
|
|
category: ServiceCategorySchema
|
|
category_id: Optional[int] = None
|
|
price: float
|
|
service_type: int
|
|
price_ranges: list[ServicePriceRangeSchema]
|
|
cost: Optional[float]
|
|
lexorank: str
|
|
|
|
@field_validator("category_id", mode="before")
|
|
@classmethod
|
|
def set_category_id(cls, v, info):
|
|
if v is None and "category" in info.data:
|
|
return info.data["category"].id
|
|
return v
|
|
|
|
|
|
class ServiceSchema(CreateServiceSchema):
|
|
id: int
|
|
|
|
|
|
class UpdateServiceSchema(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
|