Files
Fulfillment-Backend/schemas/attribute.py

86 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_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