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
 |