Skip to content

Domain Model

Tất cả schema Drizzle nằm trong @nx/core dưới packages/core/src/models/schemas/helpdesk/ (30 thư mục bảng). Helpdesk chỉ khai báo lớp repository. Schema PostgreSQL helpdesk được định nghĩa bởi PostgresSchemas.HELPDESK = 'helpdesk'.

1. ERD đầy đủ

2. Thực thể

Một block cho mỗi bảng chính. Gốc nguồn schema: packages/core/src/models/schemas/helpdesk/. Cột chung (id, createdAt, updatedAt, deletedAt, metadata) đến từ generateCommonColumnDefs().

Ticket

Thuộc tínhGiá trị
Bảnghelpdesk.Ticket
Nguồnhelpdesk/ticket/schema.ts
Soft-delete
Cột Owner IDmerchantId (+ organizerId)

Trường:

TrườngTypeBắt buộcMặc địnhMô tả
idtextSnowflakePK
organizerIdtextPhạm vi organizer
merchantIdtextPhạm vi tenant
reporterIdtextAi mở ticket
reporterTypetext (TActorTypes)USERUSER / AGENT / SYSTEM
categorytextRef TicketCategory (soft ref)
priorityinteger (TTicketPriorities)MEDIUMLOW/MEDIUM/HIGH/URGENT/CRITICAL
statustext (TTicketStatuses)OPENXem enum bên dưới
subjecti18n jsonb{ en, vi }
descriptioni18n jsonb{ en, vi }
contextjsonb{}Context order/product được enrich
assignedToAgentIdtextAgent hiện tại
assignedToUserIdtextUser id của agent
assignedAttimestamptz
resolvedAt / resolvedBy / resolutionNotetimestamptz / text / i18nDữ liệu giải quyết
closedAt / closedBytimestamptz / textDữ liệu đóng
sessionIdtextSession khởi tạo
metadatajsonb{}Cờ linh tinh (ví dụ categorySkills, tagIds)

Enum Status (TicketStatuses):

Giá trịMô tả
OPENMới, chưa được phân công
ASSIGNEDĐã phân công cho một agent
IN_PROGRESSĐang được xử lý
WAITING_USERChờ người báo cáo trả lời
WAITING_AGENTChờ một agent
WAITING_INTERNALChờ một team khác
PENDINGGiữ chỗ / chưa phân loại
ASSIGNMENT_FAILEDAuto-assign không tìm thấy agent
ESCALATEDEscalate lên tier cao hơn
RESOLVEDAgent đã giải quyết, chờ xác nhận
CLOSEDXác nhận hoàn thành
REOPENEDMở lại sau khi giải quyết/đóng

Tập helper: ACTIVE_SET = {OPEN, IN_PROGRESS, REOPENED}, RESOLVED_SET = {RESOLVED, CLOSED}.

Indexes: IDX_Ticket_merchant_status_created_at, IDX_Ticket_assigned_to_status, IDX_Ticket_reporter_created_at, IDX_Ticket_category_priority_status, IDX_Ticket_status, IDX_Ticket_priority, IDX_Ticket_created_at.

TicketMessage

Thuộc tínhGiá trị
Bảnghelpdesk.TicketMessage
Nguồnhelpdesk/ticket-message/schema.ts
Soft-delete
TrườngTypeBắt buộcMặc địnhMô tả
ticketIdtextTicket cha
authorId (col sender_id)textTác giả
authorType (col sender_type)text (TActorTypes)USER/AGENT/SYSTEM
type (col message_type)text (TTicketMessageTypes)Xem enum
contenti18n jsonbNội dung { en, vi }
isInternalbooleanfalseẨn khỏi người báo cáo
attachmentIdstext[]{}Ref attachment

Loại message (TicketMessageTypes): COMMENT, USER_REPLY, AGENT_REPLY, INTERNAL_NOTE, SYSTEM_MESSAGE, AUTO_REPLY.

TicketEvent (audit / event sourcing)

Thuộc tínhGiá trị
Bảnghelpdesk.TicketEvent
Nguồnhelpdesk/ticket-event/schema.ts
TrườngTypeBắt buộcMô tả
ticketIdtextCha
eventTypetext (TTicketEventTypes)Xem enum
actorId / actorTypetextAi thực hiện
oldValue / newValuetextDiff status/value
changesjsonbDiff có cấu trúc
reasontextLý do tùy chọn

Loại event (TicketEventTypes, giá trị chuỗi có dấu chấm, ví dụ ticket.created): TICKET_CREATED, TICKET_UPDATED, TICKET_ASSIGNED, TICKET_ASSIGNMENT_FAILED, TICKET_REASSIGNED, TICKET_STATUS_CHANGED, TICKET_PRIORITY_CHANGED, TICKET_RESOLVED, TICKET_CLOSED, TICKET_REOPENED, TICKET_ESCALATED, MESSAGE_CREATED, MESSAGE_UPDATED, SLA_WARNING, SLA_BREACHED, SLA_CRITICAL_BREACH.

