feat: вфыв

This commit is contained in:
2024-07-20 09:32:22 +03:00
parent e7235021f9
commit 6b09251141
27 changed files with 536 additions and 119 deletions

View File

@@ -1,4 +1,4 @@
from schemas.base import CustomModelCamel, CustomModelSnake
from schemas.base import BaseSchema, CustomModelSnake
class AuthLoginRequest(CustomModelSnake):
@@ -9,5 +9,5 @@ class AuthLoginRequest(CustomModelSnake):
photo_url: str
class AuthLoginResponse(CustomModelCamel):
class AuthLoginResponse(BaseSchema):
access_token: str

View File

@@ -1,16 +1,16 @@
from typing import List
from schemas.base import CustomModelCamel, OkMessageSchema
from schemas.base import BaseSchema, OkMessageSchema
# region Entities
class BarcodeTemplateAttributeSchema(CustomModelCamel):
class BarcodeTemplateAttributeSchema(BaseSchema):
id: int
key: str
name: str
class BarcodeTemplateSizeSchema(CustomModelCamel):
class BarcodeTemplateSizeSchema(BaseSchema):
id: int
name: str
key: str
@@ -18,12 +18,12 @@ class BarcodeTemplateSizeSchema(CustomModelCamel):
height: int
class BarcodeTemplateAdditionalAttributeSchema(CustomModelCamel):
class BarcodeTemplateAdditionalAttributeSchema(BaseSchema):
name: str
value: str
class BaseBarcodeTemplateSchema(CustomModelCamel):
class BaseBarcodeTemplateSchema(BaseSchema):
name: str
is_default: bool
size: BarcodeTemplateSizeSchema
@@ -36,12 +36,12 @@ class BarcodeTemplateSchema(BaseBarcodeTemplateSchema):
attributes: list[BarcodeTemplateAttributeSchema]
class BarcodeAttributeSchema(CustomModelCamel):
class BarcodeAttributeSchema(BaseSchema):
name: str
value: str
class BarcodeSchema(CustomModelCamel):
class BarcodeSchema(BaseSchema):
barcode: str
attributes: List[BarcodeAttributeSchema]
additional_field: str | None = None
@@ -50,7 +50,7 @@ class BarcodeSchema(CustomModelCamel):
# endregion
# region Requests
class GetBarcodeTemplateByIdRequest(CustomModelCamel):
class GetBarcodeTemplateByIdRequest(BaseSchema):
id: int
@@ -62,16 +62,16 @@ class BarcodeTemplateUpdateResponse(OkMessageSchema):
pass
class CreateBarcodeTemplateAttributeRequest(CustomModelCamel):
class CreateBarcodeTemplateAttributeRequest(BaseSchema):
name: str
label: str
class BarcodeTemplateDeleteRequest(CustomModelCamel):
class BarcodeTemplateDeleteRequest(BaseSchema):
id: int
class GetProductBarcodeRequest(CustomModelCamel):
class GetProductBarcodeRequest(BaseSchema):
product_id: int
barcode: str
barcode_template_id: int | None = None
@@ -84,7 +84,7 @@ class GetProductBarcodePdfRequest(GetProductBarcodeRequest):
# endregion
# region Responses
class GetBarcodeTemplateByIdResponse(CustomModelCamel):
class GetBarcodeTemplateByIdResponse(BaseSchema):
barcode_template: BarcodeTemplateSchema
@@ -101,11 +101,11 @@ class CreateBarcodeTemplateAttributeResponse(OkMessageSchema):
id: int
class GetAllBarcodeTemplatesResponse(CustomModelCamel):
class GetAllBarcodeTemplatesResponse(BaseSchema):
templates: list[BarcodeTemplateSchema]
class GetAllBarcodeTemplateAttributesResponse(CustomModelCamel):
class GetAllBarcodeTemplateAttributesResponse(BaseSchema):
attributes: list[BarcodeTemplateAttributeSchema]
@@ -113,15 +113,15 @@ class BarcodeTemplateDeleteResponse(OkMessageSchema):
pass
class GetProductBarcodeResponse(CustomModelCamel):
class GetProductBarcodeResponse(BaseSchema):
barcode: BarcodeSchema
class GetAllBarcodeTemplateSizesResponse(CustomModelCamel):
class GetAllBarcodeTemplateSizesResponse(BaseSchema):
sizes: list[BarcodeTemplateSizeSchema]
class GetProductBarcodePdfResponse(CustomModelCamel):
class GetProductBarcodePdfResponse(BaseSchema):
base64_string: str
filename: str
mime_type: str

