@webiny/api-headless-cms-tasks 0.0.0-unstable.2aaa1916d9
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/LICENSE +21 -0
- package/README.md +15 -0
- package/index.d.ts +3 -0
- package/index.js +19 -0
- package/index.js.map +1 -0
- package/package.json +48 -0
- package/tasks/deleteModel/DeleteModelRunner.d.ts +19 -0
- package/tasks/deleteModel/DeleteModelRunner.js +139 -0
- package/tasks/deleteModel/DeleteModelRunner.js.map +1 -0
- package/tasks/deleteModel/constants.d.ts +1 -0
- package/tasks/deleteModel/constants.js +9 -0
- package/tasks/deleteModel/constants.js.map +1 -0
- package/tasks/deleteModel/graphql/attachLifecycleEvents.d.ts +5 -0
- package/tasks/deleteModel/graphql/attachLifecycleEvents.js +40 -0
- package/tasks/deleteModel/graphql/attachLifecycleEvents.js.map +1 -0
- package/tasks/deleteModel/graphql/cancelDeleteModel.d.ts +7 -0
- package/tasks/deleteModel/graphql/cancelDeleteModel.js +64 -0
- package/tasks/deleteModel/graphql/cancelDeleteModel.js.map +1 -0
- package/tasks/deleteModel/graphql/crud.d.ts +3 -0
- package/tasks/deleteModel/graphql/crud.js +82 -0
- package/tasks/deleteModel/graphql/crud.js.map +1 -0
- package/tasks/deleteModel/graphql/fullyDeleteModel.d.ts +7 -0
- package/tasks/deleteModel/graphql/fullyDeleteModel.js +57 -0
- package/tasks/deleteModel/graphql/fullyDeleteModel.js.map +1 -0
- package/tasks/deleteModel/graphql/getDeleteModelProgress.d.ts +7 -0
- package/tasks/deleteModel/graphql/getDeleteModelProgress.js +66 -0
- package/tasks/deleteModel/graphql/getDeleteModelProgress.js.map +1 -0
- package/tasks/deleteModel/graphql/index.d.ts +3 -0
- package/tasks/deleteModel/graphql/index.js +166 -0
- package/tasks/deleteModel/graphql/index.js.map +1 -0
- package/tasks/deleteModel/graphql/isModelBeingDeleted.d.ts +5 -0
- package/tasks/deleteModel/graphql/isModelBeingDeleted.js +15 -0
- package/tasks/deleteModel/graphql/isModelBeingDeleted.js.map +1 -0
- package/tasks/deleteModel/graphql/status.d.ts +3 -0
- package/tasks/deleteModel/graphql/status.js +24 -0
- package/tasks/deleteModel/graphql/status.js.map +1 -0
- package/tasks/deleteModel/helpers/confirmation.d.ts +6 -0
- package/tasks/deleteModel/helpers/confirmation.js +23 -0
- package/tasks/deleteModel/helpers/confirmation.js.map +1 -0
- package/tasks/deleteModel/helpers/store.d.ts +10 -0
- package/tasks/deleteModel/helpers/store.js +26 -0
- package/tasks/deleteModel/helpers/store.js.map +1 -0
- package/tasks/deleteModel/index.d.ts +3 -0
- package/tasks/deleteModel/index.js +50 -0
- package/tasks/deleteModel/index.js.map +1 -0
- package/tasks/deleteModel/types.d.ts +33 -0
- package/tasks/deleteModel/types.js +15 -0
- package/tasks/deleteModel/types.js.map +1 -0
- package/types.d.ts +14 -0
- package/types.js +7 -0
- package/types.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_constants","require","_status","_store","fullyDeleteModel","params","context","modelId","model","cms","getModel","isPrivate","Error","accessControl","ensureCanAccessModel","rwd","ensureCanAccessEntry","storeKey","createStoreKey","result","db","store","getValue","taskId","data","task","tasks","trigger","input","definition","DELETE_MODEL_TASK","name","storeValue","createStoreValue","identity","security","getIdentity","id","status","getStatus","taskStatus","total","deleted","exports"],"sources":["fullyDeleteModel.ts"],"sourcesContent":["import type { HcmsTasksContext } from \"~/types\";\nimport { DELETE_MODEL_TASK } from \"~/tasks/deleteModel/constants\";\nimport type {\n IDeleteCmsModelTask,\n IDeleteModelTaskInput,\n IStoreValue\n} from \"~/tasks/deleteModel/types\";\nimport { getStatus } from \"~/tasks/deleteModel/graphql/status\";\nimport { createStoreKey, createStoreValue } from \"~/tasks/deleteModel/helpers/store\";\n\nexport interface IFullyDeleteModelParams {\n readonly context: Pick<HcmsTasksContext, \"cms\" | \"tasks\" | \"db\" | \"security\">;\n readonly modelId: string;\n}\n\nexport const fullyDeleteModel = async (\n params: IFullyDeleteModelParams\n): Promise<IDeleteCmsModelTask> => {\n const { context, modelId } = params;\n\n const model = await context.cms.getModel(modelId);\n\n if (model.isPrivate) {\n throw new Error(`Cannot delete private model.`);\n }\n\n await context.cms.accessControl.ensureCanAccessModel({\n model,\n rwd: \"d\"\n });\n\n await context.cms.accessControl.ensureCanAccessEntry({\n model,\n rwd: \"w\"\n });\n\n if (!model) {\n throw new Error(`Model \"${modelId}\" not found.`);\n }\n const storeKey = createStoreKey(model);\n const result = await context.db.store.getValue<IStoreValue>(storeKey);\n const taskId = result.data?.task;\n if (taskId) {\n throw new Error(`Model \"${modelId}\" is already getting deleted. Task id: ${taskId}.`);\n }\n\n const task = await context.tasks.trigger<IDeleteModelTaskInput>({\n input: {\n modelId\n },\n definition: DELETE_MODEL_TASK,\n name: `Fully delete model: ${modelId}`\n });\n\n await context.db.store.storeValue(\n storeKey,\n createStoreValue({\n ...model,\n identity: context.security.getIdentity(),\n task: task.id\n })\n );\n\n return {\n id: task.id,\n status: getStatus(task.taskStatus),\n total: 0,\n deleted: 0\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAMA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAOO,MAAMG,gBAAgB,GAAG,MAC5BC,MAA+B,IACA;EAC/B,MAAM;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAEnC,MAAMG,KAAK,GAAG,MAAMF,OAAO,CAACG,GAAG,CAACC,QAAQ,CAACH,OAAO,CAAC;EAEjD,IAAIC,KAAK,CAACG,SAAS,EAAE;IACjB,MAAM,IAAIC,KAAK,CAAC,8BAA8B,CAAC;EACnD;EAEA,MAAMN,OAAO,CAACG,GAAG,CAACI,aAAa,CAACC,oBAAoB,CAAC;IACjDN,KAAK;IACLO,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAMT,OAAO,CAACG,GAAG,CAACI,aAAa,CAACG,oBAAoB,CAAC;IACjDR,KAAK;IACLO,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,IAAI,CAACP,KAAK,EAAE;IACR,MAAM,IAAII,KAAK,CAAC,UAAUL,OAAO,cAAc,CAAC;EACpD;EACA,MAAMU,QAAQ,GAAG,IAAAC,qBAAc,EAACV,KAAK,CAAC;EACtC,MAAMW,MAAM,GAAG,MAAMb,OAAO,CAACc,EAAE,CAACC,KAAK,CAACC,QAAQ,CAAcL,QAAQ,CAAC;EACrE,MAAMM,MAAM,GAAGJ,MAAM,CAACK,IAAI,EAAEC,IAAI;EAChC,IAAIF,MAAM,EAAE;IACR,MAAM,IAAIX,KAAK,CAAC,UAAUL,OAAO,0CAA0CgB,MAAM,GAAG,CAAC;EACzF;EAEA,MAAME,IAAI,GAAG,MAAMnB,OAAO,CAACoB,KAAK,CAACC,OAAO,CAAwB;IAC5DC,KAAK,EAAE;MACHrB;IACJ,CAAC;IACDsB,UAAU,EAAEC,4BAAiB;IAC7BC,IAAI,EAAE,uBAAuBxB,OAAO;EACxC,CAAC,CAAC;EAEF,MAAMD,OAAO,CAACc,EAAE,CAACC,KAAK,CAACW,UAAU,CAC7Bf,QAAQ,EACR,IAAAgB,uBAAgB,EAAC;IACb,GAAGzB,KAAK;IACR0B,QAAQ,EAAE5B,OAAO,CAAC6B,QAAQ,CAACC,WAAW,CAAC,CAAC;IACxCX,IAAI,EAAEA,IAAI,CAACY;EACf,CAAC,CACL,CAAC;EAED,OAAO;IACHA,EAAE,EAAEZ,IAAI,CAACY,EAAE;IACXC,MAAM,EAAE,IAAAC,iBAAS,EAACd,IAAI,CAACe,UAAU,CAAC;IAClCC,KAAK,EAAE,CAAC;IACRC,OAAO,EAAE;EACb,CAAC;AACL,CAAC;AAACC,OAAA,CAAAvC,gBAAA,GAAAA,gBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IDeleteCmsModelTask } from "../types";
|
|
2
|
+
import type { HcmsTasksContext } from "../../../types";
|
|
3
|
+
export interface IGetDeleteModelProgress {
|
|
4
|
+
readonly context: Pick<HcmsTasksContext, "cms" | "tasks" | "db">;
|
|
5
|
+
readonly modelId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const getDeleteModelProgress: (params: IGetDeleteModelProgress) => Promise<IDeleteCmsModelTask>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getDeleteModelProgress = void 0;
|
|
7
|
+
var _constants = require("../constants");
|
|
8
|
+
var _error = require("@webiny/error");
|
|
9
|
+
var _status = require("./status");
|
|
10
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
11
|
+
var _store = require("../helpers/store");
|
|
12
|
+
const getDeleteModelProgress = async params => {
|
|
13
|
+
const {
|
|
14
|
+
context,
|
|
15
|
+
modelId
|
|
16
|
+
} = params;
|
|
17
|
+
let model;
|
|
18
|
+
try {
|
|
19
|
+
model = await context.cms.getModel(modelId);
|
|
20
|
+
} catch (ex) {
|
|
21
|
+
if (ex instanceof _handlerGraphql.NotFoundError === false) {
|
|
22
|
+
throw ex;
|
|
23
|
+
}
|
|
24
|
+
throw new _error.WebinyError({
|
|
25
|
+
message: "Model not found. It must have been deleted already.",
|
|
26
|
+
code: "MODEL_ALREADY_DELETED_FOUND",
|
|
27
|
+
data: {
|
|
28
|
+
model: modelId
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
await context.cms.accessControl.ensureCanAccessModel({
|
|
33
|
+
model,
|
|
34
|
+
rwd: "d"
|
|
35
|
+
});
|
|
36
|
+
await context.cms.accessControl.ensureCanAccessEntry({
|
|
37
|
+
model,
|
|
38
|
+
rwd: "w"
|
|
39
|
+
});
|
|
40
|
+
const storeKey = (0, _store.createStoreKey)(model);
|
|
41
|
+
const result = await context.db.store.getValue(storeKey);
|
|
42
|
+
const taskId = result.data?.task;
|
|
43
|
+
if (!taskId) {
|
|
44
|
+
throw new Error(`Model "${modelId}" is not being deleted.`);
|
|
45
|
+
}
|
|
46
|
+
const task = await context.tasks.getTask(taskId);
|
|
47
|
+
if (task?.definitionId !== _constants.DELETE_MODEL_TASK) {
|
|
48
|
+
throw new _error.WebinyError({
|
|
49
|
+
message: `The task which is deleting a model cannot be found.`,
|
|
50
|
+
code: "DELETE_MODEL_TASK_NOT_FOUND",
|
|
51
|
+
data: {
|
|
52
|
+
model: model.modelId,
|
|
53
|
+
task: taskId
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
id: task.id,
|
|
59
|
+
status: (0, _status.getStatus)(task.taskStatus),
|
|
60
|
+
total: task.output?.total || 0,
|
|
61
|
+
deleted: task.output?.deleted || 0
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
exports.getDeleteModelProgress = getDeleteModelProgress;
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=getDeleteModelProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_constants","require","_error","_status","_handlerGraphql","_store","getDeleteModelProgress","params","context","modelId","model","cms","getModel","ex","NotFoundError","WebinyError","message","code","data","accessControl","ensureCanAccessModel","rwd","ensureCanAccessEntry","storeKey","createStoreKey","result","db","store","getValue","taskId","task","Error","tasks","getTask","definitionId","DELETE_MODEL_TASK","id","status","getStatus","taskStatus","total","output","deleted","exports"],"sources":["getDeleteModelProgress.ts"],"sourcesContent":["import type {\n IDeleteCmsModelTask,\n IDeleteModelTaskInput,\n IDeleteModelTaskOutput,\n IStoreValue\n} from \"~/tasks/deleteModel/types\";\nimport type { HcmsTasksContext } from \"~/types\";\nimport { DELETE_MODEL_TASK } from \"~/tasks/deleteModel/constants\";\nimport { WebinyError } from \"@webiny/error\";\nimport { getStatus } from \"~/tasks/deleteModel/graphql/status\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { createStoreKey } from \"../helpers/store\";\n\nexport interface IGetDeleteModelProgress {\n readonly context: Pick<HcmsTasksContext, \"cms\" | \"tasks\" | \"db\">;\n readonly modelId: string;\n}\n\nexport const getDeleteModelProgress = async (\n params: IGetDeleteModelProgress\n): Promise<IDeleteCmsModelTask> => {\n const { context, modelId } = params;\n\n let model: CmsModel;\n try {\n model = await context.cms.getModel(modelId);\n } catch (ex) {\n if (ex instanceof NotFoundError === false) {\n throw ex;\n }\n throw new WebinyError({\n message: \"Model not found. It must have been deleted already.\",\n code: \"MODEL_ALREADY_DELETED_FOUND\",\n data: {\n model: modelId\n }\n });\n }\n\n await context.cms.accessControl.ensureCanAccessModel({\n model,\n rwd: \"d\"\n });\n\n await context.cms.accessControl.ensureCanAccessEntry({\n model,\n rwd: \"w\"\n });\n\n const storeKey = createStoreKey(model);\n const result = await context.db.store.getValue<IStoreValue>(storeKey);\n\n const taskId = result.data?.task;\n if (!taskId) {\n throw new Error(`Model \"${modelId}\" is not being deleted.`);\n }\n\n const task = await context.tasks.getTask<IDeleteModelTaskInput, IDeleteModelTaskOutput>(taskId);\n if (task?.definitionId !== DELETE_MODEL_TASK) {\n throw new WebinyError({\n message: `The task which is deleting a model cannot be found.`,\n code: \"DELETE_MODEL_TASK_NOT_FOUND\",\n data: {\n model: model.modelId,\n task: taskId\n }\n });\n }\n return {\n id: task.id,\n status: getStatus(task.taskStatus),\n total: task.output?.total || 0,\n deleted: task.output?.deleted || 0\n };\n};\n"],"mappings":";;;;;;AAOA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AAEA,IAAAI,MAAA,GAAAJ,OAAA;AAOO,MAAMK,sBAAsB,GAAG,MAClCC,MAA+B,IACA;EAC/B,MAAM;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGF,MAAM;EAEnC,IAAIG,KAAe;EACnB,IAAI;IACAA,KAAK,GAAG,MAAMF,OAAO,CAACG,GAAG,CAACC,QAAQ,CAACH,OAAO,CAAC;EAC/C,CAAC,CAAC,OAAOI,EAAE,EAAE;IACT,IAAIA,EAAE,YAAYC,6BAAa,KAAK,KAAK,EAAE;MACvC,MAAMD,EAAE;IACZ;IACA,MAAM,IAAIE,kBAAW,CAAC;MAClBC,OAAO,EAAE,qDAAqD;MAC9DC,IAAI,EAAE,6BAA6B;MACnCC,IAAI,EAAE;QACFR,KAAK,EAAED;MACX;IACJ,CAAC,CAAC;EACN;EAEA,MAAMD,OAAO,CAACG,GAAG,CAACQ,aAAa,CAACC,oBAAoB,CAAC;IACjDV,KAAK;IACLW,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAMb,OAAO,CAACG,GAAG,CAACQ,aAAa,CAACG,oBAAoB,CAAC;IACjDZ,KAAK;IACLW,GAAG,EAAE;EACT,CAAC,CAAC;EAEF,MAAME,QAAQ,GAAG,IAAAC,qBAAc,EAACd,KAAK,CAAC;EACtC,MAAMe,MAAM,GAAG,MAAMjB,OAAO,CAACkB,EAAE,CAACC,KAAK,CAACC,QAAQ,CAAcL,QAAQ,CAAC;EAErE,MAAMM,MAAM,GAAGJ,MAAM,CAACP,IAAI,EAAEY,IAAI;EAChC,IAAI,CAACD,MAAM,EAAE;IACT,MAAM,IAAIE,KAAK,CAAC,UAAUtB,OAAO,yBAAyB,CAAC;EAC/D;EAEA,MAAMqB,IAAI,GAAG,MAAMtB,OAAO,CAACwB,KAAK,CAACC,OAAO,CAAgDJ,MAAM,CAAC;EAC/F,IAAIC,IAAI,EAAEI,YAAY,KAAKC,4BAAiB,EAAE;IAC1C,MAAM,IAAIpB,kBAAW,CAAC;MAClBC,OAAO,EAAE,qDAAqD;MAC9DC,IAAI,EAAE,6BAA6B;MACnCC,IAAI,EAAE;QACFR,KAAK,EAAEA,KAAK,CAACD,OAAO;QACpBqB,IAAI,EAAED;MACV;IACJ,CAAC,CAAC;EACN;EACA,OAAO;IACHO,EAAE,EAAEN,IAAI,CAACM,EAAE;IACXC,MAAM,EAAE,IAAAC,iBAAS,EAACR,IAAI,CAACS,UAAU,CAAC;IAClCC,KAAK,EAAEV,IAAI,CAACW,MAAM,EAAED,KAAK,IAAI,CAAC;IAC9BE,OAAO,EAAEZ,IAAI,CAACW,MAAM,EAAEC,OAAO,IAAI;EACrC,CAAC;AACL,CAAC;AAACC,OAAA,CAAArC,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createDeleteModelGraphQl = void 0;
|
|
8
|
+
var _zod = _interopRequireDefault(require("zod"));
|
|
9
|
+
var _api = require("@webiny/api");
|
|
10
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
11
|
+
var _confirmation = require("../helpers/confirmation");
|
|
12
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
13
|
+
var _utils = require("@webiny/utils");
|
|
14
|
+
const deleteValidation = _zod.default.object({
|
|
15
|
+
modelId: _zod.default.string(),
|
|
16
|
+
confirmation: _zod.default.string()
|
|
17
|
+
}).superRefine((value, context) => {
|
|
18
|
+
if ((0, _confirmation.validateConfirmation)(value)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
context.addIssue({
|
|
22
|
+
code: _zod.default.ZodIssueCode.custom,
|
|
23
|
+
message: `Confirmation input does not match.`,
|
|
24
|
+
fatal: true,
|
|
25
|
+
path: ["confirmation"]
|
|
26
|
+
});
|
|
27
|
+
}).readonly();
|
|
28
|
+
const cancelValidation = _zod.default.object({
|
|
29
|
+
modelId: _zod.default.string()
|
|
30
|
+
}).readonly();
|
|
31
|
+
const getValidation = _zod.default.object({
|
|
32
|
+
modelId: _zod.default.string()
|
|
33
|
+
}).readonly();
|
|
34
|
+
const createDeleteModelGraphQl = () => {
|
|
35
|
+
const contextPlugin = new _api.ContextPlugin(async inputContext => {
|
|
36
|
+
const ready = await (0, _apiHeadlessCms.isHeadlessCmsReady)(inputContext);
|
|
37
|
+
if (!ready || !inputContext.cms.MANAGE) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const plugin = new _apiHeadlessCms.CmsGraphQLSchemaPlugin({
|
|
41
|
+
typeDefs: /* GraphQL */`
|
|
42
|
+
enum DeleteCmsModelTaskStatus {
|
|
43
|
+
running
|
|
44
|
+
done
|
|
45
|
+
error
|
|
46
|
+
canceled
|
|
47
|
+
}
|
|
48
|
+
type DeleteCmsModelTask {
|
|
49
|
+
id: ID!
|
|
50
|
+
status: DeleteCmsModelTaskStatus!
|
|
51
|
+
deleted: Int!
|
|
52
|
+
total: Int!
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
type GetDeleteCmsModelProgressResponse {
|
|
56
|
+
data: DeleteCmsModelTask
|
|
57
|
+
error: CmsError
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
type FullyDeleteCmsModelResponse {
|
|
61
|
+
data: DeleteCmsModelTask
|
|
62
|
+
error: CmsError
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
type CancelDeleteCmsModelResponse {
|
|
66
|
+
data: DeleteCmsModelTask
|
|
67
|
+
error: CmsError
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
extend type CmsContentModel {
|
|
71
|
+
isBeingDeleted: Boolean!
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
extend type Query {
|
|
75
|
+
getDeleteModelProgress(modelId: ID!): GetDeleteCmsModelProgressResponse!
|
|
76
|
+
listContentModels(
|
|
77
|
+
includeBeingDeleted: Boolean = false
|
|
78
|
+
): CmsContentModelListResponse
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
extend type Mutation {
|
|
82
|
+
fullyDeleteModel(
|
|
83
|
+
modelId: ID!
|
|
84
|
+
confirmation: String!
|
|
85
|
+
): FullyDeleteCmsModelResponse!
|
|
86
|
+
cancelFullyDeleteModel(modelId: ID!): CancelDeleteCmsModelResponse!
|
|
87
|
+
}
|
|
88
|
+
`,
|
|
89
|
+
resolvers: {
|
|
90
|
+
CmsContentModel: {
|
|
91
|
+
isBeingDeleted: async (model, _, context) => {
|
|
92
|
+
try {
|
|
93
|
+
return await context.cms.isModelBeingDeleted(model.modelId);
|
|
94
|
+
} catch (ex) {
|
|
95
|
+
console.error(ex);
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
Query: {
|
|
101
|
+
getDeleteModelProgress: async (_, args, context) => {
|
|
102
|
+
return (0, _handlerGraphql.resolve)(async () => {
|
|
103
|
+
const input = getValidation.safeParse(args);
|
|
104
|
+
if (input.error) {
|
|
105
|
+
throw (0, _utils.createZodError)(input.error);
|
|
106
|
+
}
|
|
107
|
+
return await context.cms.getDeleteModelProgress(input.data.modelId);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
Mutation: {
|
|
112
|
+
fullyDeleteModel: async (_, args, context) => {
|
|
113
|
+
return (0, _handlerGraphql.resolve)(async () => {
|
|
114
|
+
const input = deleteValidation.safeParse(args);
|
|
115
|
+
if (input.error) {
|
|
116
|
+
throw (0, _utils.createZodError)(input.error);
|
|
117
|
+
}
|
|
118
|
+
return await context.cms.fullyDeleteModel(input.data.modelId);
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
cancelFullyDeleteModel: async (_, args, context) => {
|
|
122
|
+
return (0, _handlerGraphql.resolve)(async () => {
|
|
123
|
+
const input = cancelValidation.safeParse(args);
|
|
124
|
+
if (input.error) {
|
|
125
|
+
throw (0, _utils.createZodError)(input.error);
|
|
126
|
+
}
|
|
127
|
+
return await context.cms.cancelFullyDeleteModel(input.data.modelId);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
resolverDecorators: {
|
|
133
|
+
["Query.listContentModels"]: [(0, _handlerGraphql.createResolverDecorator)(resolver => async (parent, args, context, info) => {
|
|
134
|
+
const result = await resolver(parent, args, context, info);
|
|
135
|
+
if (result.error || !Array.isArray(result.data)) {
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
if (args?.includeBeingDeleted !== false) {
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
const listed = result.data;
|
|
142
|
+
try {
|
|
143
|
+
const beingDeletedList = await context.cms.listModelsBeingDeleted();
|
|
144
|
+
return new _handlerGraphql.Response(listed.filter(model => {
|
|
145
|
+
if (!model?.modelId) {
|
|
146
|
+
return false;
|
|
147
|
+
} else if (beingDeletedList.some(item => item.modelId === model.modelId)) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
}));
|
|
152
|
+
} catch (ex) {
|
|
153
|
+
return new _handlerGraphql.ErrorResponse(ex);
|
|
154
|
+
}
|
|
155
|
+
})]
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
plugin.name = "headless-cms.graphql.fullyDeleteModel";
|
|
159
|
+
inputContext.plugins.register(plugin);
|
|
160
|
+
});
|
|
161
|
+
contextPlugin.name = "headless-cms.context.createDeleteModelGraphQl";
|
|
162
|
+
return contextPlugin;
|
|
163
|
+
};
|
|
164
|
+
exports.createDeleteModelGraphQl = createDeleteModelGraphQl;
|
|
165
|
+
|
|
166
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_zod","_interopRequireDefault","require","_api","_apiHeadlessCms","_confirmation","_handlerGraphql","_utils","deleteValidation","zod","object","modelId","string","confirmation","superRefine","value","context","validateConfirmation","addIssue","code","ZodIssueCode","custom","message","fatal","path","readonly","cancelValidation","getValidation","createDeleteModelGraphQl","contextPlugin","ContextPlugin","inputContext","ready","isHeadlessCmsReady","cms","MANAGE","plugin","CmsGraphQLSchemaPlugin","typeDefs","resolvers","CmsContentModel","isBeingDeleted","model","_","isModelBeingDeleted","ex","console","error","Query","getDeleteModelProgress","args","resolve","input","safeParse","createZodError","data","Mutation","fullyDeleteModel","cancelFullyDeleteModel","resolverDecorators","createResolverDecorator","resolver","parent","info","result","Array","isArray","includeBeingDeleted","listed","beingDeletedList","listModelsBeingDeleted","Response","filter","some","item","ErrorResponse","name","plugins","register","exports"],"sources":["index.ts"],"sourcesContent":["import zod from \"zod\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { CmsGraphQLSchemaPlugin, isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport { validateConfirmation } from \"../helpers/confirmation\";\nimport type { HcmsTasksContext } from \"~/types\";\nimport { createResolverDecorator, ErrorResponse, resolve, Response } from \"@webiny/handler-graphql\";\nimport { createZodError } from \"@webiny/utils\";\nimport type { IDeleteCmsModelTask } from \"~/tasks/deleteModel/types\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\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 const result = await resolver(parent, args, context, info);\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IStoreValue } from "../types";
|
|
2
|
+
export interface ICreateIsModelBeingDeletedParams {
|
|
3
|
+
listModelsBeingDeleted: () => Promise<IStoreValue[]>;
|
|
4
|
+
}
|
|
5
|
+
export declare const createIsModelBeingDeleted: (params: ICreateIsModelBeingDeletedParams) => (modelId: string) => Promise<boolean>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createIsModelBeingDeleted = void 0;
|
|
7
|
+
const createIsModelBeingDeleted = params => {
|
|
8
|
+
return async modelId => {
|
|
9
|
+
const items = await params.listModelsBeingDeleted();
|
|
10
|
+
return items.some(item => item.modelId === modelId);
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.createIsModelBeingDeleted = createIsModelBeingDeleted;
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=isModelBeingDeleted.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createIsModelBeingDeleted","params","modelId","items","listModelsBeingDeleted","some","item","exports"],"sources":["isModelBeingDeleted.ts"],"sourcesContent":["import type { IStoreValue } from \"~/tasks/deleteModel/types\";\n\nexport interface ICreateIsModelBeingDeletedParams {\n listModelsBeingDeleted: () => Promise<IStoreValue[]>;\n}\n\nexport const createIsModelBeingDeleted = (params: ICreateIsModelBeingDeletedParams) => {\n return async (modelId: string) => {\n const items = await params.listModelsBeingDeleted();\n return items.some(item => item.modelId === modelId);\n };\n};\n"],"mappings":";;;;;;AAMO,MAAMA,yBAAyB,GAAIC,MAAwC,IAAK;EACnF,OAAO,MAAOC,OAAe,IAAK;IAC9B,MAAMC,KAAK,GAAG,MAAMF,MAAM,CAACG,sBAAsB,CAAC,CAAC;IACnD,OAAOD,KAAK,CAACE,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACJ,OAAO,KAAKA,OAAO,CAAC;EACvD,CAAC;AACL,CAAC;AAACK,OAAA,CAAAP,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getStatus = void 0;
|
|
7
|
+
var _tasks = require("@webiny/tasks");
|
|
8
|
+
var _types = require("../types");
|
|
9
|
+
const getStatus = status => {
|
|
10
|
+
switch (status) {
|
|
11
|
+
case _tasks.TaskDataStatus.PENDING:
|
|
12
|
+
case _tasks.TaskDataStatus.RUNNING:
|
|
13
|
+
return _types.DeleteCmsModelTaskStatus.RUNNING;
|
|
14
|
+
case _tasks.TaskDataStatus.FAILED:
|
|
15
|
+
return _types.DeleteCmsModelTaskStatus.ERROR;
|
|
16
|
+
case _tasks.TaskDataStatus.ABORTED:
|
|
17
|
+
return _types.DeleteCmsModelTaskStatus.CANCELED;
|
|
18
|
+
case _tasks.TaskDataStatus.SUCCESS:
|
|
19
|
+
return _types.DeleteCmsModelTaskStatus.DONE;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.getStatus = getStatus;
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_tasks","require","_types","getStatus","status","TaskDataStatus","PENDING","RUNNING","DeleteCmsModelTaskStatus","FAILED","ERROR","ABORTED","CANCELED","SUCCESS","DONE","exports"],"sources":["status.ts"],"sourcesContent":["import { TaskDataStatus } from \"@webiny/tasks\";\nimport { DeleteCmsModelTaskStatus } from \"~/tasks/deleteModel/types\";\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"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEO,MAAME,SAAS,GAAIC,MAAsB,IAA+B;EAC3E,QAAQA,MAAM;IACV,KAAKC,qBAAc,CAACC,OAAO;IAC3B,KAAKD,qBAAc,CAACE,OAAO;MACvB,OAAOC,+BAAwB,CAACD,OAAO;IAC3C,KAAKF,qBAAc,CAACI,MAAM;MACtB,OAAOD,+BAAwB,CAACE,KAAK;IACzC,KAAKL,qBAAc,CAACM,OAAO;MACvB,OAAOH,+BAAwB,CAACI,QAAQ;IAC5C,KAAKP,qBAAc,CAACQ,OAAO;MACvB,OAAOL,+BAAwB,CAACM,IAAI;EAC5C;AACJ,CAAC;AAACC,OAAA,CAAAZ,SAAA,GAAAA,SAAA","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.validateConfirmation = exports.generateConfirmation = void 0;
|
|
7
|
+
const generateConfirmation = modelId => {
|
|
8
|
+
return `delete ${modelId}`;
|
|
9
|
+
};
|
|
10
|
+
exports.generateConfirmation = generateConfirmation;
|
|
11
|
+
const validateConfirmation = params => {
|
|
12
|
+
const {
|
|
13
|
+
modelId,
|
|
14
|
+
confirmation
|
|
15
|
+
} = params;
|
|
16
|
+
if (!modelId || !confirmation) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return confirmation === generateConfirmation(modelId);
|
|
20
|
+
};
|
|
21
|
+
exports.validateConfirmation = validateConfirmation;
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=confirmation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["generateConfirmation","modelId","exports","validateConfirmation","params","confirmation"],"sources":["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"],"mappings":";;;;;;AAAO,MAAMA,oBAAoB,GAAIC,OAAe,IAAa;EAC7D,OAAO,UAAUA,OAAO,EAAE;AAC9B,CAAC;AAACC,OAAA,CAAAF,oBAAA,GAAAA,oBAAA;AAMK,MAAMG,oBAAoB,GAAIC,MAAmC,IAAc;EAClF,MAAM;IAAEH,OAAO;IAAEI;EAAa,CAAC,GAAGD,MAAM;EACxC,IAAI,CAACH,OAAO,IAAI,CAACI,YAAY,EAAE;IAC3B,OAAO,KAAK;EAChB;EACA,OAAOA,YAAY,KAAKL,oBAAoB,CAACC,OAAO,CAAC;AACzD,CAAC;AAACC,OAAA,CAAAC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IStoreValue } from "../types";
|
|
2
|
+
import type { StorageKey } from "@webiny/db/types";
|
|
3
|
+
export interface ICreateStoreKeyParams {
|
|
4
|
+
modelId: string;
|
|
5
|
+
tenant: string;
|
|
6
|
+
locale: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const createStoreNamespace: (params: Pick<ICreateStoreKeyParams, "tenant" | "locale">) => string;
|
|
9
|
+
export declare const createStoreKey: (params: ICreateStoreKeyParams) => StorageKey;
|
|
10
|
+
export declare const createStoreValue: (params: IStoreValue) => IStoreValue;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createStoreValue = exports.createStoreNamespace = exports.createStoreKey = void 0;
|
|
7
|
+
const createStoreNamespace = params => {
|
|
8
|
+
return `deletingCmsModel#T#${params.tenant}#L#${params.locale}#`;
|
|
9
|
+
};
|
|
10
|
+
exports.createStoreNamespace = createStoreNamespace;
|
|
11
|
+
const createStoreKey = params => {
|
|
12
|
+
return `${createStoreNamespace(params)}${params.modelId}`;
|
|
13
|
+
};
|
|
14
|
+
exports.createStoreKey = createStoreKey;
|
|
15
|
+
const createStoreValue = params => {
|
|
16
|
+
return {
|
|
17
|
+
modelId: params.modelId,
|
|
18
|
+
task: params.task,
|
|
19
|
+
identity: params.identity,
|
|
20
|
+
tenant: params.tenant,
|
|
21
|
+
locale: params.locale
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
exports.createStoreValue = createStoreValue;
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createStoreNamespace","params","tenant","locale","exports","createStoreKey","modelId","createStoreValue","task","identity"],"sources":["store.ts"],"sourcesContent":["import type { IStoreValue } from \"~/tasks/deleteModel/types\";\nimport type { StorageKey } from \"@webiny/db/types\";\n\nexport interface ICreateStoreKeyParams {\n modelId: string;\n tenant: string;\n locale: string;\n}\n\nexport const createStoreNamespace = (params: Pick<ICreateStoreKeyParams, \"tenant\" | \"locale\">) => {\n return `deletingCmsModel#T#${params.tenant}#L#${params.locale}#`;\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 locale: params.locale\n };\n};\n"],"mappings":";;;;;;AASO,MAAMA,oBAAoB,GAAIC,MAAwD,IAAK;EAC9F,OAAO,sBAAsBA,MAAM,CAACC,MAAM,MAAMD,MAAM,CAACE,MAAM,GAAG;AACpE,CAAC;AAACC,OAAA,CAAAJ,oBAAA,GAAAA,oBAAA;AAEK,MAAMK,cAAc,GAAIJ,MAA6B,IAAiB;EACzE,OAAO,GAAGD,oBAAoB,CAACC,MAAM,CAAC,GAAGA,MAAM,CAACK,OAAO,EAAE;AAC7D,CAAC;AAACF,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAEK,MAAME,gBAAgB,GAAIN,MAAmB,IAAkB;EAClE,OAAO;IACHK,OAAO,EAAEL,MAAM,CAACK,OAAO;IACvBE,IAAI,EAAEP,MAAM,CAACO,IAAI;IACjBC,QAAQ,EAAER,MAAM,CAACQ,QAAQ;IACzBP,MAAM,EAAED,MAAM,CAACC,MAAM;IACrBC,MAAM,EAAEF,MAAM,CAACE;EACnB,CAAC;AACL,CAAC;AAACC,OAAA,CAAAG,gBAAA,GAAAA,gBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { HcmsTasksContext } from "../../types";
|
|
2
|
+
import type { IDeleteModelTaskInput, IDeleteModelTaskOutput } from "./types";
|
|
3
|
+
export declare const createDeleteModelTask: () => (import("@webiny/api").ContextPlugin<HcmsTasksContext> | import("@webiny/tasks").TaskDefinitionPlugin<HcmsTasksContext, IDeleteModelTaskInput, IDeleteModelTaskOutput>)[];
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createDeleteModelTask = void 0;
|
|
7
|
+
var _tasks = require("@webiny/tasks");
|
|
8
|
+
var _DeleteModelRunner = require("./DeleteModelRunner");
|
|
9
|
+
var _constants = require("./constants");
|
|
10
|
+
var _graphql = require("./graphql");
|
|
11
|
+
var _crud = require("./graphql/crud");
|
|
12
|
+
const createDefinition = () => {
|
|
13
|
+
return (0, _tasks.createTaskDefinition)({
|
|
14
|
+
id: _constants.DELETE_MODEL_TASK,
|
|
15
|
+
disableDatabaseLogs: true,
|
|
16
|
+
title: "Delete model and all of the entries",
|
|
17
|
+
maxIterations: 50,
|
|
18
|
+
isPrivate: true,
|
|
19
|
+
async run(params) {
|
|
20
|
+
try {
|
|
21
|
+
const deleteModelRunner = (0, _DeleteModelRunner.createDeleteModelRunner)({
|
|
22
|
+
taskId: params.store.getTask().id,
|
|
23
|
+
context: params.context,
|
|
24
|
+
response: params.response
|
|
25
|
+
});
|
|
26
|
+
return await deleteModelRunner.execute({
|
|
27
|
+
input: params.input,
|
|
28
|
+
isCloseToTimeout: params.isCloseToTimeout,
|
|
29
|
+
isAborted: params.isAborted
|
|
30
|
+
});
|
|
31
|
+
} catch (ex) {
|
|
32
|
+
return params.response.error(ex);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
createInputValidation: ({
|
|
36
|
+
validator
|
|
37
|
+
}) => {
|
|
38
|
+
return {
|
|
39
|
+
modelId: validator.string(),
|
|
40
|
+
lastDeletedId: validator.string().optional()
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
const createDeleteModelTask = () => {
|
|
46
|
+
return [createDefinition(), (0, _crud.createDeleteModelCrud)(), (0, _graphql.createDeleteModelGraphQl)()];
|
|
47
|
+
};
|
|
48
|
+
exports.createDeleteModelTask = createDeleteModelTask;
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_tasks","require","_DeleteModelRunner","_constants","_graphql","_crud","createDefinition","createTaskDefinition","id","DELETE_MODEL_TASK","disableDatabaseLogs","title","maxIterations","isPrivate","run","params","deleteModelRunner","createDeleteModelRunner","taskId","store","getTask","context","response","execute","input","isCloseToTimeout","isAborted","ex","error","createInputValidation","validator","modelId","string","lastDeletedId","optional","createDeleteModelTask","createDeleteModelCrud","createDeleteModelGraphQl","exports"],"sources":["index.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport type { HcmsTasksContext } from \"~/types\";\nimport type { IDeleteModelTaskInput, IDeleteModelTaskOutput } from \"./types\";\nimport { createDeleteModelRunner } from \"./DeleteModelRunner\";\nimport { DELETE_MODEL_TASK } from \"./constants\";\nimport { createDeleteModelGraphQl } from \"./graphql\";\nimport { createDeleteModelCrud } from \"./graphql/crud\";\n\nconst createDefinition = () => {\n return createTaskDefinition<HcmsTasksContext, IDeleteModelTaskInput, IDeleteModelTaskOutput>({\n id: DELETE_MODEL_TASK,\n disableDatabaseLogs: true,\n title: \"Delete model and all of the entries\",\n maxIterations: 50,\n isPrivate: true,\n async run(params) {\n try {\n const deleteModelRunner = createDeleteModelRunner({\n taskId: params.store.getTask().id,\n context: params.context,\n response: params.response\n });\n return await deleteModelRunner.execute({\n input: params.input,\n isCloseToTimeout: params.isCloseToTimeout,\n isAborted: params.isAborted\n });\n } catch (ex) {\n return params.response.error(ex);\n }\n },\n createInputValidation: ({ validator }) => {\n return {\n modelId: validator.string(),\n lastDeletedId: validator.string().optional()\n };\n }\n });\n};\n\nexport const createDeleteModelTask = () => {\n return [createDefinition(), createDeleteModelCrud(), createDeleteModelGraphQl()];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAEA,MAAMK,gBAAgB,GAAGA,CAAA,KAAM;EAC3B,OAAO,IAAAC,2BAAoB,EAAkE;IACzFC,EAAE,EAAEC,4BAAiB;IACrBC,mBAAmB,EAAE,IAAI;IACzBC,KAAK,EAAE,qCAAqC;IAC5CC,aAAa,EAAE,EAAE;IACjBC,SAAS,EAAE,IAAI;IACf,MAAMC,GAAGA,CAACC,MAAM,EAAE;MACd,IAAI;QACA,MAAMC,iBAAiB,GAAG,IAAAC,0CAAuB,EAAC;UAC9CC,MAAM,EAAEH,MAAM,CAACI,KAAK,CAACC,OAAO,CAAC,CAAC,CAACZ,EAAE;UACjCa,OAAO,EAAEN,MAAM,CAACM,OAAO;UACvBC,QAAQ,EAAEP,MAAM,CAACO;QACrB,CAAC,CAAC;QACF,OAAO,MAAMN,iBAAiB,CAACO,OAAO,CAAC;UACnCC,KAAK,EAAET,MAAM,CAACS,KAAK;UACnBC,gBAAgB,EAAEV,MAAM,CAACU,gBAAgB;UACzCC,SAAS,EAAEX,MAAM,CAACW;QACtB,CAAC,CAAC;MACN,CAAC,CAAC,OAAOC,EAAE,EAAE;QACT,OAAOZ,MAAM,CAACO,QAAQ,CAACM,KAAK,CAACD,EAAE,CAAC;MACpC;IACJ,CAAC;IACDE,qBAAqB,EAAEA,CAAC;MAAEC;IAAU,CAAC,KAAK;MACtC,OAAO;QACHC,OAAO,EAAED,SAAS,CAACE,MAAM,CAAC,CAAC;QAC3BC,aAAa,EAAEH,SAAS,CAACE,MAAM,CAAC,CAAC,CAACE,QAAQ,CAAC;MAC/C,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC;AAEM,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACvC,OAAO,CAAC7B,gBAAgB,CAAC,CAAC,EAAE,IAAA8B,2BAAqB,EAAC,CAAC,EAAE,IAAAC,iCAAwB,EAAC,CAAC,CAAC;AACpF,CAAC;AAACC,OAAA,CAAAH,qBAAA,GAAAA,qBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { CmsIdentity } from "@webiny/api-headless-cms/types";
|
|
2
|
+
import type { ITaskResponseDoneResultOutput } from "@webiny/tasks";
|
|
3
|
+
import type { ListValuesResult } from "@webiny/db";
|
|
4
|
+
import type { GenericRecord } from "@webiny/api/types";
|
|
5
|
+
export interface IDeleteModelTaskInput {
|
|
6
|
+
modelId: string;
|
|
7
|
+
lastDeletedId?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface IDeleteModelTaskOutput extends ITaskResponseDoneResultOutput {
|
|
10
|
+
total?: number;
|
|
11
|
+
deleted?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare enum DeleteCmsModelTaskStatus {
|
|
14
|
+
RUNNING = "running",
|
|
15
|
+
DONE = "done",
|
|
16
|
+
ERROR = "error",
|
|
17
|
+
CANCELED = "canceled"
|
|
18
|
+
}
|
|
19
|
+
export interface IDeleteCmsModelTask {
|
|
20
|
+
id: string;
|
|
21
|
+
status: DeleteCmsModelTaskStatus;
|
|
22
|
+
total: number;
|
|
23
|
+
deleted: number;
|
|
24
|
+
message?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface IStoreValue {
|
|
27
|
+
modelId: string;
|
|
28
|
+
tenant: string;
|
|
29
|
+
locale: string;
|
|
30
|
+
identity: CmsIdentity;
|
|
31
|
+
task: string;
|
|
32
|
+
}
|
|
33
|
+
export type ListStoreKeysResult = Promise<ListValuesResult<GenericRecord<string, IStoreValue>>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DeleteCmsModelTaskStatus = void 0;
|
|
7
|
+
let DeleteCmsModelTaskStatus = exports.DeleteCmsModelTaskStatus = /*#__PURE__*/function (DeleteCmsModelTaskStatus) {
|
|
8
|
+
DeleteCmsModelTaskStatus["RUNNING"] = "running";
|
|
9
|
+
DeleteCmsModelTaskStatus["DONE"] = "done";
|
|
10
|
+
DeleteCmsModelTaskStatus["ERROR"] = "error";
|
|
11
|
+
DeleteCmsModelTaskStatus["CANCELED"] = "canceled";
|
|
12
|
+
return DeleteCmsModelTaskStatus;
|
|
13
|
+
}({});
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DeleteCmsModelTaskStatus","exports"],"sources":["types.ts"],"sourcesContent":["import type { CmsIdentity } from \"@webiny/api-headless-cms/types\";\nimport type { ITaskResponseDoneResultOutput } from \"@webiny/tasks\";\nimport type { ListValuesResult } from \"@webiny/db\";\nimport type { GenericRecord } from \"@webiny/api/types\";\n\nexport interface IDeleteModelTaskInput {\n modelId: string;\n lastDeletedId?: string;\n}\n\nexport interface IDeleteModelTaskOutput extends ITaskResponseDoneResultOutput {\n total?: number;\n deleted?: number;\n}\n\nexport enum DeleteCmsModelTaskStatus {\n RUNNING = \"running\",\n DONE = \"done\",\n ERROR = \"error\",\n CANCELED = \"canceled\"\n}\n\nexport interface IDeleteCmsModelTask {\n id: string;\n status: DeleteCmsModelTaskStatus;\n total: number;\n deleted: number;\n message?: string;\n}\n\nexport interface IStoreValue {\n modelId: string;\n tenant: string;\n locale: string;\n identity: CmsIdentity;\n task: string;\n}\n\nexport type ListStoreKeysResult = Promise<ListValuesResult<GenericRecord<string, IStoreValue>>>;\n"],"mappings":";;;;;;IAeYA,wBAAwB,GAAAC,OAAA,CAAAD,wBAAA,0BAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAA,OAAxBA,wBAAwB;AAAA","ignoreList":[]}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
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 "./tasks/deleteModel/types";
|
|
5
|
+
export interface HeadlessCmsFullyDeleteModel {
|
|
6
|
+
fullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;
|
|
7
|
+
cancelFullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;
|
|
8
|
+
getDeleteModelProgress: (modelId: string) => Promise<IDeleteCmsModelTask>;
|
|
9
|
+
isModelBeingDeleted: (modelId: string) => Promise<boolean>;
|
|
10
|
+
listModelsBeingDeleted: () => Promise<IStoreValue[]>;
|
|
11
|
+
}
|
|
12
|
+
export interface HcmsTasksContext extends HcmsBulkActionsContext, AcoContext {
|
|
13
|
+
cms: HeadlessCms & HeadlessCmsFullyDeleteModel;
|
|
14
|
+
}
|
package/types.js
ADDED
package/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { HcmsBulkActionsContext } from \"@webiny/api-headless-cms-bulk-actions/types\";\nimport type { AcoContext } from \"@webiny/api-aco/types\";\nimport type { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport type { IDeleteCmsModelTask, IStoreValue } from \"~/tasks/deleteModel/types\";\n\nexport interface HeadlessCmsFullyDeleteModel {\n fullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;\n cancelFullyDeleteModel: (modelId: string) => Promise<IDeleteCmsModelTask>;\n getDeleteModelProgress: (modelId: string) => Promise<IDeleteCmsModelTask>;\n isModelBeingDeleted: (modelId: string) => Promise<boolean>;\n listModelsBeingDeleted: () => Promise<IStoreValue[]>;\n}\n\nexport interface HcmsTasksContext extends HcmsBulkActionsContext, AcoContext {\n cms: HeadlessCms & HeadlessCmsFullyDeleteModel;\n}\n"],"mappings":"","ignoreList":[]}
|