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_highlight_if_expired: 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