View File

@@ -1,3 +1,5 @@
from typing import Self
from pydantic import BaseModel
from pydantic.alias_generators import to_camel
@@ -7,44 +9,52 @@ class CustomConfig:
from_attributes = True
class CustomModelCamel(BaseModel):
class BaseSchema(BaseModel):
class Config:
from_attributes = True
alias_generator = to_camel
populate_by_name = True
@classmethod
def from_sql_model(cls, model, fields: dict):
model_dict = {c.name: getattr(model, c.name) for c in model.__table__.columns}
model_dict.update(fields)
return cls(**model_dict)
def model_dump_parent(self):
parent_class: BaseModel = self.__class__.__bases__[0]
parent_fields = set(parent_class.model_fields.keys())
return self.model_dump(include=parent_fields)
@classmethod
def from_orm_list(cls, sql_models) -> list[Self]:
return [cls.model_validate(model) for model in sql_models]
class CustomModelSnake(BaseModel):
class Config:
from_attributes = True
class OkMessageSchema(CustomModelCamel):
class OkMessageSchema(BaseSchema):
ok: bool
message: str
class PaginationSchema(CustomModelCamel):
class PaginationSchema(BaseSchema):
page: int | None = None
items_per_page: int | None = None
class PaginationInfoSchema(CustomModelCamel):
class PaginationInfoSchema(BaseSchema):
total_pages: int
total_items: int
class BaseEnumSchema(CustomModelCamel):
class BaseEnumSchema(BaseSchema):
id: int
name: str
class BaseEnumListSchema(CustomModelCamel):
class BaseEnumListSchema(BaseSchema):
items: list[BaseEnumSchema]

View File

@@ -3,11 +3,11 @@ from typing import List
from pydantic import field_validator
from schemas.barcode import BarcodeTemplateSchema
from schemas.base import CustomModelCamel, OkMessageSchema
from schemas.base import BaseSchema, OkMessageSchema
# region Entities
class ClientDetailsSchema(CustomModelCamel):
class ClientDetailsSchema(BaseSchema):
telegram: str | None = None
phone_number: str | None = None
inn: str | None = None
@@ -18,7 +18,7 @@ class ClientDetailsSchema(CustomModelCamel):
return '' if v is None else v
class ClientSchema(CustomModelCamel):
class ClientSchema(BaseSchema):
id: int
name: str
company_name: str
@@ -29,39 +29,39 @@ class ClientSchema(CustomModelCamel):
# endregion
# region Requests
class ClientSearchRequest(CustomModelCamel):
class ClientSearchRequest(BaseSchema):
name: str
class ClientUpdateDetailsRequest(CustomModelCamel):
class ClientUpdateDetailsRequest(BaseSchema):
client_id: int
details: ClientDetailsSchema
class ClientCreateRequest(CustomModelCamel):
class ClientCreateRequest(BaseSchema):
data: ClientSchema
class ClientUpdateRequest(CustomModelCamel):
class ClientUpdateRequest(BaseSchema):
data: ClientSchema
class ClientDeleteRequest(CustomModelCamel):
class ClientDeleteRequest(BaseSchema):
client_id: int
# endregion
# region Responses
class ClientSearchResponse(CustomModelCamel):
class ClientSearchResponse(BaseSchema):
clients: List[ClientSchema]
class ClientUpdateDetailsResponse(CustomModelCamel):
class ClientUpdateDetailsResponse(BaseSchema):
ok: bool
class ClientGetAllResponse(CustomModelCamel):
class ClientGetAllResponse(BaseSchema):
clients: List[ClientSchema]

View File

