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

98 lines
2.7 KiB
Python
Raw 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