from typing import Optional from schemas.attribute import AttributeSchema from schemas.base import BaseSchema, OkMessageSchema from schemas.card_tag import CardTagSchema # region Entities class BaseProjectSchema(BaseSchema): name: str class ProjectGeneralInfoSchema(BaseProjectSchema): id: int class ModuleSchema(BaseSchema): id: int key: str label: str icon_name: Optional[str] = None is_deleted: bool class ProjectSchema(ProjectGeneralInfoSchema): attributes: list[AttributeSchema] modules: list[ModuleSchema] tags: list[CardTagSchema] class FullProjectSchema(ProjectSchema): boards_count: int # endregion # region Requests class CreateProjectRequest(BaseSchema): project: BaseProjectSchema class UpdateProjectRequest(BaseSchema): project: ProjectGeneralInfoSchema class UpdateModulesRequest(BaseSchema): project_id: int module_ids: list[int] class UpdateAttributesRequest(BaseSchema): project_id: int attribute_ids: list[int] # endregion # region Responses class GetProjectsResponse(BaseSchema): projects: list[FullProjectSchema] class CreateProjectResponse(OkMessageSchema): pass class UpdateProjectResponse(OkMessageSchema): pass class DeleteProjectResponse(OkMessageSchema): pass class GetAllModulesResponse(BaseSchema): modules: list[ModuleSchema] class UpdateModulesResponse(OkMessageSchema): pass class UpdateAttributesResponse(OkMessageSchema): pass # endregion