@@ -1,9 +1,9 @@
import datetime
from typing import List, Optional
from typing import List, Optional, Union
from pydantic import constr
from pydantic import constr, field_validator
from schemas.base import CustomModelCamel, OkMessageSchema
from schemas.base import BaseSchema, OkMessageSchema
from schemas.client import ClientSchema
from schemas.product import ProductSchema
from schemas.service import ServiceSchema
@@ -12,14 +12,14 @@ from schemas.user import UserSchema
# region Entities
class FastDeal(CustomModelCamel):
class FastDeal(BaseSchema):
name: str
client: ClientSchema
comment: str
acceptance_date: datetime.datetime
class DealSummary(CustomModelCamel):
class DealSummary(BaseSchema):
id: int
name: str
client_name: str
@@ -30,24 +30,24 @@ class DealSummary(CustomModelCamel):
rank: int
class DealServiceSchema(CustomModelCamel):
class DealServiceSchema(BaseSchema):
service: ServiceSchema
quantity: int
price: int
class DealProductServiceSchema(CustomModelCamel):
class DealProductServiceSchema(BaseSchema):
service: ServiceSchema
price: int
class DealProductSchema(CustomModelCamel):
class DealProductSchema(BaseSchema):
product: ProductSchema
services: List[DealProductServiceSchema]
quantity: int
class DealStatusHistorySchema(CustomModelCamel):
class DealStatusHistorySchema(BaseSchema):
user: UserSchema
changed_at: datetime.datetime
from_status: int
@@ -56,7 +56,7 @@ class DealStatusHistorySchema(CustomModelCamel):
comment: str | None = None
class DealSchema(CustomModelCamel):
class DealSchema(BaseSchema):
id: int
name: str
client_id: int
@@ -69,29 +69,30 @@ class DealSchema(CustomModelCamel):
is_completed: bool
client: ClientSchema
comment: str
shipping_warehouse: Optional[ShippingWarehouseSchema] = None
shipping_warehouse: Optional[Union[ShippingWarehouseSchema, str]] = None
class DealGeneralInfoSchema(CustomModelCamel):
class DealGeneralInfoSchema(BaseSchema):
name: str
is_deleted: bool
is_completed: bool
comment: str
shipping_warehouse: Optional[str] = None
# endregion Entities
# region Requests
class DealChangeStatusRequest(CustomModelCamel):
class DealChangeStatusRequest(BaseSchema):
deal_id: int
new_status: int
class DealCreateRequest(CustomModelCamel):
class DealCreateRequest(BaseSchema):
name: str
class DealQuickCreateRequest(CustomModelCamel):
class DealQuickCreateRequest(BaseSchema):
name: constr(strip_whitespace=True)
client_name: constr(strip_whitespace=True)
comment: str
@@ -99,70 +100,70 @@ class DealQuickCreateRequest(CustomModelCamel):
shipping_warehouse: constr(strip_whitespace=True)
class DealSummaryRequest(CustomModelCamel):
class DealSummaryRequest(BaseSchema):
pass
class DealAddServicesRequest(CustomModelCamel):
class DealAddServicesRequest(BaseSchema):
deal_id: int
services: list[DealServiceSchema]
class DealUpdateServiceQuantityRequest(CustomModelCamel):
class DealUpdateServiceQuantityRequest(BaseSchema):
deal_id: int
service_id: int
quantity: int
class DealUpdateServiceRequest(CustomModelCamel):
class DealUpdateServiceRequest(BaseSchema):
deal_id: int
service: DealServiceSchema
class DealAddServiceRequest(CustomModelCamel):
class DealAddServiceRequest(BaseSchema):
deal_id: int
service_id: int
quantity: int
price: int
class DealDeleteServiceRequest(CustomModelCamel):
class DealDeleteServiceRequest(BaseSchema):
deal_id: int
service_id: int
class DealDeleteServicesRequest(CustomModelCamel):
class DealDeleteServicesRequest(BaseSchema):
deal_id: int
service_ids: List[int]
class DealUpdateProductQuantityRequest(CustomModelCamel):
class DealUpdateProductQuantityRequest(BaseSchema):
deal_id: int
product_id: int
quantity: int
class DealAddProductRequest(CustomModelCamel):
class DealAddProductRequest(BaseSchema):
deal_id: int
product: DealProductSchema
class DealDeleteProductRequest(CustomModelCamel):
class DealDeleteProductRequest(BaseSchema):
deal_id: int
product_id: int
class DealDeleteProductsRequest(CustomModelCamel):
class DealDeleteProductsRequest(BaseSchema):
deal_id: int
product_ids: List[int]
class DealUpdateGeneralInfoRequest(CustomModelCamel):
class DealUpdateGeneralInfoRequest(BaseSchema):
deal_id: int
data: DealGeneralInfoSchema
class DealSummaryReorderRequest(CustomModelCamel):
class DealSummaryReorderRequest(BaseSchema):
deal_id: int
status: int
index: int
@@ -170,11 +171,11 @@ class DealSummaryReorderRequest(CustomModelCamel):
comment: str | None = None
class DealDeleteRequest(CustomModelCamel):
class DealDeleteRequest(BaseSchema):
deal_id: int
class DealUpdateProductRequest(CustomModelCamel):
class DealUpdateProductRequest(BaseSchema):
deal_id: int
product: DealProductSchema
@@ -190,32 +191,32 @@ class DealDeleteServicesResponse(OkMessageSchema):
pass
class DealGetAllResponse(CustomModelCamel):
class DealGetAllResponse(BaseSchema):
deals: List[DealSchema]
class DealChangeStatusResponse(CustomModelCamel):
class DealChangeStatusResponse(BaseSchema):
ok: bool
class DealCreateResponse(CustomModelCamel):
class DealCreateResponse(BaseSchema):
ok: bool
class DealQuickCreateResponse(CustomModelCamel):
class DealQuickCreateResponse(BaseSchema):
deal_id: int
class DealSummaryResponse(CustomModelCamel):
class DealSummaryResponse(BaseSchema):
summaries: List[DealSummary]
class DealAddServicesResponse(CustomModelCamel):
class DealAddServicesResponse(BaseSchema):
ok: bool
message: str
class DealUpdateServiceQuantityResponse(CustomModelCamel):
class DealUpdateServiceQuantityResponse(BaseSchema):
ok: bool
message: str

