Files
Fulfillment-Backend/schemas/deal.py
2024-07-21 10:56:59 +03:00

268 lines
5.1 KiB
Python

import datetime
from typing import List, Optional, Union
from pydantic import constr, field_validator
from schemas.base import BaseSchema, OkMessageSchema
from schemas.client import ClientSchema
from schemas.marketplace import BaseMarketplaceSchema
from schemas.product import ProductSchema
from schemas.service import ServiceSchema
from schemas.shipping_warehouse import ShippingWarehouseSchema
from schemas.user import UserSchema
# region Entities
class FastDeal(BaseSchema):
name: str
client: ClientSchema
comment: str
acceptance_date: datetime.datetime
class DealSummary(BaseSchema):
id: int
name: str
client_name: str
changed_at: datetime.datetime
deadline: datetime.datetime
status: int
total_price: int
rank: int
base_marketplace: Optional[BaseMarketplaceSchema] = None
class DealServiceSchema(BaseSchema):
service: ServiceSchema
quantity: int
price: int
employees: List[UserSchema]
class DealProductServiceSchema(BaseSchema):
service: ServiceSchema
price: int
employees: List[UserSchema]
class DealProductSchema(BaseSchema):
product: ProductSchema
services: List[DealProductServiceSchema]
quantity: int
class DealStatusHistorySchema(BaseSchema):
user: UserSchema
changed_at: datetime.datetime
from_status: int
to_status: int
next_status_deadline: datetime.datetime | None
comment: str | None = None
class DealSchema(BaseSchema):
id: int
name: str
client_id: int
created_at: datetime.datetime
current_status: int
services: List[DealServiceSchema]
products: List[DealProductSchema]
status_history: List[DealStatusHistorySchema]
is_deleted: bool
is_completed: bool
client: ClientSchema
comment: str
shipping_warehouse: Optional[Union[ShippingWarehouseSchema, str]] = None
class DealGeneralInfoSchema(BaseSchema):
name: str
is_deleted: bool
is_completed: bool
comment: str
shipping_warehouse: Optional[str] = None
# endregion Entities
# region Requests
class DealChangeStatusRequest(BaseSchema):
deal_id: int
new_status: int
class DealCreateRequest(BaseSchema):
name: str
class DealQuickCreateRequest(BaseSchema):
name: constr(strip_whitespace=True)
client_name: constr(strip_whitespace=True)
comment: str
acceptance_date: datetime.datetime
shipping_warehouse: constr(strip_whitespace=True)
base_marketplace: BaseMarketplaceSchema
class DealSummaryRequest(BaseSchema):
pass
class DealAddServicesRequest(BaseSchema):
deal_id: int
services: list[DealServiceSchema]
class DealUpdateServiceQuantityRequest(BaseSchema):
deal_id: int
service_id: int
quantity: int
class DealUpdateServiceRequest(BaseSchema):
deal_id: int
service: DealServiceSchema
class DealAddServiceRequest(BaseSchema):
deal_id: int
service_id: int
quantity: int
price: int
class DealDeleteServiceRequest(BaseSchema):
deal_id: int
service_id: int
class DealDeleteServicesRequest(BaseSchema):
deal_id: int
service_ids: List[int]
class DealUpdateProductQuantityRequest(BaseSchema):
deal_id: int
product_id: int
quantity: int
class DealAddProductRequest(BaseSchema):
deal_id: int
product: DealProductSchema
class DealDeleteProductRequest(BaseSchema):
deal_id: int
product_id: int
class DealDeleteProductsRequest(BaseSchema):
deal_id: int
product_ids: List[int]
class DealUpdateGeneralInfoRequest(BaseSchema):
deal_id: int
data: DealGeneralInfoSchema
class DealSummaryReorderRequest(BaseSchema):
deal_id: int
status: int
index: int
deadline: datetime.datetime | None = None
comment: str | None = None
class DealDeleteRequest(BaseSchema):
deal_id: int
class DealUpdateProductRequest(BaseSchema):
deal_id: int
product: DealProductSchema
# endregion Requests
# region Responses
class DealUpdateProductQuantityResponse(OkMessageSchema):
pass
class DealDeleteServicesResponse(OkMessageSchema):
pass
class DealGetAllResponse(BaseSchema):
deals: List[DealSchema]
class DealChangeStatusResponse(BaseSchema):
ok: bool
class DealCreateResponse(BaseSchema):
ok: bool
class DealQuickCreateResponse(BaseSchema):
deal_id: int
class DealSummaryResponse(BaseSchema):
summaries: List[DealSummary]
class DealAddServicesResponse(BaseSchema):
ok: bool
message: str
class DealUpdateServiceQuantityResponse(BaseSchema):
ok: bool
message: str
class DealUpdateServiceResponse(OkMessageSchema):
pass
class DealAddServiceResponse(OkMessageSchema):
pass
class DealDeleteServiceResponse(OkMessageSchema):
pass
class DealDeleteProductResponse(OkMessageSchema):
pass
class DealDeleteProductsResponse(OkMessageSchema):
pass
class DealAddProductResponse(OkMessageSchema):
pass
class DealUpdateGeneralInfoResponse(OkMessageSchema):
pass
class DealSummaryReorderResponse(OkMessageSchema):
pass
class DealDeleteResponse(OkMessageSchema):
pass
class DealUpdateProductResponse(OkMessageSchema):
pass
# endregion Responses