SlaPolicy

Thuộc tínhGiá trị
Bảnghelpdesk.SlaPolicy
Nguồnhelpdesk/sla-policy/schema.ts
Soft-delete

Deadline response/resolution theo từng priority, ngưỡng cảnh báo, rule escalation, và cờ business-hours. Mặc định: xem SLA & Escalation.

SlaTracker

Thuộc tínhGiá trị
Bảnghelpdesk.SlaTracker
Nguồnhelpdesk/sla-tracker/schema.ts
Cardinality1:1 theo ticket (UQ_SlaTracker_ticket_id)
TrườngTypeBắt buộcMặc địnhMô tả
ticketIdtextTicket (unique)
policyId (col sla_policy_id)textSlaPolicy
priorityinteger200Snapshot priority
firstResponseDeadlinetimestamptzDeadline response
resolutionDeadlinetimestamptzDeadline resolution
firstResponseAt / resolvedAttimestamptzThực tế
firstResponseStatustext (TSlaStatuses)OKOK/WARNING/BREACHED
resolutionStatustext (TSlaStatuses)OKOK/WARNING/BREACHED
timeToFirstResponse / timeToResolutionintegerPhút
breachedAt / breachMinutes / breachReasontimestamptz / integer / text0Theo dõi vi phạm
escalationLevelinteger0Level escalation hiện tại
warningsSentjsonb[][]Cảnh báo đã gửi
lastCheckedAttimestamptzLần monitor cuối

Enum status SLA (SlaStatuses): OK, WARNING, BREACHED.

SlaEscalation

Thuộc tínhGiá trị
Bảnghelpdesk.SlaEscalation
Nguồnhelpdesk/sla-escalation/schema.ts
TrườngTypeBắt buộcMô tả
ticketIdtextTicket
escalationTypetext (TSlaEscalationTypes)SLA_BREACH / MANUAL / CUSTOMER_REQUEST / HIGH_IMPACT / INCIDENT_REPORT
escalationLevelsmallint (TSlaEscalationLevel)1 / 2 / 3
previousPriority / newPrioritysmallintThay đổi priority
escalatedBy / escalatedByIdtext✓ / —Actor
reasontextVì sao
actionsjsonb[]Hành động đã thực hiện
escalatedAt / resolvedAttimestamptz✓ / —Mốc thời gian

Thực thể hỗ trợ

BảngNguồnMục đích
TicketAssignmenthelpdesk/ticket-assignment/Lịch sử phân công theo ticket
TicketCategoryhelpdesk/ticket-category/Category với số đếm ticket
TicketTag / TicketTagMappinghelpdesk/ticket-tag*/Tag + ánh xạ M:N, số đếm sử dụng
Agent / AgentGroup / AgentGroupMemberhelpdesk/agent*/Agent, group, thành viên
AssignmentRulehelpdesk/assignment-rule/Rule routing → group/agent
Article / ArticleCategory / ArticleView / ArticleFeedbackhelpdesk/article*/Knowledge base
Survey / SurveyQuestion / SurveyResponsehelpdesk/survey*/Khảo sát CSAT
FeatureRequest / FeatureVotehelpdesk/feature-*/Vote feature
Notification / NotificationTemplate / NotificationPreference / NotificationDeliveryLog / NotificationBatchhelpdesk/notification*/Engine thông báo
Compensationhelpdesk/compensation/Bản ghi đền bù vi phạm SLA
JobExecutionLoghelpdesk/job-execution-log/Idempotency / audit worker

3. Bất biến xuyên thực thể

Bất biếnThực thi
Đúng một SlaTracker cho mỗi ticketIndex unique UQ_SlaTracker_ticket_id
Chuyển đổi status ticket theo máy trạng tháiUpdateTicketStatusUseCase (XState)
Mỗi thay đổi status ghi một TicketEventUse-case ghi event trong cùng thao tác
TicketCategory.ticketCount phản ánh ticketsTicketCreatedListener.incrementTicketCount()
TicketTag.usageCount phản ánh ánh xạTicketCreatedListener.incrementUsageCount()
escalationLevel tăng đơn điệuSLA monitor + escalation worker

4. Hành vi Soft-delete

Hành viChi tiết
Đọc mặc địnhdeletedAt IS NULL (qua generateCommonColumnDefs())
Hard-deleteKhông phải mặc định; soft-delete qua timestamp deletedAt
RestoreXóa deletedAt

5. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.