20
schemas/position.py Normal file
View File

@@ -0,0 +1,20 @@
from typing import List
from schemas.base import BaseSchema, OkMessageSchema
class PositionSchema(BaseSchema):
name: str
key: str
class CreatePositionRequest(BaseSchema):
data: PositionSchema
class GetAllPositionsResponse(BaseSchema):
positions: List[PositionSchema]
class CreatePositionResponse(OkMessageSchema):
pass

View File

@@ -1,18 +1,18 @@
from typing import List
from schemas.barcode import BarcodeTemplateSchema
from schemas.base import CustomModelCamel, PaginationInfoSchema, OkMessageSchema
from schemas.base import BaseSchema, PaginationInfoSchema, OkMessageSchema
from pydantic import field_validator, model_validator
from models import ProductBarcode
# region Entities
class ProductImageSchema(CustomModelCamel):
class ProductImageSchema(BaseSchema):
id: int
product_id: int
image_url: str
class BaseProductSchema(CustomModelCamel):
class BaseProductSchema(BaseSchema):
name: str
article: str | None = ''
client_id: int
@@ -55,25 +55,25 @@ class ProductCreateRequest(BaseProductSchema):
pass
class ProductDeleteRequest(CustomModelCamel):
class ProductDeleteRequest(BaseSchema):
product_id: int
class ProductUpdateRequest(CustomModelCamel):
class ProductUpdateRequest(BaseSchema):
product: ProductSchema
class ProductAddBarcodeRequest(CustomModelCamel):
class ProductAddBarcodeRequest(BaseSchema):
product_id: int
barcode: str
class ProductDeleteBarcodeRequest(CustomModelCamel):
class ProductDeleteBarcodeRequest(BaseSchema):
product_id: int
barcode: str
class ProductGenerateBarcodeRequest(CustomModelCamel):
class ProductGenerateBarcodeRequest(BaseSchema):
product_id: int
@@ -84,7 +84,7 @@ class ProductCreateResponse(OkMessageSchema):
product_id: int | None = None
class ProductGetResponse(CustomModelCamel):
class ProductGetResponse(BaseSchema):
products: List[ProductSchema]
pagination_info: PaginationInfoSchema
@@ -109,7 +109,7 @@ class ProductGenerateBarcodeResponse(OkMessageSchema):
barcode: str
class ProductExistsBarcodeResponse(CustomModelCamel):
class ProductExistsBarcodeResponse(BaseSchema):
exists: bool

