120 lines
3.0 KiB
Python
120 lines
3.0 KiB
Python
from pydantic import BaseModel, Field
|
|
|
|
|
|
class TicketCreateRequest(BaseModel):
|
|
workspace_code: str = Field(default="", max_length=50)
|
|
requester_id: str = Field(..., min_length=1, max_length=100)
|
|
requester_tenant_id: str = Field(..., min_length=1, max_length=100)
|
|
requester_contact: str | None = Field(default=None, max_length=100)
|
|
title: str = Field(..., min_length=1, max_length=255)
|
|
description: str = Field(..., min_length=1)
|
|
category_code: str | None = Field(default=None, max_length=20)
|
|
ticket_type: str = Field(default="GENERAL")
|
|
requires_approval: bool = False
|
|
extra_fields: dict[str, str] = Field(default_factory=dict)
|
|
|
|
|
|
class TicketCreateResponse(BaseModel):
|
|
ticket_id: int
|
|
workspace_code: str
|
|
status_code: str
|
|
sync_status: str
|
|
message: str
|
|
|
|
|
|
class WorkspaceSummary(BaseModel):
|
|
workspace_code: str
|
|
workspace_name: str
|
|
workspace_type: str
|
|
|
|
|
|
class WorkspaceFormField(BaseModel):
|
|
field_code: str
|
|
label: str
|
|
field_type: str
|
|
required: bool = False
|
|
|
|
|
|
class WorkspaceFormTemplateResponse(BaseModel):
|
|
workspace_code: str
|
|
workspace_name: str
|
|
requires_approval: bool
|
|
fields: list[WorkspaceFormField]
|
|
|
|
|
|
class SupportActivityItem(BaseModel):
|
|
id: str
|
|
label: str
|
|
detail: str
|
|
timestamp: str
|
|
|
|
|
|
class SupportAttachmentRecord(BaseModel):
|
|
attachment_id: int
|
|
original_file_name: str
|
|
mime_type: str | None = None
|
|
file_size: int | None = None
|
|
created_at: str
|
|
|
|
|
|
class TicketCommentCreateRequest(BaseModel):
|
|
requester_id: str = Field(..., min_length=1, max_length=100)
|
|
requester_tenant_id: str = Field(..., min_length=1, max_length=100)
|
|
author_name: str | None = Field(default=None, max_length=100)
|
|
content: str = Field(..., min_length=1)
|
|
is_internal: bool = False
|
|
|
|
|
|
class TicketCommentUpdateRequest(BaseModel):
|
|
requester_id: str = Field(..., min_length=1, max_length=100)
|
|
requester_tenant_id: str = Field(..., min_length=1, max_length=100)
|
|
content: str = Field(..., min_length=1)
|
|
|
|
|
|
class TicketIssueLinkStatusSyncRequest(BaseModel):
|
|
linked: bool
|
|
|
|
|
|
class SupportTicketCommentRecord(BaseModel):
|
|
comment_id: int
|
|
ticket_id: int
|
|
author_id: str
|
|
author_tenant_id: str
|
|
author_name: str
|
|
content: str
|
|
is_internal: bool
|
|
created_at: str
|
|
updated_at: str
|
|
edited_at: str | None
|
|
|
|
|
|
class SupportTicketRecord(BaseModel):
|
|
ticket_id: int
|
|
workspace_code: str
|
|
workspace_name: str
|
|
title: str
|
|
description: str
|
|
requester_id: str
|
|
requester_tenant_id: str
|
|
requester_contact: str
|
|
category_code: str
|
|
ticket_type: str
|
|
requires_approval: bool
|
|
status_code: str
|
|
approval_status: str
|
|
sync_status: str
|
|
issue_link_status: str
|
|
created_at: str
|
|
updated_at: str
|
|
extra_fields: dict[str, str]
|
|
attachments: list[SupportAttachmentRecord] = Field(default_factory=list)
|
|
activity: list[SupportActivityItem]
|
|
|
|
|
|
class TicketMutationResponse(BaseModel):
|
|
ticket_id: int
|
|
status_code: str
|
|
approval_status: str
|
|
issue_link_status: str
|
|
updated_at: str
|