/** * Interfaces for the Task Inbox system */ import { WorkflowTaskStatus } from './workflowTaskModel'; /** * Task creation parameters */ export interface TaskCreationParams { taskType: string; title: string; description?: string; priority?: string; dueDate?: string | Date; assignTo?: { roles?: string[]; users?: string[]; }; contextData?: Record; } /** * Task submission parameters */ export interface TaskSubmissionParams { taskId: string; formData: Record; comments?: string; userId?: string; } /** * Task query parameters */ export interface TaskQueryParams { status?: WorkflowTaskStatus | WorkflowTaskStatus[]; priority?: string; assignedToUser?: string; assignedToRoles?: string[]; dueBefore?: string | Date; dueAfter?: string | Date; taskType?: string; executionId?: string; page?: number; pageSize?: number; } /** * Task query result */ export interface TaskQueryResult { tasks: TaskDetails[]; total: number; page: number; pageSize: number; totalPages: number; } /** * Task details */ export interface TaskDetails { taskId: string; executionId: string; title: string; description?: string; status: WorkflowTaskStatus; priority: string; dueDate?: string; assignedRoles?: string[]; assignedUsers?: string[]; contextData?: Record; formId: string; formSchema?: { jsonSchema: Record; uiSchema?: Record; defaultValues?: Record; }; createdAt: string; createdBy?: string; claimedAt?: string; claimedBy?: string; completedAt?: string; completedBy?: string; responseData?: Record; } /** * Task history entry */ export interface TaskHistoryEntry { historyId: string; taskId: string; action: string; fromStatus?: string; toStatus?: string; userId?: string; timestamp: string; details?: Record; } /** * Task action result */ export interface TaskActionResult { success: boolean; taskId: string; status: WorkflowTaskStatus; message?: string; error?: string; } /** * Task event types */ export enum TaskEventType { TASK_CREATED = 'task_created', TASK_ASSIGNED = 'task_assigned', TASK_CLAIMED = 'task_claimed', TASK_UNCLAIMED = 'task_unclaimed', TASK_COMPLETED = 'task_completed', TASK_CANCELED = 'task_canceled', TASK_EXPIRED = 'task_expired', TASK_DISMISSED = 'task_dismissed' } /** * Task event naming convention */ export const TaskEventNames = { /** * Generate task created event name */ taskCreated: (taskId: string) => `Task:${taskId}:Created`, /** * Generate task completed event name */ taskCompleted: (taskId: string) => `Task:${taskId}:Complete`, /** * Generate task claimed event name */ taskClaimed: (taskId: string) => `Task:${taskId}:Claimed`, /** * Generate task unclaimed event name */ taskUnclaimed: (taskId: string) => `Task:${taskId}:Unclaimed`, /** * Generate task canceled event name */ taskCanceled: (taskId: string) => `Task:${taskId}:Canceled`, /** * Generate task expired event name */ taskExpired: (taskId: string) => `Task:${taskId}:Expired`, /** * Generate task dismissed event name */ taskDismissed: (taskId: string) => `Task:${taskId}:Dismissed`, /** * Generate form submission event name */ formSubmitted: (formId: string) => `Form:${formId}:Submit` };