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