26
schemas/role.py Normal file
View File

@@ -0,0 +1,26 @@
from typing import List
from schemas.base import BaseSchema
# region Entities
class PermissionSchema(BaseSchema):
key: str
name: str
class RoleSchema(BaseSchema):
key: str
name: str
permissions: List[PermissionSchema]
# endregion
# region Requests
# endregion
# region Responses
class GetAllRolesResponse(BaseSchema):
roles: List[RoleSchema]
# endregion

View File

@@ -1,22 +1,22 @@
from typing import List, Optional
from schemas.base import CustomModelCamel, OkMessageSchema, BaseEnumSchema
from schemas.base import BaseSchema, OkMessageSchema, BaseEnumSchema
# region Entities
class ServicePriceRangeSchema(CustomModelCamel):
class ServicePriceRangeSchema(BaseSchema):
id: int | None
from_quantity: int
to_quantity: int
price: float
class ServiceCategorySchema(CustomModelCamel):
class ServiceCategorySchema(BaseSchema):
id: int
name: str
class ServiceSchema(CustomModelCamel):
class ServiceSchema(BaseSchema):
id: int
name: str
category: ServiceCategorySchema
@@ -30,19 +30,19 @@ class ServiceSchema(CustomModelCamel):
# region Requests
class ServiceCreateRequest(CustomModelCamel):
class ServiceCreateRequest(BaseSchema):
service: ServiceSchema
class ServiceCreateCategoryRequest(CustomModelCamel):
class ServiceCreateCategoryRequest(BaseSchema):
category: ServiceCategorySchema
class ServiceUpdateRequest(CustomModelCamel):
class ServiceUpdateRequest(BaseSchema):
data: ServiceSchema
class ServiceDeleteRequest(CustomModelCamel):
class ServiceDeleteRequest(BaseSchema):
service_id: int
@@ -50,11 +50,11 @@ class ServiceDeleteRequest(CustomModelCamel):
# region Responses
class ServiceGetAllResponse(CustomModelCamel):
class ServiceGetAllResponse(BaseSchema):
services: List[ServiceSchema]
class ServiceGetAllCategoriesResponse(CustomModelCamel):
class ServiceGetAllCategoriesResponse(BaseSchema):
categories: List[ServiceCategorySchema]

View File

@@ -1,12 +1,12 @@
from typing import List
from schemas.base import CustomModelCamel
from schemas.base import BaseSchema
class ShippingWarehouseSchema(CustomModelCamel):
class ShippingWarehouseSchema(BaseSchema):
id: int
name: str
class GetAllShippingWarehousesResponse(CustomModelCamel):
class GetAllShippingWarehousesResponse(BaseSchema):
shipping_warehouses: List[ShippingWarehouseSchema]

View File

@@ -1,8 +1,50 @@
from schemas.base import CustomModelCamel
from typing import List, Optional
from schemas.base import BaseSchema, OkMessageSchema
from schemas.position import PositionSchema
from schemas.role import RoleSchema
class UserSchema(CustomModelCamel):
# region Entities
class BaseUser(BaseSchema):
id: int
telegram_id: int
phone_number: str | None = None
first_name: str
second_name: str
comment: str
is_admin: bool
is_blocked: bool
is_deleted: bool
class UserSchema(BaseUser):
role_key: str
role: RoleSchema
position: Optional[PositionSchema] = None
class UserUpdate(BaseUser):
position_key: Optional[str] = None
# endregion
# region Requests
class UpdateUserRequest(BaseSchema):
data: UserUpdate
# endregion
# region Responses
class GetAllUsersResponse(BaseSchema):
users: List[UserSchema]
class UpdateUserResponse(OkMessageSchema):
pass
# endregion