bmc_hub/app/modules/task_templates/backend/models.py

98 lines
2.7 KiB
Python
Raw Permalink Normal View History

"""Pydantic models for task template APIs."""
from datetime import date, datetime
from typing import Literal, Optional
from pydantic import BaseModel, Field
TemplateType = Literal["global", "company", "internal", "deactivated"]
TemplateCategory = Literal[
"onboarding",
"offboarding",
"simkort",
"hardwarebestilling",
"brugerandring",
"andet",
]
TemplateItemType = Literal["task", "subcase"]
RunMode = Literal["tasks", "subcases", "combined"]
AssigneeMode = Literal["template_default", "specific_user", "specific_role"]
class TaskTemplateBase(BaseModel):
name: str = Field(..., min_length=1, max_length=255)
description: Optional[str] = None
template_type: TemplateType = "global"
customer_id: Optional[int] = None
category: TemplateCategory = "andet"
is_active: bool = True
class TaskTemplateCreate(TaskTemplateBase):
pass
class TaskTemplateUpdate(BaseModel):
name: Optional[str] = Field(None, min_length=1, max_length=255)
description: Optional[str] = None
template_type: Optional[TemplateType] = None
customer_id: Optional[int] = None
category: Optional[TemplateCategory] = None
is_active: Optional[bool] = None
class TaskTemplate(TaskTemplateBase):
id: int
created_by: Optional[int] = None
created_at: datetime
updated_at: datetime
class TaskTemplateItemBase(BaseModel):
title: str = Field(..., min_length=1, max_length=255)
description: Optional[str] = None
item_type: TemplateItemType = "task"
default_assignee_user_id: Optional[int] = None
default_assignee_role_id: Optional[int] = None
days_offset: Optional[int] = 0
sort_order: int = 0
is_required: bool = True
is_active: bool = True
class TaskTemplateItemCreate(TaskTemplateItemBase):
pass
class TaskTemplateItemUpdate(BaseModel):
title: Optional[str] = Field(None, min_length=1, max_length=255)
description: Optional[str] = None
item_type: Optional[TemplateItemType] = None
default_assignee_user_id: Optional[int] = None
default_assignee_role_id: Optional[int] = None
days_offset: Optional[int] = None
sort_order: Optional[int] = None
is_required: Optional[bool] = None
is_active: Optional[bool] = None
class TaskTemplateItem(TaskTemplateItemBase):
id: int
template_id: int
created_at: datetime
updated_at: datetime
class TemplatePreviewRequest(BaseModel):
template_id: int
start_date: Optional[date] = None
mode: RunMode = "combined"
assignee_mode: AssigneeMode = "template_default"
assignee_user_id: Optional[int] = None
assignee_role_id: Optional[int] = None
class TemplateRunRequest(TemplatePreviewRequest):
pass