import { ChannelType } from "../Common/Channels/ChannelType"; import { ITicketAttachment, ITicketContactProjection, ITicketExternalReference, ITicketProperty, ITicketTagInfo, TicketOrigin, TicketPriority, TicketStage } from "./Common"; import { ITicketFormSubmissionReference } from "./Workflow"; import { ITicketSlaState } from "./Sla"; import { ITicketSecurityState } from "./Security"; import { ITicketApprovalSummary } from "./Approval"; import { ITicketTaskSummary } from "./Task"; import { ITicketConversationReference } from "./Conversation"; import { ITicketRoutingState } from "./Routing"; import { ITicketAISummary } from "./AI"; export interface ITicketResolution { resolutionTypeId: string; description?: string; attachmentIds?: string[]; resolvedAt: Date; resolvedBy: string; } export interface ITicket { id: string; spaceId: string; number: number; title: string; description?: string; contactId: string; contact?: ITicketContactProjection; statusId: string; stage: TicketStage; priority: TicketPriority; origin: TicketOrigin; assigneeId?: string; assignedGroupId?: string; routing?: ITicketRoutingState; aiSummary?: ITicketAISummary; dueAt?: Date; tagIds: string[]; tags?: ITicketTagInfo[]; properties: ITicketProperty[]; attachments?: ITicketAttachment[]; externalReferences: ITicketExternalReference[]; version: number; categoryId: string; requestTypeId?: string; channelType?: ChannelType; channelId?: string; primaryConversationId?: string; conversationReferences?: ITicketConversationReference[]; conversationCount?: number; unreadMessageCount?: number; lastMessageAt?: Date; /** @deprecated Use primaryConversationId and conversationReferences. */ conversationId?: string; /** @deprecated Use ITicketConversationReference.sourceMessageId. */ messageId?: string; sla?: ITicketSlaState; security?: ITicketSecurityState; approvalSummary?: ITicketApprovalSummary; taskSummary?: ITicketTaskSummary; resolution?: ITicketResolution; formSubmissions?: ITicketFormSubmissionReference[]; reopenedAt?: Date; reopenedBy?: string; reopenCount: number; createdAt: Date; createdBy: string; updatedAt?: Date; updatedBy?: string; deletedAt?: Date; deletedBy?: string; } export interface ICreateTicketDto { title: string; description?: string; contactId: string; statusId?: string; priority: TicketPriority; origin: TicketOrigin; assigneeId?: string; assignedGroupId?: string; dueAt?: Date; tagIds?: string[]; properties?: ITicketProperty[]; externalReferences?: ITicketExternalReference[]; source?: string; idempotencyKey?: string; categoryId: string; requestTypeId?: string; channelType?: ChannelType; channelId?: string; primaryConversationId?: string; sourceMessageId?: string; } export interface IUpdateTicketDto { expectedVersion: number; title?: string; description?: string; priority?: TicketPriority; assigneeId?: string; assignedGroupId?: string; dueAt?: Date; tagIds?: string[]; properties?: ITicketProperty[]; externalReferences?: ITicketExternalReference[]; categoryId?: string; } export interface IResolveTicketDto { expectedVersion: number; toStatusId: string; resolutionTypeId: string; description?: string; comment?: string; attachmentIds?: string[]; formSubmissionIds?: string[]; } export interface IReopenTicketDto { expectedVersion: number; toStatusId: string; reason?: string; sourceMessageId?: string; } export interface ITicketInboundEvent { spaceId: string; source: string; idempotencyKey: string; occurredAt: Date; channelType: ChannelType; channelId?: string; conversationId: string; messageId?: string; contactId: string; subject?: string; content?: string; attachmentIds?: string[]; metadata?: { [key: string]: string | number | boolean | null; }; } /** Body of GET /tickets/{id}/collaboration. `chatId` is an opaque reference to a * chat group of another service, not a tickets uuid. */ export interface ITicketCollaboration { chatId: string | null; }