@webiny/api-headless-cms-tasks 0.0.0-unstable.a4637c5ce6 → 0.0.0-unstable.a4f3e4ea8b
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/README.md +10 -14
- package/constants.js +4 -0
- package/constants.js.map +1 -0
- package/features/DeleteModelTask/DeleteModel.d.ts +16 -0
- package/features/DeleteModelTask/DeleteModel.js +105 -0
- package/features/DeleteModelTask/DeleteModel.js.map +1 -0
- package/features/DeleteModelTask/DeleteModelTask.d.ts +25 -0
- package/features/DeleteModelTask/DeleteModelTask.js +42 -0
- package/features/DeleteModelTask/DeleteModelTask.js.map +1 -0
- package/features/DeleteModelTask/feature.d.ts +4 -0
- package/features/DeleteModelTask/feature.js +11 -0
- package/features/DeleteModelTask/feature.js.map +1 -0
- package/{tasks/deleteModel → features/DeleteModelTask}/types.d.ts +4 -5
- package/features/DeleteModelTask/types.js +10 -0
- package/features/DeleteModelTask/types.js.map +1 -0
- package/features/DisableModel/BlockActionIfModelDisabled.d.ts +8 -0
- package/features/DisableModel/BlockActionIfModelDisabled.js +14 -0
- package/features/DisableModel/BlockActionIfModelDisabled.js.map +1 -0
- package/features/DisableModel/abstractions.d.ts +8 -0
- package/features/DisableModel/abstractions.js +5 -0
- package/features/DisableModel/abstractions.js.map +1 -0
- package/features/DisableModel/feature.d.ts +8 -0
- package/features/DisableModel/feature.js +32 -0
- package/features/DisableModel/feature.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeCreate.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeCreate.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeCreate.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeMove.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeMove.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeMove.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforePublish.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforePublish.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforePublish.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeRepublish.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeRepublish.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeRepublish.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeRestoreFromBin.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeRestoreFromBin.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeRestoreFromBin.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeUnpublish.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeUnpublish.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeUnpublish.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeUpdate.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeUpdate.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryBeforeUpdate.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryRevisionBeforeCreate.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryRevisionBeforeCreate.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnEntryRevisionBeforeCreate.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnModelBeforeCreateFrom.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnModelBeforeCreateFrom.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnModelBeforeCreateFrom.js.map +1 -0
- package/features/DisableModel/handlers/BlockModelActionOnModelBeforeUpdate.d.ts +11 -0
- package/features/DisableModel/handlers/BlockModelActionOnModelBeforeUpdate.js +19 -0
- package/features/DisableModel/handlers/BlockModelActionOnModelBeforeUpdate.js.map +1 -0
- package/features/DisableModel/index.d.ts +1 -0
- package/features/DisableModel/index.js +1 -0
- package/{tasks/deleteModel/graphql → graphql/deleteModel}/cancelDeleteModel.d.ts +3 -3
- package/graphql/deleteModel/cancelDeleteModel.js +57 -0
- package/graphql/deleteModel/cancelDeleteModel.js.map +1 -0
- package/{tasks/deleteModel/graphql → graphql/deleteModel}/crud.d.ts +1 -1
- package/graphql/deleteModel/crud.js +63 -0
- package/graphql/deleteModel/crud.js.map +1 -0
- package/{tasks/deleteModel/graphql → graphql/deleteModel}/fullyDeleteModel.d.ts +2 -2
- package/graphql/deleteModel/fullyDeleteModel.js +51 -0
- package/graphql/deleteModel/fullyDeleteModel.js.map +1 -0
- package/{tasks/deleteModel/graphql → graphql/deleteModel}/getDeleteModelProgress.d.ts +2 -2
- package/graphql/deleteModel/getDeleteModelProgress.js +54 -0
- package/graphql/deleteModel/getDeleteModelProgress.js.map +1 -0
- package/{tasks/deleteModel/graphql → graphql/deleteModel}/index.d.ts +1 -1
- package/graphql/deleteModel/index.js +140 -0
- package/graphql/deleteModel/index.js.map +1 -0
- package/graphql/deleteModel/status.d.ts +3 -0
- package/graphql/deleteModel/status.js +18 -0
- package/graphql/deleteModel/status.js.map +1 -0
- package/helpers/confirmation.js +9 -0
- package/helpers/confirmation.js.map +1 -0
- package/{tasks/deleteModel/helpers → helpers}/store.d.ts +3 -4
- package/helpers/store.js +11 -0
- package/helpers/store.js.map +1 -0
- package/index.d.ts +2 -3
- package/index.js +20 -17
- package/index.js.map +1 -1
- package/package.json +31 -29
- package/types.d.ts +4 -4
- package/types.js +0 -7
- package/tasks/deleteModel/DeleteModelRunner.d.ts +0 -19
- package/tasks/deleteModel/DeleteModelRunner.js +0 -139
- package/tasks/deleteModel/DeleteModelRunner.js.map +0 -1
- package/tasks/deleteModel/constants.js +0 -9
- package/tasks/deleteModel/constants.js.map +0 -1
- package/tasks/deleteModel/graphql/attachLifecycleEvents.d.ts +0 -5
- package/tasks/deleteModel/graphql/attachLifecycleEvents.js +0 -40
- package/tasks/deleteModel/graphql/attachLifecycleEvents.js.map +0 -1
- package/tasks/deleteModel/graphql/cancelDeleteModel.js +0 -64
- package/tasks/deleteModel/graphql/cancelDeleteModel.js.map +0 -1
- package/tasks/deleteModel/graphql/crud.js +0 -82
- package/tasks/deleteModel/graphql/crud.js.map +0 -1
- package/tasks/deleteModel/graphql/fullyDeleteModel.js +0 -57
- package/tasks/deleteModel/graphql/fullyDeleteModel.js.map +0 -1
- package/tasks/deleteModel/graphql/getDeleteModelProgress.js +0 -66
- package/tasks/deleteModel/graphql/getDeleteModelProgress.js.map +0 -1
- package/tasks/deleteModel/graphql/index.js +0 -166
- package/tasks/deleteModel/graphql/index.js.map +0 -1
- package/tasks/deleteModel/graphql/isModelBeingDeleted.d.ts +0 -5
- package/tasks/deleteModel/graphql/isModelBeingDeleted.js +0 -15
- package/tasks/deleteModel/graphql/isModelBeingDeleted.js.map +0 -1
- package/tasks/deleteModel/graphql/status.d.ts +0 -3
- package/tasks/deleteModel/graphql/status.js +0 -24
- package/tasks/deleteModel/graphql/status.js.map +0 -1
- package/tasks/deleteModel/helpers/confirmation.js +0 -23
- package/tasks/deleteModel/helpers/confirmation.js.map +0 -1
- package/tasks/deleteModel/helpers/store.js +0 -26
- package/tasks/deleteModel/helpers/store.js.map +0 -1
- package/tasks/deleteModel/index.d.ts +0 -3
- package/tasks/deleteModel/index.js +0 -50
- package/tasks/deleteModel/index.js.map +0 -1
- package/tasks/deleteModel/types.js +0 -15
- package/tasks/deleteModel/types.js.map +0 -1
- package/types.js.map +0 -1
- /package/{tasks/deleteModel/constants.d.ts → constants.d.ts} +0 -0
- /package/{tasks/deleteModel/helpers → helpers}/confirmation.d.ts +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import zod from "zod";
|
|
2
|
+
import { ContextPlugin } from "@webiny/api";
|
|
3
|
+
import { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from "@webiny/api-headless-cms";
|
|
4
|
+
import { ErrorResponse, Response, createResolverDecorator, resolve } from "@webiny/handler-graphql";
|
|
5
|
+
import { createZodError } from "@webiny/utils";
|
|
6
|
+
import { validateConfirmation } from "../../helpers/confirmation.js";
|
|
7
|
+
const deleteValidation = zod.object({
|
|
8
|
+
modelId: zod.string(),
|
|
9
|
+
confirmation: zod.string()
|
|
10
|
+
}).superRefine((value, context)=>{
|
|
11
|
+
if (validateConfirmation(value)) return;
|
|
12
|
+
context.addIssue({
|
|
13
|
+
code: zod.ZodIssueCode.custom,
|
|
14
|
+
message: "Confirmation input does not match.",
|
|
15
|
+
fatal: true,
|
|
16
|
+
path: [
|
|
17
|
+
"confirmation"
|
|
18
|
+
]
|
|
19
|
+
});
|
|
20
|
+
}).readonly();
|
|
21
|
+
const cancelValidation = zod.object({
|
|
22
|
+
modelId: zod.string()
|
|
23
|
+
}).readonly();
|
|
24
|
+
const getValidation = zod.object({
|
|
25
|
+
modelId: zod.string()
|
|
26
|
+
}).readonly();
|
|
27
|
+
const createDeleteModelGraphQl = ()=>{
|
|
28
|
+
const contextPlugin = new ContextPlugin(async (inputContext)=>{
|
|
29
|
+
const ready = await isHeadlessCmsReady(inputContext);
|
|
30
|
+
if (!ready || !inputContext.cms.MANAGE) return;
|
|
31
|
+
const plugin = new CmsGraphQLSchemaPlugin({
|
|
32
|
+
typeDefs: `
|
|
33
|
+
enum DeleteCmsModelTaskStatus {
|
|
34
|
+
running
|
|
35
|
+
done
|
|
36
|
+
error
|
|
37
|
+
canceled
|
|
38
|
+
}
|
|
39
|
+
type DeleteCmsModelTask {
|
|
40
|
+
id: ID!
|
|
41
|
+
status: DeleteCmsModelTaskStatus!
|
|
42
|
+
deleted: Int!
|
|
43
|
+
total: Int!
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
type GetDeleteCmsModelProgressResponse {
|
|
47
|
+
data: DeleteCmsModelTask
|
|
48
|
+
error: CmsError
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
type FullyDeleteCmsModelResponse {
|
|
52
|
+
data: DeleteCmsModelTask
|
|
53
|
+
error: CmsError
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
type CancelDeleteCmsModelResponse {
|
|
57
|
+
data: DeleteCmsModelTask
|
|
58
|
+
error: CmsError
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
extend type CmsContentModel {
|
|
62
|
+
isBeingDeleted: Boolean!
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
extend type Query {
|
|
66
|
+
getDeleteModelProgress(modelId: ID!): GetDeleteCmsModelProgressResponse!
|
|
67
|
+
listContentModels(
|
|
68
|
+
includeBeingDeleted: Boolean = false
|
|
69
|
+
): CmsContentModelListResponse
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
extend type Mutation {
|
|
73
|
+
fullyDeleteModel(
|
|
74
|
+
modelId: ID!
|
|
75
|
+
confirmation: String!
|
|
76
|
+
): FullyDeleteCmsModelResponse!
|
|
77
|
+
cancelFullyDeleteModel(modelId: ID!): CancelDeleteCmsModelResponse!
|
|
78
|
+
}
|
|
79
|
+
`,
|
|
80
|
+
resolvers: {
|
|
81
|
+
CmsContentModel: {
|
|
82
|
+
isBeingDeleted: async (model, _, context)=>{
|
|
83
|
+
try {
|
|
84
|
+
return await context.cms.isModelBeingDeleted(model.modelId);
|
|
85
|
+
} catch (ex) {
|
|
86
|
+
console.error(ex);
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
Query: {
|
|
92
|
+
getDeleteModelProgress: async (_, args, context)=>resolve(async ()=>{
|
|
93
|
+
const input = getValidation.safeParse(args);
|
|
94
|
+
if (input.error) throw createZodError(input.error);
|
|
95
|
+
return await context.cms.getDeleteModelProgress(input.data.modelId);
|
|
96
|
+
})
|
|
97
|
+
},
|
|
98
|
+
Mutation: {
|
|
99
|
+
fullyDeleteModel: async (_, args, context)=>resolve(async ()=>{
|
|
100
|
+
const input = deleteValidation.safeParse(args);
|
|
101
|
+
if (input.error) throw createZodError(input.error);
|
|
102
|
+
return await context.cms.fullyDeleteModel(input.data.modelId);
|
|
103
|
+
}),
|
|
104
|
+
cancelFullyDeleteModel: async (_, args, context)=>resolve(async ()=>{
|
|
105
|
+
const input = cancelValidation.safeParse(args);
|
|
106
|
+
if (input.error) throw createZodError(input.error);
|
|
107
|
+
return await context.cms.cancelFullyDeleteModel(input.data.modelId);
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
resolverDecorators: {
|
|
112
|
+
["Query.listContentModels"]: [
|
|
113
|
+
createResolverDecorator((resolver)=>async (parent, args, context, info)=>{
|
|
114
|
+
const result = await resolver(parent, args, context, info);
|
|
115
|
+
if (result.error || !Array.isArray(result.data)) return result;
|
|
116
|
+
if (args?.includeBeingDeleted !== false) return result;
|
|
117
|
+
const listed = result.data;
|
|
118
|
+
try {
|
|
119
|
+
const beingDeletedList = await context.cms.listModelsBeingDeleted();
|
|
120
|
+
return new Response(listed.filter((model)=>{
|
|
121
|
+
if (!model?.modelId) return false;
|
|
122
|
+
if (beingDeletedList.some((item)=>item.modelId === model.modelId)) return false;
|
|
123
|
+
return true;
|
|
124
|
+
}));
|
|
125
|
+
} catch (ex) {
|
|
126
|
+
return new ErrorResponse(ex);
|
|
127
|
+
}
|
|
128
|
+
})
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
plugin.name = "headless-cms.graphql.fullyDeleteModel";
|
|
133
|
+
inputContext.plugins.register(plugin);
|
|
134
|
+
});
|
|
135
|
+
contextPlugin.name = "headless-cms.context.createDeleteModelGraphQl";
|
|
136
|
+
return contextPlugin;
|
|
137
|
+
};
|
|
138
|
+
export { createDeleteModelGraphQl };
|
|
139
|
+
|
|
140
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/deleteModel/index.js","sources":["../../../src/graphql/deleteModel/index.ts"],"sourcesContent":["import zod from \"zod\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { CmsGraphQLSchemaPlugin } from \"@webiny/api-headless-cms\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { HcmsTasksContext } from \"~/types.js\";\nimport { createResolverDecorator } from \"@webiny/handler-graphql\";\nimport { ErrorResponse } from \"@webiny/handler-graphql\";\nimport { resolve } from \"@webiny/handler-graphql\";\nimport { Response } from \"@webiny/handler-graphql\";\nimport { createZodError } from \"@webiny/utils\";\nimport type { IDeleteCmsModelTask } from \"~/features/DeleteModelTask/types.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { validateConfirmation } from \"~/helpers/confirmation.js\";\n\nconst deleteValidation = zod\n .object({\n modelId: zod.string(),\n confirmation: zod.string()\n })\n .superRefine((value, context) => {\n if (validateConfirmation(value)) {\n return;\n }\n context.addIssue({\n code: zod.ZodIssueCode.custom,\n message: `Confirmation input does not match.`,\n fatal: true,\n path: [\"confirmation\"]\n });\n })\n .readonly();\n\nconst cancelValidation = zod\n .object({\n modelId: zod.string()\n })\n .readonly();\n\nconst getValidation = zod\n .object({\n modelId: zod.string()\n })\n .readonly();\n\nexport const createDeleteModelGraphQl = <T extends HcmsTasksContext = HcmsTasksContext>() => {\n const contextPlugin = new ContextPlugin<T>(async inputContext => {\n const ready = await isHeadlessCmsReady(inputContext);\n\n if (!ready || !inputContext.cms.MANAGE) {\n return;\n }\n\n const plugin = new CmsGraphQLSchemaPlugin<T>({\n typeDefs: /* GraphQL */ `\n enum DeleteCmsModelTaskStatus {\n running\n done\n error\n canceled\n }\n type DeleteCmsModelTask {\n id: ID!\n status: DeleteCmsModelTaskStatus!\n deleted: Int!\n total: Int!\n }\n\n type GetDeleteCmsModelProgressResponse {\n data: DeleteCmsModelTask\n error: CmsError\n }\n\n type FullyDeleteCmsModelResponse {\n data: DeleteCmsModelTask\n error: CmsError\n }\n\n type CancelDeleteCmsModelResponse {\n data: DeleteCmsModelTask\n error: CmsError\n }\n\n extend type CmsContentModel {\n isBeingDeleted: Boolean!\n }\n\n extend type Query {\n getDeleteModelProgress(modelId: ID!): GetDeleteCmsModelProgressResponse!\n listContentModels(\n includeBeingDeleted: Boolean = false\n ): CmsContentModelListResponse\n }\n\n extend type Mutation {\n fullyDeleteModel(\n modelId: ID!\n confirmation: String!\n ): FullyDeleteCmsModelResponse!\n cancelFullyDeleteModel(modelId: ID!): CancelDeleteCmsModelResponse!\n }\n `,\n resolvers: {\n CmsContentModel: {\n isBeingDeleted: async (model: CmsModel, _: unknown, context) => {\n try {\n return await context.cms.isModelBeingDeleted(model.modelId);\n } catch (ex) {\n console.error(ex);\n }\n return true;\n }\n },\n Query: {\n getDeleteModelProgress: async (_: unknown, args: unknown, context) => {\n return resolve<IDeleteCmsModelTask>(async () => {\n const input = getValidation.safeParse(args);\n if (input.error) {\n throw createZodError(input.error);\n }\n return await context.cms.getDeleteModelProgress(input.data.modelId);\n });\n }\n },\n Mutation: {\n fullyDeleteModel: async (_: unknown, args: unknown, context) => {\n return resolve<IDeleteCmsModelTask>(async () => {\n const input = deleteValidation.safeParse(args);\n if (input.error) {\n throw createZodError(input.error);\n }\n return await context.cms.fullyDeleteModel(input.data.modelId);\n });\n },\n cancelFullyDeleteModel: async (_: unknown, args: unknown, context) => {\n return resolve<IDeleteCmsModelTask>(async () => {\n const input = cancelValidation.safeParse(args);\n if (input.error) {\n throw createZodError(input.error);\n }\n return await context.cms.cancelFullyDeleteModel(input.data.modelId);\n });\n }\n }\n },\n resolverDecorators: {\n [\"Query.listContentModels\"]: [\n createResolverDecorator<any, any, HcmsTasksContext>(\n resolver => async (parent, args, context, info) => {\n // TODO @bruno figure out how to fix these types\n const result = (await resolver(parent, args, context, info)) as any;\n if (result.error || !Array.isArray(result.data)) {\n return result;\n }\n\n if (args?.includeBeingDeleted !== false) {\n return result;\n }\n\n const listed = result.data as CmsModel[];\n\n try {\n const beingDeletedList = await context.cms.listModelsBeingDeleted();\n\n return new Response(\n listed.filter(model => {\n if (!model?.modelId) {\n return false;\n } else if (\n beingDeletedList.some(\n item => item.modelId === model.modelId\n )\n ) {\n return false;\n }\n return true;\n })\n );\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n )\n ]\n }\n });\n plugin.name = \"headless-cms.graphql.fullyDeleteModel\";\n inputContext.plugins.register(plugin);\n });\n contextPlugin.name = \"headless-cms.context.createDeleteModelGraphQl\";\n return contextPlugin;\n};\n"],"names":["deleteValidation","zod","value","context","validateConfirmation","cancelValidation","getValidation","createDeleteModelGraphQl","contextPlugin","ContextPlugin","inputContext","ready","isHeadlessCmsReady","plugin","CmsGraphQLSchemaPlugin","model","_","ex","console","args","resolve","input","createZodError","createResolverDecorator","resolver","parent","info","result","Array","listed","beingDeletedList","Response","item","ErrorResponse"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DeleteCmsModelTaskStatus } from "../../features/DeleteModelTask/types.js";
|
|
2
|
+
import { TaskDataStatus } from "@webiny/api-core/features/task/TaskService/index.js";
|
|
3
|
+
const getStatus = (status)=>{
|
|
4
|
+
switch(status){
|
|
5
|
+
case TaskDataStatus.PENDING:
|
|
6
|
+
case TaskDataStatus.RUNNING:
|
|
7
|
+
return DeleteCmsModelTaskStatus.RUNNING;
|
|
8
|
+
case TaskDataStatus.FAILED:
|
|
9
|
+
return DeleteCmsModelTaskStatus.ERROR;
|
|
10
|
+
case TaskDataStatus.ABORTED:
|
|
11
|
+
return DeleteCmsModelTaskStatus.CANCELED;
|
|
12
|
+
case TaskDataStatus.SUCCESS:
|
|
13
|
+
return DeleteCmsModelTaskStatus.DONE;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export { getStatus };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/deleteModel/status.js","sources":["../../../src/graphql/deleteModel/status.ts"],"sourcesContent":["import { DeleteCmsModelTaskStatus } from \"~/features/DeleteModelTask/types.js\";\nimport { TaskDataStatus } from \"@webiny/api-core/features/task/TaskService/index.js\";\n\nexport const getStatus = (status: TaskDataStatus): DeleteCmsModelTaskStatus => {\n switch (status) {\n case TaskDataStatus.PENDING:\n case TaskDataStatus.RUNNING:\n return DeleteCmsModelTaskStatus.RUNNING;\n case TaskDataStatus.FAILED:\n return DeleteCmsModelTaskStatus.ERROR;\n case TaskDataStatus.ABORTED:\n return DeleteCmsModelTaskStatus.CANCELED;\n case TaskDataStatus.SUCCESS:\n return DeleteCmsModelTaskStatus.DONE;\n }\n};\n"],"names":["getStatus","status","TaskDataStatus","DeleteCmsModelTaskStatus"],"mappings":";;AAGO,MAAMA,YAAY,CAACC;IACtB,OAAQA;QACJ,KAAKC,eAAe,OAAO;QAC3B,KAAKA,eAAe,OAAO;YACvB,OAAOC,yBAAyB,OAAO;QAC3C,KAAKD,eAAe,MAAM;YACtB,OAAOC,yBAAyB,KAAK;QACzC,KAAKD,eAAe,OAAO;YACvB,OAAOC,yBAAyB,QAAQ;QAC5C,KAAKD,eAAe,OAAO;YACvB,OAAOC,yBAAyB,IAAI;IAC5C;AACJ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const generateConfirmation = (modelId)=>`delete ${modelId}`;
|
|
2
|
+
const validateConfirmation = (params)=>{
|
|
3
|
+
const { modelId, confirmation } = params;
|
|
4
|
+
if (!modelId || !confirmation) return false;
|
|
5
|
+
return confirmation === generateConfirmation(modelId);
|
|
6
|
+
};
|
|
7
|
+
export { generateConfirmation, validateConfirmation };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=confirmation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers/confirmation.js","sources":["../../src/helpers/confirmation.ts"],"sourcesContent":["export const generateConfirmation = (modelId: string): string => {\n return `delete ${modelId}`;\n};\n\nexport interface IValidateConfirmationParams {\n modelId?: string;\n confirmation?: string;\n}\nexport const validateConfirmation = (params: IValidateConfirmationParams): boolean => {\n const { modelId, confirmation } = params;\n if (!modelId || !confirmation) {\n return false;\n }\n return confirmation === generateConfirmation(modelId);\n};\n"],"names":["generateConfirmation","modelId","validateConfirmation","params","confirmation"],"mappings":"AAAO,MAAMA,uBAAuB,CAACC,UAC1B,CAAC,OAAO,EAAEA,SAAS;AAOvB,MAAMC,uBAAuB,CAACC;IACjC,MAAM,EAAEF,OAAO,EAAEG,YAAY,EAAE,GAAGD;IAClC,IAAI,CAACF,WAAW,CAACG,cACb,OAAO;IAEX,OAAOA,iBAAiBJ,qBAAqBC;AACjD"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { StorageKey } from "@webiny/db/types.js";
|
|
2
|
+
import type { IStoreValue } from "../features/DeleteModelTask/types.js";
|
|
3
3
|
export interface ICreateStoreKeyParams {
|
|
4
4
|
modelId: string;
|
|
5
5
|
tenant: string;
|
|
6
|
-
locale: string;
|
|
7
6
|
}
|
|
8
|
-
export declare const createStoreNamespace: (params: Pick<ICreateStoreKeyParams, "tenant"
|
|
7
|
+
export declare const createStoreNamespace: (params: Pick<ICreateStoreKeyParams, "tenant">) => string;
|
|
9
8
|
export declare const createStoreKey: (params: ICreateStoreKeyParams) => StorageKey;
|
|
10
9
|
export declare const createStoreValue: (params: IStoreValue) => IStoreValue;
|
package/helpers/store.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const createStoreNamespace = (params)=>`deletingCmsModel#T#${params.tenant}#`;
|
|
2
|
+
const createStoreKey = (params)=>`${createStoreNamespace(params)}${params.modelId}`;
|
|
3
|
+
const createStoreValue = (params)=>({
|
|
4
|
+
modelId: params.modelId,
|
|
5
|
+
task: params.task,
|
|
6
|
+
identity: params.identity,
|
|
7
|
+
tenant: params.tenant
|
|
8
|
+
});
|
|
9
|
+
export { createStoreKey, createStoreNamespace, createStoreValue };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers/store.js","sources":["../../src/helpers/store.ts"],"sourcesContent":["import type { StorageKey } from \"@webiny/db/types.js\";\nimport type { IStoreValue } from \"~/features/DeleteModelTask/types.js\";\n\nexport interface ICreateStoreKeyParams {\n modelId: string;\n tenant: string;\n}\n\nexport const createStoreNamespace = (params: Pick<ICreateStoreKeyParams, \"tenant\">) => {\n return `deletingCmsModel#T#${params.tenant}#`;\n};\n\nexport const createStoreKey = (params: ICreateStoreKeyParams): StorageKey => {\n return `${createStoreNamespace(params)}${params.modelId}`;\n};\n\nexport const createStoreValue = (params: IStoreValue): IStoreValue => {\n return {\n modelId: params.modelId,\n task: params.task,\n identity: params.identity,\n tenant: params.tenant\n };\n};\n"],"names":["createStoreNamespace","params","createStoreKey","createStoreValue"],"mappings":"AAQO,MAAMA,uBAAuB,CAACC,SAC1B,CAAC,mBAAmB,EAAEA,OAAO,MAAM,CAAC,CAAC,CAAC;AAG1C,MAAMC,iBAAiB,CAACD,SACpB,GAAGD,qBAAqBC,UAAUA,OAAO,OAAO,EAAE;AAGtD,MAAME,mBAAmB,CAACF,SACtB;QACH,SAASA,OAAO,OAAO;QACvB,MAAMA,OAAO,IAAI;QACjB,UAAUA,OAAO,QAAQ;QACzB,QAAQA,OAAO,MAAM;IACzB"}
|
package/index.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export declare const createHcmsTasks: () => ((import("@webiny/api").ContextPlugin<import("./types").HcmsTasksContext> | import("@webiny/tasks").TaskDefinitionPlugin<import("./types").HcmsTasksContext, import("./tasks/deleteModel/types").IDeleteModelTaskInput, import("./tasks/deleteModel/types").IDeleteModelTaskOutput>)[] | ((import("@webiny/handler-aws").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler").HandlerOnRequestPlugin<import("@webiny/handler/types").Context>)[] | import("@webiny/api").ContextPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext>)[] | (import("@webiny/api").ContextPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext> | (import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationByModelInput, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationByModelOutput> | import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationInput, import("@webiny/api-headless-cms-bulk-actions/types").IBulkActionOperationOutput>)[])[][] | import("@webiny/tasks").TaskDefinitionPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext, import("@webiny/api-headless-cms-bulk-actions/types").IEmptyTrashBinsInput, import("@webiny/tasks").ITaskResponseDoneResultOutput> | import("@webiny/plugins/types").Plugin[])[];
|
|
1
|
+
export declare const createDeleteModelTask: () => import("@webiny/api").ContextPlugin<import("@webiny/api/types").Context>[];
|
|
2
|
+
export declare const createHcmsTasks: () => (((import("@webiny/handler-aws/eventBridge").EventBridgeEventHandler<"WebinyEmptyTrashBin", Record<string, any>, any> | import("@webiny/handler/index").HandlerOnRequestPlugin<import("@webiny/handler/types").Context>)[] | import("@webiny/handler/index").BeforeHandlerPlugin<import("@webiny/api-headless-cms-bulk-actions/types").HcmsBulkActionsContext> | import("@webiny/api").ContextPlugin<import("@webiny/api/types").Context>)[] | import("@webiny/api").ContextPlugin<import("@webiny/api/types").Context>)[];
|
package/index.js
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
import { createEmptyTrashBinsTask, createHcmsBulkActions } from "@webiny/api-headless-cms-bulk-actions";
|
|
2
|
+
import { createContextPlugin } from "@webiny/api";
|
|
3
|
+
import { DeleteModelTaskFeature } from "./features/DeleteModelTask/feature.js";
|
|
4
|
+
import { createDeleteModelCrud } from "./graphql/deleteModel/crud.js";
|
|
5
|
+
import { createDeleteModelGraphQl } from "./graphql/deleteModel/index.js";
|
|
6
|
+
const createDeleteModelTask = ()=>[
|
|
7
|
+
createDeleteModelCrud(),
|
|
8
|
+
createDeleteModelGraphQl(),
|
|
9
|
+
createContextPlugin((context)=>{
|
|
10
|
+
DeleteModelTaskFeature.register(context.container);
|
|
11
|
+
})
|
|
12
|
+
];
|
|
13
|
+
const createHcmsTasks = ()=>[
|
|
14
|
+
createHcmsBulkActions({
|
|
15
|
+
batchSize: 100
|
|
16
|
+
}),
|
|
17
|
+
createEmptyTrashBinsTask(),
|
|
18
|
+
createDeleteModelTask()
|
|
19
|
+
];
|
|
20
|
+
export { createDeleteModelTask, createHcmsTasks };
|
|
18
21
|
|
|
19
22
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import {\n createEmptyTrashBinsTask,\n createHcmsBulkActions\n} from \"@webiny/api-headless-cms-bulk-actions\";\nimport { createContextPlugin } from \"@webiny/api\";\nimport { DeleteModelTaskFeature } from \"~/features/DeleteModelTask/feature.js\";\nimport { createDeleteModelCrud } from \"~/graphql/deleteModel/crud.js\";\nimport { createDeleteModelGraphQl } from \"~/graphql/deleteModel/index.js\";\n\nexport const createDeleteModelTask = () => {\n return [\n createDeleteModelCrud(),\n createDeleteModelGraphQl(),\n createContextPlugin(context => {\n DeleteModelTaskFeature.register(context.container);\n })\n ];\n};\n\nexport const createHcmsTasks = () => [\n createHcmsBulkActions({ batchSize: 100 }),\n createEmptyTrashBinsTask(),\n createDeleteModelTask()\n];\n"],"names":["createDeleteModelTask","createDeleteModelCrud","createDeleteModelGraphQl","createContextPlugin","context","DeleteModelTaskFeature","createHcmsTasks","createHcmsBulkActions","createEmptyTrashBinsTask"],"mappings":";;;;;AASO,MAAMA,wBAAwB,IAC1B;QACHC;QACAC;QACAC,oBAAoBC,CAAAA;YAChBC,uBAAuB,QAAQ,CAACD,QAAQ,SAAS;QACrD;KACH;AAGE,MAAME,kBAAkB,IAAM;QACjCC,sBAAsB;YAAE,WAAW;QAAI;QACvCC;QACAR;KACH"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-headless-cms-tasks",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.0.0-unstable.a4f3e4ea8b",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
5
9
|
"description": "Background tasks for Webiny Headless CMS",
|
|
6
10
|
"keywords": [
|
|
7
11
|
"api-headless-cms-tasks:base"
|
|
@@ -13,36 +17,34 @@
|
|
|
13
17
|
},
|
|
14
18
|
"license": "MIT",
|
|
15
19
|
"dependencies": {
|
|
16
|
-
"@webiny/api": "0.0.0-unstable.
|
|
17
|
-
"@webiny/api-aco": "0.0.0-unstable.
|
|
18
|
-
"@webiny/api-headless-cms": "0.0.0-unstable.
|
|
19
|
-
"@webiny/api-headless-cms-bulk-actions": "0.0.0-unstable.
|
|
20
|
-
"@webiny/
|
|
21
|
-
"@webiny/db": "0.0.0-unstable.
|
|
22
|
-
"@webiny/error": "0.0.0-unstable.
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/
|
|
25
|
-
"@webiny/utils": "0.0.0-unstable.
|
|
26
|
-
"zod": "
|
|
20
|
+
"@webiny/api": "0.0.0-unstable.a4f3e4ea8b",
|
|
21
|
+
"@webiny/api-aco": "0.0.0-unstable.a4f3e4ea8b",
|
|
22
|
+
"@webiny/api-headless-cms": "0.0.0-unstable.a4f3e4ea8b",
|
|
23
|
+
"@webiny/api-headless-cms-bulk-actions": "0.0.0-unstable.a4f3e4ea8b",
|
|
24
|
+
"@webiny/background-tasks": "0.0.0-unstable.a4f3e4ea8b",
|
|
25
|
+
"@webiny/db": "0.0.0-unstable.a4f3e4ea8b",
|
|
26
|
+
"@webiny/error": "0.0.0-unstable.a4f3e4ea8b",
|
|
27
|
+
"@webiny/feature": "0.0.0-unstable.a4f3e4ea8b",
|
|
28
|
+
"@webiny/handler-graphql": "0.0.0-unstable.a4f3e4ea8b",
|
|
29
|
+
"@webiny/utils": "0.0.0-unstable.a4f3e4ea8b",
|
|
30
|
+
"zod": "4.4.3"
|
|
27
31
|
},
|
|
28
32
|
"devDependencies": {
|
|
29
|
-
"@webiny/api-
|
|
30
|
-
"@webiny/api-
|
|
31
|
-
"@webiny/
|
|
32
|
-
"@webiny/
|
|
33
|
-
"@webiny/handler": "0.0.0-unstable.
|
|
34
|
-
"@webiny/
|
|
35
|
-
"@webiny/
|
|
36
|
-
"@webiny/
|
|
37
|
-
"typescript": "
|
|
38
|
-
|
|
39
|
-
"scripts": {
|
|
40
|
-
"build": "node ../cli/bin.js run build",
|
|
41
|
-
"watch": "node ../cli/bin.js run watch"
|
|
33
|
+
"@webiny/api-core": "0.0.0-unstable.a4f3e4ea8b",
|
|
34
|
+
"@webiny/api-opensearch": "0.0.0-unstable.a4f3e4ea8b",
|
|
35
|
+
"@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
|
|
36
|
+
"@webiny/handler": "0.0.0-unstable.a4f3e4ea8b",
|
|
37
|
+
"@webiny/handler-aws": "0.0.0-unstable.a4f3e4ea8b",
|
|
38
|
+
"@webiny/plugins": "0.0.0-unstable.a4f3e4ea8b",
|
|
39
|
+
"@webiny/project-utils": "0.0.0-unstable.a4f3e4ea8b",
|
|
40
|
+
"@webiny/wcp": "0.0.0-unstable.a4f3e4ea8b",
|
|
41
|
+
"typescript": "7.0.2",
|
|
42
|
+
"vitest": "4.1.10"
|
|
42
43
|
},
|
|
43
44
|
"publishConfig": {
|
|
44
|
-
"access": "public"
|
|
45
|
-
"directory": "dist"
|
|
45
|
+
"access": "public"
|
|
46
46
|
},
|
|
47
|
-
"
|
|
47
|
+
"webiny": {
|
|
48
|
+
"publishFrom": "dist"
|
|
49
|
+
}
|
|
48
50
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { HcmsBulkActionsContext } from "@webiny/api-headless-cms-bulk-actions/types";
|
|
2
|
-
import type { AcoContext } from "@webiny/api-aco/types";
|
|
3
|
-
import type { HeadlessCms } from "@webiny/api-headless-cms/types";
|
|
4
|
-
import type { IDeleteCmsModelTask, IStoreValue } from "./
|
|
1
|
+
import type { HcmsBulkActionsContext } from "@webiny/api-headless-cms-bulk-actions/types.js";
|
|
2
|
+
import type { AcoContext } from "@webiny/api-aco/types.js";
|
|
3
|
+
import type { HeadlessCms } from "@webiny/api-headless-cms/types/index.js";
|
|
4
|
+
import type { IDeleteCmsModelTask, IStoreValue } from "./features/DeleteModelTask/types.js";
|
|
5
5
|
export interface HeadlessCmsFullyDeleteModel {
|
|
6
6
|
fullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;
|
|
7
7
|
cancelFullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;
|
package/types.js
CHANGED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { ITaskResponse, ITaskResponseResult, ITaskRunParams } from "@webiny/tasks";
|
|
2
|
-
import type { HcmsTasksContext } from "../../types";
|
|
3
|
-
import type { IDeleteModelTaskInput, IDeleteModelTaskOutput } from "./types";
|
|
4
|
-
export interface IDeleteModelRunnerParams<C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput> {
|
|
5
|
-
taskId: string;
|
|
6
|
-
context: C;
|
|
7
|
-
response: ITaskResponse<I, O>;
|
|
8
|
-
}
|
|
9
|
-
export type IExecuteParams<C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput> = Omit<ITaskRunParams<C, I, O>, "context" | "response" | "store" | "timer" | "trigger">;
|
|
10
|
-
export declare class DeleteModelRunner<C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput> {
|
|
11
|
-
private readonly taskId;
|
|
12
|
-
private readonly context;
|
|
13
|
-
private readonly response;
|
|
14
|
-
constructor(params: IDeleteModelRunnerParams<C, I, O>);
|
|
15
|
-
execute(params: IExecuteParams<C, I, O>): Promise<ITaskResponseResult<I, O>>;
|
|
16
|
-
private getModel;
|
|
17
|
-
private removeBeingDeleted;
|
|
18
|
-
}
|
|
19
|
-
export declare const createDeleteModelRunner: <C extends HcmsTasksContext, I extends IDeleteModelTaskInput, O extends IDeleteModelTaskOutput>(params: IDeleteModelRunnerParams<C, I, O>) => DeleteModelRunner<C, I, O>;
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createDeleteModelRunner = exports.DeleteModelRunner = void 0;
|
|
7
|
-
var _store = require("./helpers/store");
|
|
8
|
-
class DeleteModelRunner {
|
|
9
|
-
constructor(params) {
|
|
10
|
-
this.taskId = params.taskId;
|
|
11
|
-
this.context = params.context;
|
|
12
|
-
this.response = params.response;
|
|
13
|
-
}
|
|
14
|
-
async execute(params) {
|
|
15
|
-
const {
|
|
16
|
-
input,
|
|
17
|
-
isCloseToTimeout,
|
|
18
|
-
isAborted
|
|
19
|
-
} = params;
|
|
20
|
-
const model = await this.getModel(input.modelId);
|
|
21
|
-
let hasMoreItems = false;
|
|
22
|
-
let lastDeletedId = input.lastDeletedId;
|
|
23
|
-
do {
|
|
24
|
-
if (isAborted()) {
|
|
25
|
-
/**
|
|
26
|
-
* If the task was aborted, we need to remove the task tag from the model.
|
|
27
|
-
*/
|
|
28
|
-
await this.removeBeingDeleted(model);
|
|
29
|
-
return this.response.aborted();
|
|
30
|
-
} else if (isCloseToTimeout()) {
|
|
31
|
-
return this.response.continue({
|
|
32
|
-
...input,
|
|
33
|
-
lastDeletedId
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
const where = {
|
|
37
|
-
latest: true
|
|
38
|
-
};
|
|
39
|
-
if (lastDeletedId) {
|
|
40
|
-
where.entryId_gte = lastDeletedId;
|
|
41
|
-
}
|
|
42
|
-
const {
|
|
43
|
-
items,
|
|
44
|
-
hasMoreItems: metaHasMoreItems
|
|
45
|
-
} = await this.context.cms.storageOperations.entries.list(model, {
|
|
46
|
-
limit: 1000,
|
|
47
|
-
where,
|
|
48
|
-
sort: ["entryId_ASC"]
|
|
49
|
-
});
|
|
50
|
-
for (const item of items) {
|
|
51
|
-
try {
|
|
52
|
-
await this.context.cms.deleteEntry(model, item.id, {
|
|
53
|
-
permanently: true,
|
|
54
|
-
force: true
|
|
55
|
-
});
|
|
56
|
-
} catch (ex) {
|
|
57
|
-
console.error("Failed to delete entry.", {
|
|
58
|
-
model: model.modelId,
|
|
59
|
-
id: item.id
|
|
60
|
-
});
|
|
61
|
-
return this.response.error(new Error(`Failed to delete entry "${item.id}". Cannot continue.`));
|
|
62
|
-
}
|
|
63
|
-
lastDeletedId = item.entryId;
|
|
64
|
-
}
|
|
65
|
-
hasMoreItems = metaHasMoreItems;
|
|
66
|
-
} while (hasMoreItems);
|
|
67
|
-
/**
|
|
68
|
-
* Let's do one more check. If there are items, continue the task with 5 seconds delay.
|
|
69
|
-
*/
|
|
70
|
-
const {
|
|
71
|
-
items
|
|
72
|
-
} = await this.context.cms.storageOperations.entries.list(model, {
|
|
73
|
-
limit: 1,
|
|
74
|
-
where: {
|
|
75
|
-
latest: true
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
if (items.length > 0) {
|
|
79
|
-
console.log("There are still items to be deleted. Continuing the task.");
|
|
80
|
-
return this.response.continue({
|
|
81
|
-
...input
|
|
82
|
-
}, {
|
|
83
|
-
seconds: 5
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
let hasMoreFolders = false;
|
|
87
|
-
do {
|
|
88
|
-
const [items, meta] = await this.context.aco.folder.list({
|
|
89
|
-
where: {
|
|
90
|
-
type: `cms:${model.modelId}`
|
|
91
|
-
},
|
|
92
|
-
limit: 1000
|
|
93
|
-
});
|
|
94
|
-
for (const item of items) {
|
|
95
|
-
try {
|
|
96
|
-
await this.context.aco.folder.delete(item.id);
|
|
97
|
-
} catch (ex) {
|
|
98
|
-
console.error(`Failed to delete folder "${item.id}".`, ex);
|
|
99
|
-
return this.response.error(ex);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
hasMoreFolders = meta.hasMoreItems;
|
|
103
|
-
} while (hasMoreFolders);
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* When there is no more records to be deleted, let's delete the model, if it's not a plugin.
|
|
107
|
-
*/
|
|
108
|
-
await this.removeBeingDeleted(model);
|
|
109
|
-
if (model.isPlugin) {
|
|
110
|
-
return this.response.done();
|
|
111
|
-
}
|
|
112
|
-
try {
|
|
113
|
-
await this.context.cms.deleteModel(model.modelId);
|
|
114
|
-
} catch (ex) {
|
|
115
|
-
const message = `Failed to delete model "${model.modelId}".`;
|
|
116
|
-
console.error(message);
|
|
117
|
-
return this.response.error(ex);
|
|
118
|
-
}
|
|
119
|
-
return this.response.done();
|
|
120
|
-
}
|
|
121
|
-
async getModel(modelId) {
|
|
122
|
-
const model = await this.context.cms.getModel(modelId);
|
|
123
|
-
if (!model) {
|
|
124
|
-
throw new Error(`Model "${modelId}" not found.`);
|
|
125
|
-
}
|
|
126
|
-
return model;
|
|
127
|
-
}
|
|
128
|
-
async removeBeingDeleted(model) {
|
|
129
|
-
const key = (0, _store.createStoreKey)(model);
|
|
130
|
-
await this.context.db.store.removeValue(key);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
exports.DeleteModelRunner = DeleteModelRunner;
|
|
134
|
-
const createDeleteModelRunner = params => {
|
|
135
|
-
return new DeleteModelRunner(params);
|
|
136
|
-
};
|
|
137
|
-
exports.createDeleteModelRunner = createDeleteModelRunner;
|
|
138
|
-
|
|
139
|
-
//# sourceMappingURL=DeleteModelRunner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_store","require","DeleteModelRunner","constructor","params","taskId","context","response","execute","input","isCloseToTimeout","isAborted","model","getModel","modelId","hasMoreItems","lastDeletedId","removeBeingDeleted","aborted","continue","where","latest","entryId_gte","items","metaHasMoreItems","cms","storageOperations","entries","list","limit","sort","item","deleteEntry","id","permanently","force","ex","console","error","Error","entryId","length","log","seconds","hasMoreFolders","meta","aco","folder","type","delete","isPlugin","done","deleteModel","message","key","createStoreKey","db","store","removeValue","exports","createDeleteModelRunner"],"sources":["DeleteModelRunner.ts"],"sourcesContent":["import type { ITaskResponse, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport type { HcmsTasksContext } from \"~/types\";\nimport type { IDeleteModelTaskInput, IDeleteModelTaskOutput } from \"./types\";\nimport type { CmsEntryListWhere, CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { createStoreKey } from \"~/tasks/deleteModel/helpers/store\";\n\nexport interface IDeleteModelRunnerParams<\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n> {\n taskId: string;\n context: C;\n response: ITaskResponse<I, O>;\n}\n\nexport type IExecuteParams<\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n> = Omit<ITaskRunParams<C, I, O>, \"context\" | \"response\" | \"store\" | \"timer\" | \"trigger\">;\n\nexport class DeleteModelRunner<\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n> {\n private readonly taskId: string;\n private readonly context: C;\n private readonly response: ITaskResponse<I, O>;\n\n public constructor(params: IDeleteModelRunnerParams<C, I, O>) {\n this.taskId = params.taskId;\n this.context = params.context;\n this.response = params.response;\n }\n\n public async execute(params: IExecuteParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { input, isCloseToTimeout, isAborted } = params;\n\n const model = await this.getModel(input.modelId);\n\n let hasMoreItems = false;\n let lastDeletedId: string | undefined = input.lastDeletedId;\n do {\n if (isAborted()) {\n /**\n * If the task was aborted, we need to remove the task tag from the model.\n */\n await this.removeBeingDeleted(model);\n return this.response.aborted();\n } else if (isCloseToTimeout()) {\n return this.response.continue({\n ...input,\n lastDeletedId\n });\n }\n const where: CmsEntryListWhere = {\n latest: true\n };\n if (lastDeletedId) {\n where.entryId_gte = lastDeletedId;\n }\n const { items, hasMoreItems: metaHasMoreItems } =\n await this.context.cms.storageOperations.entries.list(model, {\n limit: 1000,\n where,\n sort: [\"entryId_ASC\"]\n });\n for (const item of items) {\n try {\n await this.context.cms.deleteEntry(model, item.id, {\n permanently: true,\n force: true\n });\n } catch (ex) {\n console.error(\"Failed to delete entry.\", {\n model: model.modelId,\n id: item.id\n });\n return this.response.error(\n new Error(`Failed to delete entry \"${item.id}\". Cannot continue.`)\n );\n }\n lastDeletedId = item.entryId;\n }\n\n hasMoreItems = metaHasMoreItems;\n } while (hasMoreItems);\n /**\n * Let's do one more check. If there are items, continue the task with 5 seconds delay.\n */\n const { items } = await this.context.cms.storageOperations.entries.list(model, {\n limit: 1,\n where: {\n latest: true\n }\n });\n if (items.length > 0) {\n console.log(\"There are still items to be deleted. Continuing the task.\");\n return this.response.continue(\n {\n ...input\n },\n {\n seconds: 5\n }\n );\n }\n\n let hasMoreFolders = false;\n do {\n const [items, meta] = await this.context.aco.folder.list({\n where: {\n type: `cms:${model.modelId}`\n },\n limit: 1000\n });\n for (const item of items) {\n try {\n await this.context.aco.folder.delete(item.id);\n } catch (ex) {\n console.error(`Failed to delete folder \"${item.id}\".`, ex);\n return this.response.error(ex);\n }\n }\n\n hasMoreFolders = meta.hasMoreItems;\n } while (hasMoreFolders);\n\n /**\n * When there is no more records to be deleted, let's delete the model, if it's not a plugin.\n */\n await this.removeBeingDeleted(model);\n if (model.isPlugin) {\n return this.response.done();\n }\n try {\n await this.context.cms.deleteModel(model.modelId);\n } catch (ex) {\n const message = `Failed to delete model \"${model.modelId}\".`;\n console.error(message);\n return this.response.error(ex);\n }\n\n return this.response.done();\n }\n\n private async getModel(modelId: string): Promise<CmsModel> {\n const model = await this.context.cms.getModel(modelId);\n if (!model) {\n throw new Error(`Model \"${modelId}\" not found.`);\n }\n return model;\n }\n\n private async removeBeingDeleted(\n model: Pick<CmsModel, \"modelId\" | \"tenant\" | \"locale\">\n ): Promise<void> {\n const key = createStoreKey(model);\n await this.context.db.store.removeValue(key);\n }\n}\n\nexport const createDeleteModelRunner = <\n C extends HcmsTasksContext,\n I extends IDeleteModelTaskInput,\n O extends IDeleteModelTaskOutput\n>(\n params: IDeleteModelRunnerParams<C, I, O>\n) => {\n return new DeleteModelRunner<C, I, O>(params);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["DELETE_MODEL_TASK","exports"],"sources":["constants.ts"],"sourcesContent":["export const DELETE_MODEL_TASK = \"deleteModelAndEntries\";\n"],"mappings":";;;;;;AAAO,MAAMA,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG,uBAAuB","ignoreList":[]}
|