87 lines
1.7 KiB
Python
87 lines
1.7 KiB
Python
import pickle
|
|
from datetime import datetime, date
|
|
from typing import Optional
|
|
|
|
from pydantic import field_validator
|
|
|
|
from schemas.base import BaseSchema, OkMessageSchema
|
|
|
|
|
|
# region Entities
|
|
|
|
class AttributeTypeSchema(BaseSchema):
|
|
id: int
|
|
type: str
|
|
name: str
|
|
is_deleted: bool
|
|
|
|
|
|
class BaseAttributeSchema(BaseSchema):
|
|
label: str
|
|
name: str
|
|
is_applicable_to_group: bool
|
|
is_shown_on_dashboard: bool
|
|
is_nullable: bool
|
|
default_value: Optional[bool | int | float | str | date | datetime]
|
|
type_id: int
|
|
description: str
|
|
|
|
|
|
class AttributeSchema(BaseAttributeSchema):
|
|
id: int
|
|
type: AttributeTypeSchema
|
|
is_deleted: bool
|
|
|
|
@field_validator("default_value", mode="before")
|
|
def validate_default_value(cls, value: Optional[bytes]):
|
|
if not isinstance(value, bytes):
|
|
return value
|
|
return pickle.loads(value) if value else None
|
|
|
|
|
|
class CardAttributeSchema(BaseSchema):
|
|
value: Optional[bool | int | float | str | date | datetime]
|
|
card_id: int
|
|
attribute: AttributeSchema
|
|
|
|
@field_validator("value", mode="before")
|
|
def validate_value(cls, value: Optional[bytes]):
|
|
return pickle.loads(value) if value else None
|
|
|
|
|
|
# endregion
|
|
|
|
# region Requests
|
|
|
|
class CreateAttributeRequest(BaseSchema):
|
|
attribute: BaseAttributeSchema
|
|
|
|
|
|
class UpdateAttributeRequest(BaseSchema):
|
|
attribute: AttributeSchema
|
|
|
|
# endregion
|
|
|
|
# region Responses
|
|
|
|
class GetAttributesResponse(BaseSchema):
|
|
attributes: list[AttributeSchema]
|
|
|
|
|
|
class GetAttributeTypesResponse(BaseSchema):
|
|
types: list[AttributeTypeSchema]
|
|
|
|
|
|
class CreateAttributeResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class UpdateAttributeResponse(OkMessageSchema):
|
|
pass
|
|
|
|
|
|
class DeleteAttributeResponse(OkMessageSchema):
|
|
pass
|
|
|
|
# endregion
|