from typing import Optional, Any from schemas.base import BaseSchema, BaseResponse # region Entity class AttributeTypeSchema(BaseSchema): id: int type: str name: str class CreateAttributeSchema(BaseSchema): label: str is_applicable_to_group: bool is_shown_on_dashboard: bool is_highlight_if_expired: bool is_nullable: bool default_value: Optional[dict[str, Any]] description: str type_id: int class AttributeSchema(CreateAttributeSchema): id: int is_built_in: bool type: AttributeTypeSchema class UpdateAttributeSchema(BaseSchema): label: Optional[str] = None is_applicable_to_group: Optional[bool] = None is_shown_on_dashboard: Optional[bool] = None is_highlight_if_expired: Optional[bool] = None is_nullable: Optional[bool] = None default_value: Optional[dict[str, Any]] = None description: Optional[str] = None type: Optional[AttributeTypeSchema] = None class ModuleAttributeSchema(AttributeSchema): original_label: str class DealModuleAttributeSchema(BaseSchema): attribute_id: int label: str original_label: str value: Optional[dict[str, Any]] type: AttributeTypeSchema default_value: dict[str, Any] description: str is_applicable_to_group: bool is_shown_on_dashboard: bool is_highlight_if_expired: bool is_nullable: bool class UpdateDealModuleAttributeSchema(BaseSchema): attribute_id: int value: Optional[dict[str, Any]] # endregion # region Request class CreateAttributeRequest(BaseSchema): entity: CreateAttributeSchema class UpdateAttributeRequest(BaseSchema): entity: UpdateAttributeSchema class UpdateAttributeLabelRequest(BaseSchema): module_id: int attribute_id: int label: str class UpdateDealModuleAttributesRequest(BaseSchema): attributes: list[UpdateDealModuleAttributeSchema] # endregion # region Response class GetAllAttributesResponse(BaseSchema): items: list[AttributeSchema] class CreateAttributeResponse(BaseResponse): pass class UpdateAttributeResponse(BaseResponse): pass class DeleteAttributeResponse(BaseResponse): pass class UpdateAttributeLabelResponse(BaseResponse): pass class GetAllAttributeTypesResponse(BaseSchema): items: list[AttributeTypeSchema] class GetDealModuleAttributesResponse(BaseSchema): attributes: list[DealModuleAttributeSchema] class UpdateDealModuleAttributesResponse(BaseResponse): pass # endregion