@webiny/tasks 6.3.0 → 6.4.0-beta.1
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/context.js +36 -42
- package/context.js.map +1 -1
- package/crud/TaskLogPrivateModel.js +33 -27
- package/crud/TaskLogPrivateModel.js.map +1 -1
- package/crud/TaskPrivateModel.js +48 -39
- package/crud/TaskPrivateModel.js.map +1 -1
- package/crud/cleanupTaskSubtree.js +55 -69
- package/crud/cleanupTaskSubtree.js.map +1 -1
- package/crud/crud.tasks.js +289 -352
- package/crud/crud.tasks.js.map +1 -1
- package/crud/definition.tasks.js +13 -16
- package/crud/definition.tasks.js.map +1 -1
- package/crud/service.tasks.js +119 -155
- package/crud/service.tasks.js.map +1 -1
- package/decorators/RunnableTaskDecorator.js +61 -77
- package/decorators/RunnableTaskDecorator.js.map +1 -1
- package/decorators/SelfCleaningTaskDecorator.js +75 -89
- package/decorators/SelfCleaningTaskDecorator.js.map +1 -1
- package/domain/errors.js +35 -39
- package/domain/errors.js.map +1 -1
- package/events/TaskAfterCreateEvent.js +8 -5
- package/events/TaskAfterCreateEvent.js.map +1 -1
- package/events/TaskAfterDeleteEvent.js +8 -5
- package/events/TaskAfterDeleteEvent.js.map +1 -1
- package/events/TaskAfterUpdateEvent.js +8 -5
- package/events/TaskAfterUpdateEvent.js.map +1 -1
- package/events/TaskBeforeCreateEvent.js +8 -5
- package/events/TaskBeforeCreateEvent.js.map +1 -1
- package/events/TaskBeforeDeleteEvent.js +8 -5
- package/events/TaskBeforeDeleteEvent.js.map +1 -1
- package/events/TaskBeforeUpdateEvent.js +8 -5
- package/events/TaskBeforeUpdateEvent.js.map +1 -1
- package/events/abstractions.js +7 -36
- package/events/abstractions.js.map +1 -1
- package/events/index.js +0 -2
- package/features/AbortTask/AbortTaskUseCase.js +9 -8
- package/features/AbortTask/AbortTaskUseCase.js.map +1 -1
- package/features/AbortTask/abstractions.js +2 -1
- package/features/AbortTask/abstractions.js.map +1 -1
- package/features/AbortTask/feature.js +6 -5
- package/features/AbortTask/feature.js.map +1 -1
- package/features/AbortTask/index.js +0 -2
- package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js +8 -7
- package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js.map +1 -1
- package/features/CleanupTaskSubtree/abstractions.js +2 -1
- package/features/CleanupTaskSubtree/abstractions.js.map +1 -1
- package/features/CleanupTaskSubtree/index.js +0 -2
- package/features/GetTask/GetTaskUseCase.js +8 -7
- package/features/GetTask/GetTaskUseCase.js.map +1 -1
- package/features/GetTask/abstractions.js +2 -1
- package/features/GetTask/abstractions.js.map +1 -1
- package/features/GetTask/feature.js +6 -5
- package/features/GetTask/feature.js.map +1 -1
- package/features/GetTask/index.js +0 -2
- package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js +18 -16
- package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js.map +1 -1
- package/features/GetTaskDefinition/abstractions.js +2 -1
- package/features/GetTaskDefinition/abstractions.js.map +1 -1
- package/features/GetTaskDefinition/feature.js +6 -5
- package/features/GetTaskDefinition/feature.js.map +1 -1
- package/features/GetTaskDefinition/index.js +0 -2
- package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js +18 -12
- package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js.map +1 -1
- package/features/ListTaskDefinitions/abstractions.js +2 -1
- package/features/ListTaskDefinitions/abstractions.js.map +1 -1
- package/features/ListTaskDefinitions/feature.js +6 -5
- package/features/ListTaskDefinitions/feature.js.map +1 -1
- package/features/ListTaskDefinitions/index.js +0 -2
- package/features/ListTasks/ListTasksUseCase.js +8 -7
- package/features/ListTasks/ListTasksUseCase.js.map +1 -1
- package/features/ListTasks/abstractions.js +2 -1
- package/features/ListTasks/abstractions.js.map +1 -1
- package/features/ListTasks/feature.js +6 -5
- package/features/ListTasks/feature.js.map +1 -1
- package/features/ListTasks/index.js +0 -2
- package/features/TaskController/TaskController.js +60 -60
- package/features/TaskController/TaskController.js.map +1 -1
- package/features/TaskController/augmentation.js +0 -3
- package/features/TaskController/index.js +0 -5
- package/features/TaskExecutionContext/TaskExecutionContext.js +38 -45
- package/features/TaskExecutionContext/TaskExecutionContext.js.map +1 -1
- package/features/TaskExecutionContext/abstractions.js +2 -10
- package/features/TaskExecutionContext/abstractions.js.map +1 -1
- package/features/TaskExecutionContext/feature.js +6 -5
- package/features/TaskExecutionContext/feature.js.map +1 -1
- package/features/TaskExecutionContext/index.js +0 -2
- package/features/TriggerTask/TriggerTaskUseCase.js +9 -8
- package/features/TriggerTask/TriggerTaskUseCase.js.map +1 -1
- package/features/TriggerTask/abstractions.js +2 -1
- package/features/TriggerTask/abstractions.js.map +1 -1
- package/features/TriggerTask/feature.js +6 -5
- package/features/TriggerTask/feature.js.map +1 -1
- package/features/TriggerTask/index.js +0 -2
- package/global.js +0 -2
- package/graphql/checkPermissions.js +16 -35
- package/graphql/checkPermissions.js.map +1 -1
- package/graphql/index.js +154 -187
- package/graphql/index.js.map +1 -1
- package/graphql/utils.js +15 -14
- package/graphql/utils.js.map +1 -1
- package/handler/index.js +46 -53
- package/handler/index.js.map +1 -1
- package/handler/register.js +7 -15
- package/handler/register.js.map +1 -1
- package/handler/types.js +0 -3
- package/index.js +2 -4
- package/package.json +17 -17
- package/plugins/TaskServicePlugin.js +9 -6
- package/plugins/TaskServicePlugin.js.map +1 -1
- package/plugins/index.js +0 -2
- package/response/DatabaseResponse.js +113 -132
- package/response/DatabaseResponse.js.map +1 -1
- package/response/Response.js +78 -96
- package/response/Response.js.map +1 -1
- package/response/ResponseAbortedResult.js +8 -7
- package/response/ResponseAbortedResult.js.map +1 -1
- package/response/ResponseContinueResult.js +12 -14
- package/response/ResponseContinueResult.js.map +1 -1
- package/response/ResponseDoneResult.js +10 -9
- package/response/ResponseDoneResult.js.map +1 -1
- package/response/ResponseErrorResult.js +9 -8
- package/response/ResponseErrorResult.js.map +1 -1
- package/response/TaskResponse.js +44 -64
- package/response/TaskResponse.js.map +1 -1
- package/response/abstractions/Response.js +0 -3
- package/response/abstractions/ResponseAbortedResult.js +0 -3
- package/response/abstractions/ResponseBaseResult.js +0 -3
- package/response/abstractions/ResponseContinueResult.js +0 -3
- package/response/abstractions/ResponseDoneResult.js +0 -3
- package/response/abstractions/ResponseErrorResult.js +0 -3
- package/response/abstractions/TaskResponse.js +0 -3
- package/response/abstractions/index.js +0 -2
- package/response/index.js +0 -2
- package/runner/TaskControl.js +150 -221
- package/runner/TaskControl.js.map +1 -1
- package/runner/TaskEventValidation.js +12 -13
- package/runner/TaskEventValidation.js.map +1 -1
- package/runner/TaskManager.js +68 -106
- package/runner/TaskManager.js.map +1 -1
- package/runner/TaskManagerStore.js +90 -139
- package/runner/TaskManagerStore.js.map +1 -1
- package/runner/TaskRunner.js +45 -65
- package/runner/TaskRunner.js.map +1 -1
- package/runner/abstractions/TaskControl.js +0 -3
- package/runner/abstractions/TaskEventValidation.js +0 -3
- package/runner/abstractions/TaskManager.js +0 -3
- package/runner/abstractions/TaskManagerStore.js +0 -3
- package/runner/abstractions/TaskRunner.js +0 -3
- package/runner/abstractions/index.js +0 -2
- package/runner/index.js +0 -2
- package/service/EventBridgeEventTransportPlugin.js +43 -42
- package/service/EventBridgeEventTransportPlugin.js.map +1 -1
- package/service/StepFunctionServicePlugin.js +65 -66
- package/service/StepFunctionServicePlugin.js.map +1 -1
- package/service/createService.js +10 -13
- package/service/createService.js.map +1 -1
- package/service/index.js +7 -5
- package/service/index.js.map +1 -1
- package/tasks/testingRunTask.js +11 -10
- package/tasks/testingRunTask.js.map +1 -1
- package/types.js +12 -12
- package/types.js.map +1 -1
- package/utils/ObjectUpdater.js +25 -31
- package/utils/ObjectUpdater.js.map +1 -1
- package/utils/getErrorProperties.js +5 -4
- package/utils/getErrorProperties.js.map +1 -1
- package/utils/getObjectProperties.js +8 -15
- package/utils/getObjectProperties.js.map +1 -1
- package/utils/index.js +0 -2
- package/utils/normalizeSelfCleanup.js +13 -12
- package/utils/normalizeSelfCleanup.js.map +1 -1
- package/events/index.js.map +0 -1
- package/features/AbortTask/index.js.map +0 -1
- package/features/CleanupTaskSubtree/index.js.map +0 -1
- package/features/GetTask/index.js.map +0 -1
- package/features/GetTaskDefinition/index.js.map +0 -1
- package/features/ListTaskDefinitions/index.js.map +0 -1
- package/features/ListTasks/index.js.map +0 -1
- package/features/TaskController/augmentation.js.map +0 -1
- package/features/TaskController/index.js.map +0 -1
- package/features/TaskExecutionContext/index.js.map +0 -1
- package/features/TriggerTask/index.js.map +0 -1
- package/global.js.map +0 -1
- package/handler/types.js.map +0 -1
- package/index.js.map +0 -1
- package/plugins/index.js.map +0 -1
- package/response/abstractions/Response.js.map +0 -1
- package/response/abstractions/ResponseAbortedResult.js.map +0 -1
- package/response/abstractions/ResponseBaseResult.js.map +0 -1
- package/response/abstractions/ResponseContinueResult.js.map +0 -1
- package/response/abstractions/ResponseDoneResult.js.map +0 -1
- package/response/abstractions/ResponseErrorResult.js.map +0 -1
- package/response/abstractions/TaskResponse.js.map +0 -1
- package/response/abstractions/index.js.map +0 -1
- package/response/index.js.map +0 -1
- package/runner/abstractions/TaskControl.js.map +0 -1
- package/runner/abstractions/TaskEventValidation.js.map +0 -1
- package/runner/abstractions/TaskManager.js.map +0 -1
- package/runner/abstractions/TaskManagerStore.js.map +0 -1
- package/runner/abstractions/TaskRunner.js.map +0 -1
- package/runner/abstractions/index.js.map +0 -1
- package/runner/index.js.map +0 -1
- package/utils/index.js.map +0 -1
package/crud/crud.tasks.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import error from "@webiny/error";
|
|
2
2
|
import { TaskDataStatus } from "../types.js";
|
|
3
3
|
import { WEBINY_TASK_MODEL_ID } from "./TaskPrivateModel.js";
|
|
4
4
|
import { WEBINY_TASK_LOG_MODEL_ID } from "./TaskLogPrivateModel.js";
|
|
@@ -17,365 +17,302 @@ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.j
|
|
|
17
17
|
import { TaskAfterCreateEvent, TaskAfterDeleteEvent, TaskAfterUpdateEvent, TaskBeforeCreateEvent, TaskBeforeDeleteEvent, TaskBeforeUpdateEvent } from "../events/index.js";
|
|
18
18
|
import { CmsWhereMapper } from "@webiny/api-headless-cms";
|
|
19
19
|
import { createCleanupTaskSubtree } from "./cleanupTaskSubtree.js";
|
|
20
|
-
const createRevisionId = id
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
} = parseIdentifier(id);
|
|
24
|
-
return `${entryId}#0001`;
|
|
20
|
+
const createRevisionId = (id)=>{
|
|
21
|
+
const { id: entryId } = parseIdentifier(id);
|
|
22
|
+
return `${entryId}#0001`;
|
|
25
23
|
};
|
|
26
|
-
const convertToTask = entry
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
parentId: entry.values.parentId
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
const convertToLog = entry => {
|
|
46
|
-
return {
|
|
47
|
-
id: entry.entryId,
|
|
48
|
-
createdOn: entry.createdOn,
|
|
49
|
-
createdBy: entry.createdBy,
|
|
50
|
-
executionName: entry.values.executionName,
|
|
51
|
-
task: entry.values.task,
|
|
52
|
-
iteration: entry.values.iteration,
|
|
53
|
-
items: entry.values.items || []
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
const getZodSchema = schema => {
|
|
57
|
-
if (!schema) {
|
|
58
|
-
return zod.looseObject({});
|
|
59
|
-
} else if (schema instanceof zod.ZodObject) {
|
|
60
|
-
return schema.loose();
|
|
61
|
-
} else if (schema instanceof zod.ZodType) {
|
|
62
|
-
return schema;
|
|
63
|
-
}
|
|
64
|
-
return zod.looseObject(schema);
|
|
65
|
-
};
|
|
66
|
-
const validateTaskInput = async params => {
|
|
67
|
-
const {
|
|
68
|
-
definition,
|
|
69
|
-
data
|
|
70
|
-
} = params;
|
|
71
|
-
if (!definition.createInputValidation) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const schema = definition.createInputValidation({
|
|
75
|
-
validator: zod
|
|
76
|
-
});
|
|
77
|
-
/**
|
|
78
|
-
* If the schema is not an object, we need to wrap it with the `object` function.
|
|
79
|
-
*/
|
|
80
|
-
const validate = getZodSchema(schema);
|
|
81
|
-
const result = await validate.safeParseAsync(data.input);
|
|
82
|
-
if (result.success) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
throw createZodError(result.error);
|
|
86
|
-
};
|
|
87
|
-
export const createTaskCrud = context => {
|
|
88
|
-
const cmsWhereMapper = context.container.resolve(CmsWhereMapper);
|
|
89
|
-
const getTaskModel = async () => {
|
|
90
|
-
const identityContext = context.container.resolve(IdentityContext);
|
|
91
|
-
return await identityContext.withoutAuthorization(async () => {
|
|
92
|
-
const getModel = context.container.resolve(GetModelUseCase);
|
|
93
|
-
const result = await getModel.execute(WEBINY_TASK_MODEL_ID);
|
|
94
|
-
if (result.isFail()) {
|
|
95
|
-
throw new WebinyError(`There is no model "${WEBINY_TASK_MODEL_ID}".`);
|
|
96
|
-
}
|
|
97
|
-
return result.value;
|
|
98
|
-
});
|
|
99
|
-
};
|
|
100
|
-
const getLogModel = async () => {
|
|
101
|
-
const identityContext = context.container.resolve(IdentityContext);
|
|
102
|
-
return await identityContext.withoutAuthorization(async () => {
|
|
103
|
-
const getModel = context.container.resolve(GetModelUseCase);
|
|
104
|
-
const result = await getModel.execute(WEBINY_TASK_LOG_MODEL_ID);
|
|
105
|
-
if (result.isFail()) {
|
|
106
|
-
throw new WebinyError(`There is no model "${WEBINY_TASK_LOG_MODEL_ID}".`);
|
|
107
|
-
}
|
|
108
|
-
return result.value;
|
|
24
|
+
const convertToTask = (entry)=>({
|
|
25
|
+
id: entry.entryId,
|
|
26
|
+
createdOn: entry.createdOn,
|
|
27
|
+
savedOn: entry.savedOn,
|
|
28
|
+
createdBy: entry.createdBy,
|
|
29
|
+
name: entry.values.name,
|
|
30
|
+
definitionId: entry.values.definitionId,
|
|
31
|
+
input: entry.values.input,
|
|
32
|
+
output: entry.values.output,
|
|
33
|
+
taskStatus: entry.values.taskStatus,
|
|
34
|
+
executionName: entry.values.executionName || "",
|
|
35
|
+
eventResponse: entry.values.eventResponse,
|
|
36
|
+
startedOn: entry.values.startedOn,
|
|
37
|
+
finishedOn: entry.values.finishedOn,
|
|
38
|
+
iterations: entry.values.iterations,
|
|
39
|
+
parentId: entry.values.parentId
|
|
109
40
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
return result.value;
|
|
41
|
+
const convertToLog = (entry)=>({
|
|
42
|
+
id: entry.entryId,
|
|
43
|
+
createdOn: entry.createdOn,
|
|
44
|
+
createdBy: entry.createdBy,
|
|
45
|
+
executionName: entry.values.executionName,
|
|
46
|
+
task: entry.values.task,
|
|
47
|
+
iteration: entry.values.iteration,
|
|
48
|
+
items: entry.values.items || []
|
|
121
49
|
});
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const model = await getTaskModel();
|
|
134
|
-
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
135
|
-
const result = await listLatestEntries.execute(model, {
|
|
136
|
-
...params,
|
|
137
|
-
where: cmsWhereMapper.map({
|
|
138
|
-
input: params?.where,
|
|
139
|
-
fields: model.fields
|
|
140
|
-
})
|
|
141
|
-
});
|
|
142
|
-
if (result.isFail()) {
|
|
143
|
-
throw result.error;
|
|
144
|
-
}
|
|
145
|
-
return result.value;
|
|
50
|
+
const getZodSchema = (schema)=>{
|
|
51
|
+
if (!schema) return zod.looseObject({});
|
|
52
|
+
if (schema instanceof zod.ZodObject) return schema.loose();
|
|
53
|
+
if (schema instanceof zod.ZodType) return schema;
|
|
54
|
+
return zod.looseObject(schema);
|
|
55
|
+
};
|
|
56
|
+
const validateTaskInput = async (params)=>{
|
|
57
|
+
const { definition, data } = params;
|
|
58
|
+
if (!definition.createInputValidation) return;
|
|
59
|
+
const schema = definition.createInputValidation({
|
|
60
|
+
validator: zod
|
|
146
61
|
});
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
62
|
+
const validate = getZodSchema(schema);
|
|
63
|
+
const result = await validate.safeParseAsync(data.input);
|
|
64
|
+
if (result.success) return;
|
|
65
|
+
throw createZodError(result.error);
|
|
66
|
+
};
|
|
67
|
+
const createTaskCrud = (context)=>{
|
|
68
|
+
const cmsWhereMapper = context.container.resolve(CmsWhereMapper);
|
|
69
|
+
const getTaskModel = async ()=>{
|
|
70
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
71
|
+
return await identityContext.withoutAuthorization(async ()=>{
|
|
72
|
+
const getModel = context.container.resolve(GetModelUseCase);
|
|
73
|
+
const result = await getModel.execute(WEBINY_TASK_MODEL_ID);
|
|
74
|
+
if (result.isFail()) throw new error(`There is no model "${WEBINY_TASK_MODEL_ID}".`);
|
|
75
|
+
return result.value;
|
|
76
|
+
});
|
|
150
77
|
};
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
78
|
+
const getLogModel = async ()=>{
|
|
79
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
80
|
+
return await identityContext.withoutAuthorization(async ()=>{
|
|
81
|
+
const getModel = context.container.resolve(GetModelUseCase);
|
|
82
|
+
const result = await getModel.execute(WEBINY_TASK_LOG_MODEL_ID);
|
|
83
|
+
if (result.isFail()) throw new error(`There is no model "${WEBINY_TASK_LOG_MODEL_ID}".`);
|
|
84
|
+
return result.value;
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const getTask = async (id)=>{
|
|
88
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
89
|
+
const entry = await identityContext.withoutAuthorization(async ()=>{
|
|
90
|
+
const model = await getTaskModel();
|
|
91
|
+
const getEntryById = context.container.resolve(GetEntryByIdUseCase);
|
|
92
|
+
const result = await getEntryById.execute(model, createRevisionId(id));
|
|
93
|
+
if (result.isFail()) return null;
|
|
94
|
+
return result.value;
|
|
95
|
+
});
|
|
96
|
+
if (!entry) return null;
|
|
97
|
+
return convertToTask(entry);
|
|
98
|
+
};
|
|
99
|
+
const listTasks = async (params)=>{
|
|
100
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
101
|
+
const { entries, meta } = await identityContext.withoutAuthorization(async ()=>{
|
|
102
|
+
const model = await getTaskModel();
|
|
103
|
+
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
104
|
+
const result = await listLatestEntries.execute(model, {
|
|
105
|
+
...params,
|
|
106
|
+
where: cmsWhereMapper.map({
|
|
107
|
+
input: params?.where,
|
|
108
|
+
fields: model.fields
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
if (result.isFail()) throw result.error;
|
|
112
|
+
return result.value;
|
|
113
|
+
});
|
|
114
|
+
return {
|
|
115
|
+
items: entries.map((item)=>convertToTask(item)),
|
|
116
|
+
meta
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
const createTask = async (data)=>{
|
|
120
|
+
const definition = context.tasks.getDefinition(data.definitionId);
|
|
121
|
+
if (!definition) throw new TaskDefinitionNotFoundError(data.definitionId);
|
|
122
|
+
await validateTaskInput({
|
|
123
|
+
context,
|
|
124
|
+
definition,
|
|
125
|
+
data
|
|
126
|
+
});
|
|
127
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
128
|
+
const eventPublisher = context.container.resolve(EventPublisher);
|
|
129
|
+
const beforeCreateEvent = new TaskBeforeCreateEvent({
|
|
130
|
+
input: data
|
|
131
|
+
});
|
|
132
|
+
await eventPublisher.publish(beforeCreateEvent);
|
|
133
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
134
|
+
const model = await getTaskModel();
|
|
135
|
+
const createEntry = context.container.resolve(CreateEntryUseCase);
|
|
136
|
+
return createEntry.execute(model, {
|
|
137
|
+
values: {
|
|
138
|
+
...data,
|
|
139
|
+
iterations: 0,
|
|
140
|
+
taskStatus: TaskDataStatus.PENDING
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
if (result.isFail()) throw result.error;
|
|
145
|
+
const task = convertToTask(result.value);
|
|
146
|
+
const afterCreateEvent = new TaskAfterCreateEvent({
|
|
147
|
+
input: data,
|
|
148
|
+
task
|
|
149
|
+
});
|
|
150
|
+
await eventPublisher.publish(afterCreateEvent);
|
|
151
|
+
return task;
|
|
152
|
+
};
|
|
153
|
+
const updateTask = async (id, data)=>{
|
|
154
|
+
const original = await getTask(id);
|
|
155
|
+
if (!original) throw new TaskNotFoundError();
|
|
156
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
157
|
+
const eventPublisher = context.container.resolve(EventPublisher);
|
|
158
|
+
const beforeUpdateEvent = new TaskBeforeUpdateEvent({
|
|
159
|
+
input: data,
|
|
160
|
+
original
|
|
161
|
+
});
|
|
162
|
+
await eventPublisher.publish(beforeUpdateEvent);
|
|
163
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
164
|
+
const model = await getTaskModel();
|
|
165
|
+
const updateEntry = context.container.resolve(UpdateEntryUseCase);
|
|
166
|
+
return updateEntry.execute(model, createRevisionId(id), {
|
|
167
|
+
values: {
|
|
168
|
+
...data
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
if (result.isFail()) throw result.error;
|
|
173
|
+
const task = convertToTask(result.value);
|
|
174
|
+
const afterUpdateEvent = new TaskAfterUpdateEvent({
|
|
175
|
+
input: data,
|
|
176
|
+
task
|
|
177
|
+
});
|
|
178
|
+
await eventPublisher.publish(afterUpdateEvent);
|
|
179
|
+
return task;
|
|
180
|
+
};
|
|
181
|
+
const deleteTask = async (id)=>{
|
|
182
|
+
const task = await getTask(id);
|
|
183
|
+
if (!task) throw new TaskNotFoundError();
|
|
184
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
185
|
+
const eventPublisher = context.container.resolve(EventPublisher);
|
|
186
|
+
const beforeDeleteEvent = new TaskBeforeDeleteEvent({
|
|
187
|
+
task
|
|
188
|
+
});
|
|
189
|
+
await eventPublisher.publish(beforeDeleteEvent);
|
|
190
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
191
|
+
const model = await getTaskModel();
|
|
192
|
+
const deleteEntry = context.container.resolve(DeleteEntryUseCase);
|
|
193
|
+
return deleteEntry.execute(model, createRevisionId(id));
|
|
194
|
+
});
|
|
195
|
+
if (result.isFail()) throw new TaskNotFoundError();
|
|
196
|
+
const afterDeleteEvent = new TaskAfterDeleteEvent({
|
|
197
|
+
task
|
|
198
|
+
});
|
|
199
|
+
await eventPublisher.publish(afterDeleteEvent);
|
|
200
|
+
return true;
|
|
201
|
+
};
|
|
202
|
+
const createLog = async (task, data)=>{
|
|
203
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
204
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
205
|
+
const model = await getLogModel();
|
|
206
|
+
const createEntry = context.container.resolve(CreateEntryUseCase);
|
|
207
|
+
return createEntry.execute(model, {
|
|
208
|
+
values: {
|
|
209
|
+
...data,
|
|
210
|
+
task: task.id
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
if (result.isFail()) throw result.error;
|
|
215
|
+
return convertToLog(result.value);
|
|
216
|
+
};
|
|
217
|
+
const updateLog = async (id, data)=>{
|
|
218
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
219
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
220
|
+
const model = await getLogModel();
|
|
221
|
+
const updateEntry = context.container.resolve(UpdateEntryUseCase);
|
|
222
|
+
return updateEntry.execute(model, createRevisionId(id), {
|
|
223
|
+
values: data
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
if (result.isFail()) throw new TaskLogNotFoundError();
|
|
227
|
+
return convertToLog(result.value);
|
|
228
|
+
};
|
|
229
|
+
const deleteLog = async (id)=>{
|
|
230
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
231
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
232
|
+
const model = await getLogModel();
|
|
233
|
+
const deleteEntry = context.container.resolve(DeleteEntryUseCase);
|
|
234
|
+
return deleteEntry.execute(model, id);
|
|
235
|
+
});
|
|
236
|
+
if (result.isFail()) throw new TaskLogNotFoundError();
|
|
237
|
+
return true;
|
|
238
|
+
};
|
|
239
|
+
const getLog = async (id)=>{
|
|
240
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
241
|
+
try {
|
|
242
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
243
|
+
const model = await getLogModel();
|
|
244
|
+
const getEntryById = context.container.resolve(GetEntryByIdUseCase);
|
|
245
|
+
return getEntryById.execute(model, id);
|
|
246
|
+
});
|
|
247
|
+
if (result.isFail()) throw result.error;
|
|
248
|
+
return convertToLog(result.value);
|
|
249
|
+
} catch (ex) {
|
|
250
|
+
if (ex instanceof NotFoundError) return null;
|
|
251
|
+
throw ex;
|
|
256
252
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
}
|
|
303
|
-
if (ex instanceof NotFoundError) {
|
|
304
|
-
return null;
|
|
305
|
-
}
|
|
306
|
-
throw ex;
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
const getLatestLog = async taskId => {
|
|
310
|
-
const identityContext = context.container.resolve(IdentityContext);
|
|
311
|
-
const entry = await identityContext.withoutAuthorization(async () => {
|
|
312
|
-
const model = await getLogModel();
|
|
313
|
-
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
314
|
-
const result = await listLatestEntries.execute(model, {
|
|
315
|
-
where: {
|
|
316
|
-
values: {
|
|
317
|
-
task: taskId
|
|
318
|
-
}
|
|
319
|
-
},
|
|
320
|
-
sort: ["createdOn_DESC"],
|
|
321
|
-
limit: 1
|
|
322
|
-
});
|
|
323
|
-
if (result.isFail()) {
|
|
324
|
-
throw result.error;
|
|
325
|
-
}
|
|
326
|
-
const {
|
|
327
|
-
entries
|
|
328
|
-
} = result.value;
|
|
329
|
-
const [item] = entries;
|
|
330
|
-
if (!item) {
|
|
331
|
-
throw new NotFoundError(`No existing latest log found for task "${taskId}".`);
|
|
332
|
-
}
|
|
333
|
-
return item;
|
|
334
|
-
});
|
|
335
|
-
return convertToLog(entry);
|
|
336
|
-
};
|
|
337
|
-
const cleanupTaskSubtree = createCleanupTaskSubtree(context);
|
|
338
|
-
const listLogs = async params => {
|
|
339
|
-
const identityContext = context.container.resolve(IdentityContext);
|
|
340
|
-
const {
|
|
341
|
-
entries,
|
|
342
|
-
meta
|
|
343
|
-
} = await identityContext.withoutAuthorization(async () => {
|
|
344
|
-
const model = await getLogModel();
|
|
345
|
-
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
346
|
-
const result = await listLatestEntries.execute(model, {
|
|
347
|
-
...params,
|
|
348
|
-
where: cmsWhereMapper.map({
|
|
349
|
-
input: params.where,
|
|
350
|
-
fields: model.fields
|
|
351
|
-
})
|
|
352
|
-
});
|
|
353
|
-
if (result.isFail()) {
|
|
354
|
-
throw result.error;
|
|
355
|
-
}
|
|
356
|
-
return result.value;
|
|
357
|
-
});
|
|
253
|
+
};
|
|
254
|
+
const getLatestLog = async (taskId)=>{
|
|
255
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
256
|
+
const entry = await identityContext.withoutAuthorization(async ()=>{
|
|
257
|
+
const model = await getLogModel();
|
|
258
|
+
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
259
|
+
const result = await listLatestEntries.execute(model, {
|
|
260
|
+
where: {
|
|
261
|
+
values: {
|
|
262
|
+
task: taskId
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
sort: [
|
|
266
|
+
"createdOn_DESC"
|
|
267
|
+
],
|
|
268
|
+
limit: 1
|
|
269
|
+
});
|
|
270
|
+
if (result.isFail()) throw result.error;
|
|
271
|
+
const { entries } = result.value;
|
|
272
|
+
const [item] = entries;
|
|
273
|
+
if (!item) throw new NotFoundError(`No existing latest log found for task "${taskId}".`);
|
|
274
|
+
return item;
|
|
275
|
+
});
|
|
276
|
+
return convertToLog(entry);
|
|
277
|
+
};
|
|
278
|
+
const cleanupTaskSubtree = createCleanupTaskSubtree(context);
|
|
279
|
+
const listLogs = async (params)=>{
|
|
280
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
281
|
+
const { entries, meta } = await identityContext.withoutAuthorization(async ()=>{
|
|
282
|
+
const model = await getLogModel();
|
|
283
|
+
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
284
|
+
const result = await listLatestEntries.execute(model, {
|
|
285
|
+
...params,
|
|
286
|
+
where: cmsWhereMapper.map({
|
|
287
|
+
input: params.where,
|
|
288
|
+
fields: model.fields
|
|
289
|
+
})
|
|
290
|
+
});
|
|
291
|
+
if (result.isFail()) throw result.error;
|
|
292
|
+
return result.value;
|
|
293
|
+
});
|
|
294
|
+
return {
|
|
295
|
+
items: entries.map((item)=>convertToLog(item)),
|
|
296
|
+
meta
|
|
297
|
+
};
|
|
298
|
+
};
|
|
358
299
|
return {
|
|
359
|
-
|
|
360
|
-
|
|
300
|
+
getTask,
|
|
301
|
+
listTasks,
|
|
302
|
+
createTask,
|
|
303
|
+
updateTask,
|
|
304
|
+
deleteTask,
|
|
305
|
+
cleanupTaskSubtree,
|
|
306
|
+
createLog,
|
|
307
|
+
updateLog,
|
|
308
|
+
deleteLog,
|
|
309
|
+
getLog,
|
|
310
|
+
listLogs,
|
|
311
|
+
getLatestLog,
|
|
312
|
+
getTaskModel,
|
|
313
|
+
getLogModel
|
|
361
314
|
};
|
|
362
|
-
};
|
|
363
|
-
return {
|
|
364
|
-
getTask,
|
|
365
|
-
listTasks,
|
|
366
|
-
createTask,
|
|
367
|
-
updateTask,
|
|
368
|
-
deleteTask,
|
|
369
|
-
cleanupTaskSubtree,
|
|
370
|
-
createLog,
|
|
371
|
-
updateLog,
|
|
372
|
-
deleteLog,
|
|
373
|
-
getLog,
|
|
374
|
-
listLogs,
|
|
375
|
-
getLatestLog,
|
|
376
|
-
getTaskModel,
|
|
377
|
-
getLogModel
|
|
378
|
-
};
|
|
379
315
|
};
|
|
316
|
+
export { createTaskCrud };
|
|
380
317
|
|
|
381
318
|
//# sourceMappingURL=crud.tasks.js.map
|