@valentine-efagene/qshelter-common 2.0.66 → 2.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/client/browser.d.ts +29 -0
- package/dist/generated/client/client.d.ts +29 -0
- package/dist/generated/client/commonInputTypes.d.ts +120 -0
- package/dist/generated/client/enums.d.ts +32 -0
- package/dist/generated/client/enums.js +28 -0
- package/dist/generated/client/internal/class.d.ts +55 -0
- package/dist/generated/client/internal/class.js +2 -2
- package/dist/generated/client/internal/prismaNamespace.d.ts +475 -1
- package/dist/generated/client/internal/prismaNamespace.js +113 -0
- package/dist/generated/client/internal/prismaNamespaceBrowser.d.ts +123 -0
- package/dist/generated/client/internal/prismaNamespaceBrowser.js +113 -0
- package/dist/generated/client/models/EventChannel.d.ts +1305 -0
- package/dist/generated/client/models/EventChannel.js +1 -0
- package/dist/generated/client/models/EventHandler.d.ts +1749 -0
- package/dist/generated/client/models/EventHandler.js +1 -0
- package/dist/generated/client/models/EventHandlerExecution.d.ts +1525 -0
- package/dist/generated/client/models/EventHandlerExecution.js +1 -0
- package/dist/generated/client/models/EventType.d.ts +1653 -0
- package/dist/generated/client/models/EventType.js +1 -0
- package/dist/generated/client/models/Tenant.d.ts +796 -0
- package/dist/generated/client/models/WorkflowEvent.d.ts +1654 -0
- package/dist/generated/client/models/WorkflowEvent.js +1 -0
- package/dist/generated/client/models/index.d.ts +5 -0
- package/dist/generated/client/models/index.js +5 -0
- package/dist/generated/client/models.d.ts +5 -0
- package/dist/src/events/event-config.service.d.ts +123 -0
- package/dist/src/events/event-config.service.js +416 -0
- package/dist/src/events/index.d.ts +3 -0
- package/dist/src/events/index.js +5 -0
- package/dist/src/events/workflow-event.service.d.ts +189 -0
- package/dist/src/events/workflow-event.service.js +588 -0
- package/dist/src/events/workflow-types.d.ts +288 -0
- package/dist/src/events/workflow-types.js +14 -0
- package/package.json +1 -1
- package/prisma/migrations/20260105151535_add_event_workflow_system/migration.sql +132 -0
- package/prisma/schema.prisma +271 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event-Driven Workflow Types
|
|
3
|
+
*
|
|
4
|
+
* These types define the structure for a configurable event system
|
|
5
|
+
* where admins can define event types, channels, and handlers.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* 1. EventChannel - Logical grouping of events (e.g., "CONTRACTS", "PAYMENTS")
|
|
9
|
+
* 2. EventType - Specific event types (e.g., "DOCUMENT_UPLOADED", "STEP_COMPLETED")
|
|
10
|
+
* 3. EventHandler - What to do when an event fires (webhook, internal call, etc.)
|
|
11
|
+
* 4. WorkflowEvent - Actual event instances (audit log)
|
|
12
|
+
* 5. EventHandlerExecution - Log of handler executions
|
|
13
|
+
*/
|
|
14
|
+
export type { EventHandlerType, ActorType, WorkflowEventStatus, ExecutionStatus, } from '../../generated/client/enums';
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for INTERNAL handler type
|
|
17
|
+
* Calls an internal service method
|
|
18
|
+
*/
|
|
19
|
+
export interface InternalHandlerConfig {
|
|
20
|
+
type: 'INTERNAL';
|
|
21
|
+
/** Service name (e.g., "contract", "payment") */
|
|
22
|
+
service: string;
|
|
23
|
+
/** Method to call on the service */
|
|
24
|
+
method: string;
|
|
25
|
+
/** Optional payload transformation (JSONPath mapping) */
|
|
26
|
+
payloadMapping?: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Configuration for WEBHOOK handler type
|
|
30
|
+
* Sends HTTP request to external URL
|
|
31
|
+
*/
|
|
32
|
+
export interface WebhookHandlerConfig {
|
|
33
|
+
type: 'WEBHOOK';
|
|
34
|
+
/** Target URL */
|
|
35
|
+
url: string;
|
|
36
|
+
/** HTTP method */
|
|
37
|
+
method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
38
|
+
/** Optional headers */
|
|
39
|
+
headers?: Record<string, string>;
|
|
40
|
+
/** Optional payload transformation */
|
|
41
|
+
payloadMapping?: Record<string, string>;
|
|
42
|
+
/** Timeout in milliseconds */
|
|
43
|
+
timeoutMs?: number;
|
|
44
|
+
/** Whether to include event metadata in request */
|
|
45
|
+
includeMetadata?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Configuration for WORKFLOW handler type
|
|
49
|
+
* Triggers or advances a workflow
|
|
50
|
+
*/
|
|
51
|
+
export interface WorkflowHandlerConfig {
|
|
52
|
+
type: 'WORKFLOW';
|
|
53
|
+
/** Target workflow/phase ID */
|
|
54
|
+
workflowId?: string;
|
|
55
|
+
phaseId?: string;
|
|
56
|
+
stepId?: string;
|
|
57
|
+
/** Action to perform */
|
|
58
|
+
action: 'start' | 'advance' | 'complete' | 'fail' | 'skip';
|
|
59
|
+
/** Optional data to pass */
|
|
60
|
+
data?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Configuration for NOTIFICATION handler type
|
|
64
|
+
* Sends notifications via various channels
|
|
65
|
+
*/
|
|
66
|
+
export interface NotificationHandlerConfig {
|
|
67
|
+
type: 'NOTIFICATION';
|
|
68
|
+
/** Notification template ID or inline template */
|
|
69
|
+
template: string;
|
|
70
|
+
/** Channels to send through */
|
|
71
|
+
channels: ('email' | 'sms' | 'push' | 'in_app')[];
|
|
72
|
+
/** Recipients (can use payload variables like $.user.email) */
|
|
73
|
+
recipients?: {
|
|
74
|
+
email?: string[];
|
|
75
|
+
phone?: string[];
|
|
76
|
+
userId?: string[];
|
|
77
|
+
};
|
|
78
|
+
/** Priority */
|
|
79
|
+
priority?: 'low' | 'normal' | 'high' | 'urgent';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Configuration for SCRIPT handler type
|
|
83
|
+
* Executes custom logic
|
|
84
|
+
*/
|
|
85
|
+
export interface ScriptHandlerConfig {
|
|
86
|
+
type: 'SCRIPT';
|
|
87
|
+
/** Script language */
|
|
88
|
+
language: 'jsonata' | 'javascript';
|
|
89
|
+
/** The script/expression to execute */
|
|
90
|
+
script: string;
|
|
91
|
+
/** Timeout in milliseconds */
|
|
92
|
+
timeoutMs?: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Union type for all handler configurations
|
|
96
|
+
*/
|
|
97
|
+
export type HandlerConfig = InternalHandlerConfig | WebhookHandlerConfig | WorkflowHandlerConfig | NotificationHandlerConfig | ScriptHandlerConfig;
|
|
98
|
+
/**
|
|
99
|
+
* Input for emitting an event
|
|
100
|
+
*/
|
|
101
|
+
export interface EmitEventInput {
|
|
102
|
+
/** Event type code (e.g., "DOCUMENT_UPLOADED") */
|
|
103
|
+
eventType: string;
|
|
104
|
+
/** Event payload */
|
|
105
|
+
payload: Record<string, unknown>;
|
|
106
|
+
/** Source of the event (service name) */
|
|
107
|
+
source: string;
|
|
108
|
+
/** Actor information */
|
|
109
|
+
actor?: {
|
|
110
|
+
id: string;
|
|
111
|
+
type: 'USER' | 'API_KEY' | 'SYSTEM' | 'WEBHOOK';
|
|
112
|
+
};
|
|
113
|
+
/** Correlation ID for tracing related events */
|
|
114
|
+
correlationId?: string;
|
|
115
|
+
/** Causation ID (which event caused this one) */
|
|
116
|
+
causationId?: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Event with full metadata (returned from queries)
|
|
120
|
+
*/
|
|
121
|
+
export interface WorkflowEventData {
|
|
122
|
+
id: string;
|
|
123
|
+
tenantId: string;
|
|
124
|
+
eventTypeId: string;
|
|
125
|
+
eventTypeCode: string;
|
|
126
|
+
channelCode: string;
|
|
127
|
+
payload: Record<string, unknown>;
|
|
128
|
+
source: string;
|
|
129
|
+
actorId: string | null;
|
|
130
|
+
actorType: 'USER' | 'API_KEY' | 'SYSTEM' | 'WEBHOOK';
|
|
131
|
+
status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'SKIPPED';
|
|
132
|
+
correlationId: string | null;
|
|
133
|
+
causationId: string | null;
|
|
134
|
+
error: string | null;
|
|
135
|
+
processedAt: Date | null;
|
|
136
|
+
createdAt: Date;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Result of processing an event
|
|
140
|
+
*/
|
|
141
|
+
export interface ProcessEventResult {
|
|
142
|
+
eventId: string;
|
|
143
|
+
status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED' | 'SKIPPED';
|
|
144
|
+
handlersExecuted: number;
|
|
145
|
+
handlersSucceeded: number;
|
|
146
|
+
handlersFailed: number;
|
|
147
|
+
errors: Array<{
|
|
148
|
+
handlerId: string;
|
|
149
|
+
handlerName: string;
|
|
150
|
+
error: string;
|
|
151
|
+
}>;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Input for creating an event channel
|
|
155
|
+
*/
|
|
156
|
+
export interface CreateEventChannelInput {
|
|
157
|
+
code: string;
|
|
158
|
+
name: string;
|
|
159
|
+
description?: string;
|
|
160
|
+
enabled?: boolean;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Input for updating an event channel
|
|
164
|
+
*/
|
|
165
|
+
export interface UpdateEventChannelInput {
|
|
166
|
+
name?: string;
|
|
167
|
+
description?: string;
|
|
168
|
+
enabled?: boolean;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Input for creating an event type
|
|
172
|
+
*/
|
|
173
|
+
export interface CreateEventTypeInput {
|
|
174
|
+
channelId: string;
|
|
175
|
+
code: string;
|
|
176
|
+
name: string;
|
|
177
|
+
description?: string;
|
|
178
|
+
payloadSchema?: Record<string, unknown>;
|
|
179
|
+
enabled?: boolean;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Input for updating an event type
|
|
183
|
+
*/
|
|
184
|
+
export interface UpdateEventTypeInput {
|
|
185
|
+
name?: string;
|
|
186
|
+
description?: string;
|
|
187
|
+
payloadSchema?: Record<string, unknown>;
|
|
188
|
+
enabled?: boolean;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Input for creating an event handler
|
|
192
|
+
*/
|
|
193
|
+
export interface CreateEventHandlerInput {
|
|
194
|
+
eventTypeId: string;
|
|
195
|
+
name: string;
|
|
196
|
+
description?: string;
|
|
197
|
+
handlerType: 'INTERNAL' | 'WEBHOOK' | 'WORKFLOW' | 'NOTIFICATION' | 'SCRIPT';
|
|
198
|
+
config: HandlerConfig;
|
|
199
|
+
priority?: number;
|
|
200
|
+
enabled?: boolean;
|
|
201
|
+
maxRetries?: number;
|
|
202
|
+
retryDelayMs?: number;
|
|
203
|
+
filterCondition?: string;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Input for updating an event handler
|
|
207
|
+
*/
|
|
208
|
+
export interface UpdateEventHandlerInput {
|
|
209
|
+
name?: string;
|
|
210
|
+
description?: string;
|
|
211
|
+
config?: HandlerConfig;
|
|
212
|
+
priority?: number;
|
|
213
|
+
enabled?: boolean;
|
|
214
|
+
maxRetries?: number;
|
|
215
|
+
retryDelayMs?: number;
|
|
216
|
+
filterCondition?: string;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Event channel with related data
|
|
220
|
+
*/
|
|
221
|
+
export interface EventChannelWithTypes {
|
|
222
|
+
id: string;
|
|
223
|
+
tenantId: string;
|
|
224
|
+
code: string;
|
|
225
|
+
name: string;
|
|
226
|
+
description: string | null;
|
|
227
|
+
enabled: boolean;
|
|
228
|
+
eventTypes: Array<{
|
|
229
|
+
id: string;
|
|
230
|
+
code: string;
|
|
231
|
+
name: string;
|
|
232
|
+
enabled: boolean;
|
|
233
|
+
}>;
|
|
234
|
+
createdAt: Date;
|
|
235
|
+
updatedAt: Date;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Event type with related data
|
|
239
|
+
*/
|
|
240
|
+
export interface EventTypeWithHandlers {
|
|
241
|
+
id: string;
|
|
242
|
+
tenantId: string;
|
|
243
|
+
channelId: string;
|
|
244
|
+
channel: {
|
|
245
|
+
code: string;
|
|
246
|
+
name: string;
|
|
247
|
+
};
|
|
248
|
+
code: string;
|
|
249
|
+
name: string;
|
|
250
|
+
description: string | null;
|
|
251
|
+
payloadSchema: Record<string, unknown> | null;
|
|
252
|
+
enabled: boolean;
|
|
253
|
+
handlers: Array<{
|
|
254
|
+
id: string;
|
|
255
|
+
name: string;
|
|
256
|
+
handlerType: string;
|
|
257
|
+
enabled: boolean;
|
|
258
|
+
}>;
|
|
259
|
+
createdAt: Date;
|
|
260
|
+
updatedAt: Date;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Event handler with related data
|
|
264
|
+
*/
|
|
265
|
+
export interface EventHandlerWithType {
|
|
266
|
+
id: string;
|
|
267
|
+
tenantId: string;
|
|
268
|
+
eventTypeId: string;
|
|
269
|
+
eventType: {
|
|
270
|
+
code: string;
|
|
271
|
+
name: string;
|
|
272
|
+
channel: {
|
|
273
|
+
code: string;
|
|
274
|
+
name: string;
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
name: string;
|
|
278
|
+
description: string | null;
|
|
279
|
+
handlerType: string;
|
|
280
|
+
config: HandlerConfig;
|
|
281
|
+
priority: number;
|
|
282
|
+
enabled: boolean;
|
|
283
|
+
maxRetries: number;
|
|
284
|
+
retryDelayMs: number;
|
|
285
|
+
filterCondition: string | null;
|
|
286
|
+
createdAt: Date;
|
|
287
|
+
updatedAt: Date;
|
|
288
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event-Driven Workflow Types
|
|
3
|
+
*
|
|
4
|
+
* These types define the structure for a configurable event system
|
|
5
|
+
* where admins can define event types, channels, and handlers.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* 1. EventChannel - Logical grouping of events (e.g., "CONTRACTS", "PAYMENTS")
|
|
9
|
+
* 2. EventType - Specific event types (e.g., "DOCUMENT_UPLOADED", "STEP_COMPLETED")
|
|
10
|
+
* 3. EventHandler - What to do when an event fires (webhook, internal call, etc.)
|
|
11
|
+
* 4. WorkflowEvent - Actual event instances (audit log)
|
|
12
|
+
* 5. EventHandlerExecution - Log of handler executions
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
package/package.json
CHANGED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE `event_channels` (
|
|
3
|
+
`id` VARCHAR(191) NOT NULL,
|
|
4
|
+
`tenantId` VARCHAR(191) NOT NULL,
|
|
5
|
+
`code` VARCHAR(191) NOT NULL,
|
|
6
|
+
`name` VARCHAR(191) NOT NULL,
|
|
7
|
+
`description` TEXT NULL,
|
|
8
|
+
`enabled` BOOLEAN NOT NULL DEFAULT true,
|
|
9
|
+
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
10
|
+
`updatedAt` DATETIME(3) NOT NULL,
|
|
11
|
+
|
|
12
|
+
INDEX `event_channels_tenantId_idx`(`tenantId`),
|
|
13
|
+
UNIQUE INDEX `event_channels_tenantId_code_key`(`tenantId`, `code`),
|
|
14
|
+
PRIMARY KEY (`id`)
|
|
15
|
+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
16
|
+
|
|
17
|
+
-- CreateTable
|
|
18
|
+
CREATE TABLE `event_types` (
|
|
19
|
+
`id` VARCHAR(191) NOT NULL,
|
|
20
|
+
`tenantId` VARCHAR(191) NOT NULL,
|
|
21
|
+
`channelId` VARCHAR(191) NOT NULL,
|
|
22
|
+
`code` VARCHAR(191) NOT NULL,
|
|
23
|
+
`name` VARCHAR(191) NOT NULL,
|
|
24
|
+
`description` TEXT NULL,
|
|
25
|
+
`payloadSchema` JSON NULL,
|
|
26
|
+
`enabled` BOOLEAN NOT NULL DEFAULT true,
|
|
27
|
+
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
28
|
+
`updatedAt` DATETIME(3) NOT NULL,
|
|
29
|
+
|
|
30
|
+
INDEX `event_types_tenantId_idx`(`tenantId`),
|
|
31
|
+
INDEX `event_types_channelId_idx`(`channelId`),
|
|
32
|
+
UNIQUE INDEX `event_types_tenantId_code_key`(`tenantId`, `code`),
|
|
33
|
+
UNIQUE INDEX `event_types_channelId_code_key`(`channelId`, `code`),
|
|
34
|
+
PRIMARY KEY (`id`)
|
|
35
|
+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
36
|
+
|
|
37
|
+
-- CreateTable
|
|
38
|
+
CREATE TABLE `event_handlers` (
|
|
39
|
+
`id` VARCHAR(191) NOT NULL,
|
|
40
|
+
`tenantId` VARCHAR(191) NOT NULL,
|
|
41
|
+
`eventTypeId` VARCHAR(191) NOT NULL,
|
|
42
|
+
`name` VARCHAR(191) NOT NULL,
|
|
43
|
+
`description` TEXT NULL,
|
|
44
|
+
`handlerType` ENUM('INTERNAL', 'WEBHOOK', 'WORKFLOW', 'NOTIFICATION', 'SCRIPT') NOT NULL,
|
|
45
|
+
`config` JSON NOT NULL,
|
|
46
|
+
`priority` INTEGER NOT NULL DEFAULT 100,
|
|
47
|
+
`enabled` BOOLEAN NOT NULL DEFAULT true,
|
|
48
|
+
`maxRetries` INTEGER NOT NULL DEFAULT 3,
|
|
49
|
+
`retryDelayMs` INTEGER NOT NULL DEFAULT 1000,
|
|
50
|
+
`filterCondition` TEXT NULL,
|
|
51
|
+
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
52
|
+
`updatedAt` DATETIME(3) NOT NULL,
|
|
53
|
+
|
|
54
|
+
INDEX `event_handlers_tenantId_idx`(`tenantId`),
|
|
55
|
+
INDEX `event_handlers_eventTypeId_idx`(`eventTypeId`),
|
|
56
|
+
INDEX `event_handlers_handlerType_idx`(`handlerType`),
|
|
57
|
+
PRIMARY KEY (`id`)
|
|
58
|
+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
59
|
+
|
|
60
|
+
-- CreateTable
|
|
61
|
+
CREATE TABLE `workflow_events` (
|
|
62
|
+
`id` VARCHAR(191) NOT NULL,
|
|
63
|
+
`tenantId` VARCHAR(191) NOT NULL,
|
|
64
|
+
`eventTypeId` VARCHAR(191) NOT NULL,
|
|
65
|
+
`payload` JSON NOT NULL,
|
|
66
|
+
`correlationId` VARCHAR(191) NULL,
|
|
67
|
+
`causationId` VARCHAR(191) NULL,
|
|
68
|
+
`source` VARCHAR(191) NOT NULL,
|
|
69
|
+
`actorId` VARCHAR(191) NULL,
|
|
70
|
+
`actorType` ENUM('USER', 'API_KEY', 'SYSTEM', 'WEBHOOK') NOT NULL DEFAULT 'SYSTEM',
|
|
71
|
+
`status` ENUM('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED', 'SKIPPED') NOT NULL DEFAULT 'PENDING',
|
|
72
|
+
`error` TEXT NULL,
|
|
73
|
+
`processedAt` DATETIME(3) NULL,
|
|
74
|
+
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
75
|
+
|
|
76
|
+
INDEX `workflow_events_tenantId_idx`(`tenantId`),
|
|
77
|
+
INDEX `workflow_events_eventTypeId_idx`(`eventTypeId`),
|
|
78
|
+
INDEX `workflow_events_correlationId_idx`(`correlationId`),
|
|
79
|
+
INDEX `workflow_events_causationId_idx`(`causationId`),
|
|
80
|
+
INDEX `workflow_events_status_idx`(`status`),
|
|
81
|
+
INDEX `workflow_events_createdAt_idx`(`createdAt`),
|
|
82
|
+
PRIMARY KEY (`id`)
|
|
83
|
+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
84
|
+
|
|
85
|
+
-- CreateTable
|
|
86
|
+
CREATE TABLE `event_handler_executions` (
|
|
87
|
+
`id` VARCHAR(191) NOT NULL,
|
|
88
|
+
`eventId` VARCHAR(191) NOT NULL,
|
|
89
|
+
`handlerId` VARCHAR(191) NOT NULL,
|
|
90
|
+
`status` ENUM('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'RETRYING', 'SKIPPED') NOT NULL DEFAULT 'PENDING',
|
|
91
|
+
`attempt` INTEGER NOT NULL DEFAULT 1,
|
|
92
|
+
`input` JSON NULL,
|
|
93
|
+
`output` JSON NULL,
|
|
94
|
+
`error` TEXT NULL,
|
|
95
|
+
`errorCode` VARCHAR(191) NULL,
|
|
96
|
+
`startedAt` DATETIME(3) NULL,
|
|
97
|
+
`completedAt` DATETIME(3) NULL,
|
|
98
|
+
`durationMs` INTEGER NULL,
|
|
99
|
+
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
100
|
+
|
|
101
|
+
INDEX `event_handler_executions_eventId_idx`(`eventId`),
|
|
102
|
+
INDEX `event_handler_executions_handlerId_idx`(`handlerId`),
|
|
103
|
+
INDEX `event_handler_executions_status_idx`(`status`),
|
|
104
|
+
PRIMARY KEY (`id`)
|
|
105
|
+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
106
|
+
|
|
107
|
+
-- AddForeignKey
|
|
108
|
+
ALTER TABLE `event_channels` ADD CONSTRAINT `event_channels_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
109
|
+
|
|
110
|
+
-- AddForeignKey
|
|
111
|
+
ALTER TABLE `event_types` ADD CONSTRAINT `event_types_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
112
|
+
|
|
113
|
+
-- AddForeignKey
|
|
114
|
+
ALTER TABLE `event_types` ADD CONSTRAINT `event_types_channelId_fkey` FOREIGN KEY (`channelId`) REFERENCES `event_channels`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
115
|
+
|
|
116
|
+
-- AddForeignKey
|
|
117
|
+
ALTER TABLE `event_handlers` ADD CONSTRAINT `event_handlers_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
118
|
+
|
|
119
|
+
-- AddForeignKey
|
|
120
|
+
ALTER TABLE `event_handlers` ADD CONSTRAINT `event_handlers_eventTypeId_fkey` FOREIGN KEY (`eventTypeId`) REFERENCES `event_types`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
121
|
+
|
|
122
|
+
-- AddForeignKey
|
|
123
|
+
ALTER TABLE `workflow_events` ADD CONSTRAINT `workflow_events_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
124
|
+
|
|
125
|
+
-- AddForeignKey
|
|
126
|
+
ALTER TABLE `workflow_events` ADD CONSTRAINT `workflow_events_eventTypeId_fkey` FOREIGN KEY (`eventTypeId`) REFERENCES `event_types`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
127
|
+
|
|
128
|
+
-- AddForeignKey
|
|
129
|
+
ALTER TABLE `event_handler_executions` ADD CONSTRAINT `event_handler_executions_eventId_fkey` FOREIGN KEY (`eventId`) REFERENCES `workflow_events`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
130
|
+
|
|
131
|
+
-- AddForeignKey
|
|
132
|
+
ALTER TABLE `event_handler_executions` ADD CONSTRAINT `event_handler_executions_handlerId_fkey` FOREIGN KEY (`handlerId`) REFERENCES `event_handlers`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|