feat: attributes in cards and projects
This commit is contained in:
@@ -4,7 +4,7 @@ from typing import Optional
|
||||
|
||||
from pydantic import field_validator
|
||||
|
||||
from schemas.base import BaseSchema
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
|
||||
|
||||
# region Entities
|
||||
@@ -16,17 +16,25 @@ class AttributeTypeSchema(BaseSchema):
|
||||
is_deleted: bool
|
||||
|
||||
|
||||
class AttributeSchema(BaseSchema):
|
||||
id: int
|
||||
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
|
||||
|
||||
|
||||
@@ -41,3 +49,37 @@ class CardAttributeSchema(BaseSchema):
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
@@ -116,6 +116,7 @@ class CardGeneralInfoSchema(BaseSchemaWithAttributes):
|
||||
board_id: int
|
||||
status_id: int
|
||||
is_services_profit_accounted: bool
|
||||
client_id: Optional[int]
|
||||
|
||||
|
||||
class OptionalShippingWarehouseSchema(BaseShippingWarehouseSchema):
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
from schemas.base import BaseSchema
|
||||
|
||||
|
||||
# region Entities
|
||||
|
||||
class ModuleSchema(BaseSchema):
|
||||
id: int
|
||||
key: str
|
||||
is_deleted: bool
|
||||
|
||||
# endregion
|
||||
@@ -1,6 +1,5 @@
|
||||
from schemas.attribute import AttributeSchema
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
from schemas.module import ModuleSchema
|
||||
|
||||
|
||||
# region Entities
|
||||
@@ -10,6 +9,13 @@ class BaseProjectSchema(BaseSchema):
|
||||
name: str
|
||||
|
||||
|
||||
class ModuleSchema(BaseSchema):
|
||||
id: int
|
||||
key: str
|
||||
label: str
|
||||
is_deleted: bool
|
||||
|
||||
|
||||
class ProjectSchema(BaseProjectSchema):
|
||||
id: int
|
||||
attributes: list[AttributeSchema]
|
||||
@@ -32,6 +38,16 @@ class UpdateProjectRequest(BaseSchema):
|
||||
project: ProjectSchema
|
||||
|
||||
|
||||
class UpdateModulesRequest(BaseSchema):
|
||||
project_id: int
|
||||
module_ids: list[int]
|
||||
|
||||
|
||||
class UpdateAttributesRequest(BaseSchema):
|
||||
project_id: int
|
||||
attribute_ids: list[int]
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
|
||||
@@ -52,4 +68,16 @@ class UpdateProjectResponse(OkMessageSchema):
|
||||
class DeleteProjectResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class GetAllModulesResponse(BaseSchema):
|
||||
modules: list[ModuleSchema]
|
||||
|
||||
|
||||
class UpdateModulesResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateAttributesResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
# endregion
|
||||
|
||||
Reference in New Issue
Block a user