@webiny/api-headless-cms-bulk-actions 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.
Files changed (71) hide show
  1. package/abstractions/IUseCase.js +0 -3
  2. package/abstractions/index.js +0 -3
  3. package/domain/BulkActionName.js +9 -15
  4. package/domain/BulkActionName.js.map +1 -1
  5. package/features/BulkActionContext/abstractions.js +2 -3
  6. package/features/BulkActionContext/abstractions.js.map +1 -1
  7. package/features/BulkActionContext/index.js +0 -2
  8. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js +22 -20
  9. package/features/DeleteEntriesBulkAction/DeleteEntriesBulkAction.js.map +1 -1
  10. package/features/DeleteEntriesBulkAction/feature.js +6 -5
  11. package/features/DeleteEntriesBulkAction/feature.js.map +1 -1
  12. package/features/EntriesBulkAction/abstractions.js +3 -2
  13. package/features/EntriesBulkAction/abstractions.js.map +1 -1
  14. package/features/EntriesBulkAction/createBulkActionTasks.js +114 -131
  15. package/features/EntriesBulkAction/createBulkActionTasks.js.map +1 -1
  16. package/features/EntriesBulkAction/internals/ChildTasksCleanup.js +27 -64
  17. package/features/EntriesBulkAction/internals/ChildTasksCleanup.js.map +1 -1
  18. package/features/EntriesBulkAction/internals/CreateTasksByModel.js +68 -99
  19. package/features/EntriesBulkAction/internals/CreateTasksByModel.js.map +1 -1
  20. package/features/EntriesBulkAction/internals/ProcessTask.js +35 -68
  21. package/features/EntriesBulkAction/internals/ProcessTask.js.map +1 -1
  22. package/features/EntriesBulkAction/internals/ProcessTaskResult.js +20 -19
  23. package/features/EntriesBulkAction/internals/ProcessTaskResult.js.map +1 -1
  24. package/features/EntriesBulkAction/internals/ProcessTasksByModel.js +37 -50
  25. package/features/EntriesBulkAction/internals/ProcessTasksByModel.js.map +1 -1
  26. package/features/EntriesBulkAction/internals/TaskCache.js +30 -64
  27. package/features/EntriesBulkAction/internals/TaskCache.js.map +1 -1
  28. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js +20 -20
  29. package/features/MoveToFolderBulkAction/MoveToFolderBulkAction.js.map +1 -1
  30. package/features/MoveToFolderBulkAction/feature.js +6 -5
  31. package/features/MoveToFolderBulkAction/feature.js.map +1 -1
  32. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js +22 -20
  33. package/features/MoveToTrashBulkAction/MoveToTrashBulkAction.js.map +1 -1
  34. package/features/MoveToTrashBulkAction/feature.js +6 -5
  35. package/features/MoveToTrashBulkAction/feature.js.map +1 -1
  36. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js +27 -28
  37. package/features/PublishEntriesBulkAction/PublishEntriesBulkAction.js.map +1 -1
  38. package/features/PublishEntriesBulkAction/feature.js +6 -5
  39. package/features/PublishEntriesBulkAction/feature.js.map +1 -1
  40. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js +20 -18
  41. package/features/RestoreEntriesBulkAction/RestoreEntriesBulkAction.js.map +1 -1
  42. package/features/RestoreEntriesBulkAction/feature.js +6 -5
  43. package/features/RestoreEntriesBulkAction/feature.js.map +1 -1
  44. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js +20 -18
  45. package/features/UnpublishEntriesBulkAction/UnpublishEntriesBulkAction.js.map +1 -1
  46. package/features/UnpublishEntriesBulkAction/feature.js +6 -5
  47. package/features/UnpublishEntriesBulkAction/feature.js.map +1 -1
  48. package/graphql/createBulkActionGraphQL.js +44 -51
  49. package/graphql/createBulkActionGraphQL.js.map +1 -1
  50. package/graphql/createDefaultGraphQL.js +30 -34
  51. package/graphql/createDefaultGraphQL.js.map +1 -1
  52. package/handlers/eventBridgeEventHandler.js +23 -41
  53. package/handlers/eventBridgeEventHandler.js.map +1 -1
  54. package/handlers/index.js +5 -3
  55. package/handlers/index.js.map +1 -1
  56. package/handlers/setupEventsTenant.js +7 -9
  57. package/handlers/setupEventsTenant.js.map +1 -1
  58. package/index.js +29 -33
  59. package/index.js.map +1 -1
  60. package/package.json +17 -17
  61. package/tasks/EmptyTrashBinTaskDefinition.js +83 -109
  62. package/tasks/EmptyTrashBinTaskDefinition.js.map +1 -1
  63. package/tasks/createEmptyTrashBinsTask.js +4 -5
  64. package/tasks/createEmptyTrashBinsTask.js.map +1 -1
  65. package/tasks/index.js +0 -2
  66. package/types.js +7 -18
  67. package/types.js.map +1 -1
  68. package/abstractions/IUseCase.js.map +0 -1
  69. package/abstractions/index.js.map +0 -1
  70. package/features/BulkActionContext/index.js.map +0 -1
  71. package/tasks/index.js.map +0 -1
@@ -4,122 +4,96 @@ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/i
4
4
  import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
5
5
  import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js";
6
6
  import { ListDeletedEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js";
7
- const calculateDateTimeString = () => {
8
- // Retrieve the retention period from the environment variable WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS,
9
- // or default to 90 days if not set or set to 0.
10
- const retentionPeriodFromEnv = process.env["WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS"];
11
- const retentionPeriod = retentionPeriodFromEnv && Number(retentionPeriodFromEnv) !== 0 ? Number(retentionPeriodFromEnv) : 90;
12
-
13
- // Calculate the date-time by subtracting the retention period (in days) from the current date.
14
- const currentDate = new Date();
15
- currentDate.setDate(currentDate.getDate() - retentionPeriod);
16
-
17
- // Return the calculated date-time string in ISO 8601 format.
18
- return currentDate.toISOString();
7
+ const calculateDateTimeString = ()=>{
8
+ const retentionPeriodFromEnv = process.env["WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS"];
9
+ const retentionPeriod = retentionPeriodFromEnv && 0 !== Number(retentionPeriodFromEnv) ? Number(retentionPeriodFromEnv) : 90;
10
+ const currentDate = new Date();
11
+ currentDate.setDate(currentDate.getDate() - retentionPeriod);
12
+ return currentDate.toISOString();
19
13
  };
20
14
  class EmptyTrashBinTask {
21
- isPrivate = true;
22
- id = "hcmsEntriesEmptyTrashBins";
23
- title = "Headless CMS - Empty all trash bins";
24
- description = "Delete all entries in the trash bin for each model in the system.";
25
- maxIterations = 120;
26
- databaseLogs = false;
27
- selfCleanup = ["onSuccess", "onAbort"];
28
- constructor(tenantContext, listTenants, listModels, listDeletedEntries, deleteEntry) {
29
- this.tenantContext = tenantContext;
30
- this.listTenants = listTenants;
31
- this.listModels = listModels;
32
- this.listDeletedEntries = listDeletedEntries;
33
- this.deleteEntry = deleteEntry;
34
- }
35
- async run(params) {
36
- const {
37
- input,
38
- controller
39
- } = params;
40
-
41
- // Abort the task if needed.
42
- if (controller.runtime.isAborted()) {
43
- return controller.response.aborted();
15
+ constructor(tenantContext, listTenants, listModels, listDeletedEntries, deleteEntry){
16
+ this.tenantContext = tenantContext;
17
+ this.listTenants = listTenants;
18
+ this.listModels = listModels;
19
+ this.listDeletedEntries = listDeletedEntries;
20
+ this.deleteEntry = deleteEntry;
21
+ this.isPrivate = true;
22
+ this.id = "hcmsEntriesEmptyTrashBins";
23
+ this.title = "Headless CMS - Empty all trash bins";
24
+ this.description = "Delete all entries in the trash bin for each model in the system.";
25
+ this.maxIterations = 120;
26
+ this.databaseLogs = false;
27
+ this.selfCleanup = [
28
+ "onSuccess",
29
+ "onAbort"
30
+ ];
44
31
  }
45
-
46
- // Fetch all tenants, excluding those already processed.
47
- const tenantsResult = await this.listTenants.execute();
48
- const baseTenants = tenantsResult.value;
49
- const executedTenantIds = input.executedTenantIds || [];
50
- const tenants = baseTenants.filter(tenant => !executedTenantIds.includes(tenant.id));
51
- let shouldTaskContinue = false;
52
-
53
- // Iterate over each tenant.
54
- await this.tenantContext.withEachTenant(tenants, async tenant => {
55
- if (controller.runtime.isCloseToTimeout()) {
56
- shouldTaskContinue = true;
57
- return;
58
- }
59
- if (controller.runtime.isCloseToTimeout()) {
60
- shouldTaskContinue = true;
61
- return;
62
- }
63
-
64
- // List all non-private models.
65
- const modelsResult = await this.listModels.execute({
66
- includePrivate: false
67
- });
68
- const models = modelsResult.value;
69
-
70
- // Process each model to delete trashed entries.
71
- for (const model of models) {
72
- // Query parameters for fetching deleted entries older than a minute ago.
73
- const listEntriesParams = {
74
- where: {
75
- deletedOn_lt: calculateDateTimeString()
76
- },
77
- limit: 50
78
- };
79
-
80
- // Continue deleting entries while there are entries left to delete.
81
- while (true) {
82
- const listResult = await this.listDeletedEntries.execute(model, listEntriesParams);
83
- const {
84
- entries,
85
- meta
86
- } = listResult.value;
87
- if (meta.totalCount === 0) {
88
- break;
89
- }
90
- if (controller.runtime.isCloseToTimeout()) {
91
- shouldTaskContinue = true;
92
- break;
93
- }
94
- for (const entry of entries) {
32
+ async run(params) {
33
+ const { input, controller } = params;
34
+ if (controller.runtime.isAborted()) return controller.response.aborted();
35
+ const tenantsResult = await this.listTenants.execute();
36
+ const baseTenants = tenantsResult.value;
37
+ const executedTenantIds = input.executedTenantIds || [];
38
+ const tenants = baseTenants.filter((tenant)=>!executedTenantIds.includes(tenant.id));
39
+ let shouldTaskContinue = false;
40
+ await this.tenantContext.withEachTenant(tenants, async (tenant)=>{
41
+ if (controller.runtime.isCloseToTimeout()) {
42
+ shouldTaskContinue = true;
43
+ return;
44
+ }
95
45
  if (controller.runtime.isCloseToTimeout()) {
96
- shouldTaskContinue = true;
97
- break;
46
+ shouldTaskContinue = true;
47
+ return;
98
48
  }
99
- // Delete each entry individually.
100
- await this.deleteEntry.execute(model, entry.id, {
101
- permanently: true
49
+ const modelsResult = await this.listModels.execute({
50
+ includePrivate: false
102
51
  });
103
- }
104
- }
105
- }
106
-
107
- // If the task isn't continuing, add the tenant to the executed list.
108
- if (!shouldTaskContinue) {
109
- executedTenantIds.push(tenant.id);
110
- }
111
- });
112
-
113
- // Continue the task or mark it as done based on the `shouldContinue` flag.
114
- return shouldTaskContinue ? controller.response.continue({
115
- ...input,
116
- executedTenantIds
117
- }) : controller.response.done("Task done: emptied the trash bin for all registered models.");
118
- }
52
+ const models = modelsResult.value;
53
+ for (const model of models){
54
+ const listEntriesParams = {
55
+ where: {
56
+ deletedOn_lt: calculateDateTimeString()
57
+ },
58
+ limit: 50
59
+ };
60
+ while(true){
61
+ const listResult = await this.listDeletedEntries.execute(model, listEntriesParams);
62
+ const { entries, meta } = listResult.value;
63
+ if (0 === meta.totalCount) break;
64
+ if (controller.runtime.isCloseToTimeout()) {
65
+ shouldTaskContinue = true;
66
+ break;
67
+ }
68
+ for (const entry of entries){
69
+ if (controller.runtime.isCloseToTimeout()) {
70
+ shouldTaskContinue = true;
71
+ break;
72
+ }
73
+ await this.deleteEntry.execute(model, entry.id, {
74
+ permanently: true
75
+ });
76
+ }
77
+ }
78
+ }
79
+ if (!shouldTaskContinue) executedTenantIds.push(tenant.id);
80
+ });
81
+ return shouldTaskContinue ? controller.response.continue({
82
+ ...input,
83
+ executedTenantIds
84
+ }) : controller.response.done("Task done: emptied the trash bin for all registered models.");
85
+ }
119
86
  }
120
- export const EmptyTrashBinTaskDefinition = TaskDefinition.createImplementation({
121
- implementation: EmptyTrashBinTask,
122
- dependencies: [TenantContext, ListTenantsUseCase, ListModelsUseCase, ListDeletedEntriesUseCase, DeleteEntryUseCase]
87
+ const EmptyTrashBinTaskDefinition = TaskDefinition.createImplementation({
88
+ implementation: EmptyTrashBinTask,
89
+ dependencies: [
90
+ TenantContext,
91
+ ListTenantsUseCase,
92
+ ListModelsUseCase,
93
+ ListDeletedEntriesUseCase,
94
+ DeleteEntryUseCase
95
+ ]
123
96
  });
97
+ export { EmptyTrashBinTaskDefinition };
124
98
 
125
99
  //# sourceMappingURL=EmptyTrashBinTaskDefinition.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["TaskDefinition","ListTenantsUseCase","TenantContext","ListModelsUseCase","DeleteEntryUseCase","ListDeletedEntriesUseCase","calculateDateTimeString","retentionPeriodFromEnv","process","env","retentionPeriod","Number","currentDate","Date","setDate","getDate","toISOString","EmptyTrashBinTask","isPrivate","id","title","description","maxIterations","databaseLogs","selfCleanup","constructor","tenantContext","listTenants","listModels","listDeletedEntries","deleteEntry","run","params","input","controller","runtime","isAborted","response","aborted","tenantsResult","execute","baseTenants","value","executedTenantIds","tenants","filter","tenant","includes","shouldTaskContinue","withEachTenant","isCloseToTimeout","modelsResult","includePrivate","models","model","listEntriesParams","where","deletedOn_lt","limit","listResult","entries","meta","totalCount","entry","permanently","push","continue","done","EmptyTrashBinTaskDefinition","createImplementation","implementation","dependencies"],"sources":["EmptyTrashBinTaskDefinition.ts"],"sourcesContent":["import type { IEmptyTrashBinsInput, IEmptyTrashBinsOutput } from \"~/types.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { ListTenantsUseCase } from \"@webiny/api-core/features/tenancy/ListTenants/index.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { DeleteEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js\";\nimport { ListDeletedEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js\";\n\nconst calculateDateTimeString = () => {\n // Retrieve the retention period from the environment variable WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS,\n // or default to 90 days if not set or set to 0.\n const retentionPeriodFromEnv = process.env[\"WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS\"];\n const retentionPeriod =\n retentionPeriodFromEnv && Number(retentionPeriodFromEnv) !== 0\n ? Number(retentionPeriodFromEnv)\n : 90;\n\n // Calculate the date-time by subtracting the retention period (in days) from the current date.\n const currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - retentionPeriod);\n\n // Return the calculated date-time string in ISO 8601 format.\n return currentDate.toISOString();\n};\n\nclass EmptyTrashBinTask implements TaskDefinition.Interface<\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n> {\n public readonly isPrivate = true;\n public readonly id = \"hcmsEntriesEmptyTrashBins\";\n public readonly title = \"Headless CMS - Empty all trash bins\";\n public readonly description =\n \"Delete all entries in the trash bin for each model in the system.\";\n public readonly maxIterations = 120;\n public readonly databaseLogs = false;\n\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n constructor(\n private tenantContext: TenantContext.Interface,\n private listTenants: ListTenantsUseCase.Interface,\n private listModels: ListModelsUseCase.Interface,\n private listDeletedEntries: ListDeletedEntriesUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface\n ) {}\n\n async run(\n params: TaskDefinition.RunParams<IEmptyTrashBinsInput, IEmptyTrashBinsOutput>\n ): Promise<TaskDefinition.Result<IEmptyTrashBinsInput, IEmptyTrashBinsOutput>> {\n const { input, controller } = params;\n\n // Abort the task if needed.\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n // Fetch all tenants, excluding those already processed.\n const tenantsResult = await this.listTenants.execute();\n const baseTenants = tenantsResult.value;\n const executedTenantIds = input.executedTenantIds || [];\n const tenants = baseTenants.filter(tenant => !executedTenantIds.includes(tenant.id));\n\n let shouldTaskContinue = false;\n\n // Iterate over each tenant.\n await this.tenantContext.withEachTenant(tenants, async tenant => {\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n return;\n }\n\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n return;\n }\n\n // List all non-private models.\n const modelsResult = await this.listModels.execute({ includePrivate: false });\n const models = modelsResult.value;\n\n // Process each model to delete trashed entries.\n for (const model of models) {\n // Query parameters for fetching deleted entries older than a minute ago.\n const listEntriesParams = {\n where: {\n deletedOn_lt: calculateDateTimeString()\n },\n limit: 50\n };\n\n // Continue deleting entries while there are entries left to delete.\n while (true) {\n const listResult = await this.listDeletedEntries.execute(\n model,\n listEntriesParams\n );\n const { entries, meta } = listResult.value;\n\n if (meta.totalCount === 0) {\n break;\n }\n\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n break;\n }\n for (const entry of entries) {\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n break;\n }\n // Delete each entry individually.\n await this.deleteEntry.execute(model, entry.id, { permanently: true });\n }\n }\n }\n\n // If the task isn't continuing, add the tenant to the executed list.\n if (!shouldTaskContinue) {\n executedTenantIds.push(tenant.id);\n }\n });\n\n // Continue the task or mark it as done based on the `shouldContinue` flag.\n return shouldTaskContinue\n ? controller.response.continue({ ...input, executedTenantIds })\n : controller.response.done(\n \"Task done: emptied the trash bin for all registered models.\"\n );\n }\n}\n\nexport const EmptyTrashBinTaskDefinition = TaskDefinition.createImplementation({\n implementation: EmptyTrashBinTask,\n dependencies: [\n TenantContext,\n ListTenantsUseCase,\n ListModelsUseCase,\n ListDeletedEntriesUseCase,\n DeleteEntryUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"tasks/EmptyTrashBinTaskDefinition.js","sources":["../../src/tasks/EmptyTrashBinTaskDefinition.ts"],"sourcesContent":["import type { IEmptyTrashBinsInput, IEmptyTrashBinsOutput } from \"~/types.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { ListTenantsUseCase } from \"@webiny/api-core/features/tenancy/ListTenants/index.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { DeleteEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/index.js\";\nimport { ListDeletedEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries/index.js\";\n\nconst calculateDateTimeString = () => {\n // Retrieve the retention period from the environment variable WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS,\n // or default to 90 days if not set or set to 0.\n const retentionPeriodFromEnv = process.env[\"WEBINY_TRASH_BIN_RETENTION_PERIOD_DAYS\"];\n const retentionPeriod =\n retentionPeriodFromEnv && Number(retentionPeriodFromEnv) !== 0\n ? Number(retentionPeriodFromEnv)\n : 90;\n\n // Calculate the date-time by subtracting the retention period (in days) from the current date.\n const currentDate = new Date();\n currentDate.setDate(currentDate.getDate() - retentionPeriod);\n\n // Return the calculated date-time string in ISO 8601 format.\n return currentDate.toISOString();\n};\n\nclass EmptyTrashBinTask implements TaskDefinition.Interface<\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n> {\n public readonly isPrivate = true;\n public readonly id = \"hcmsEntriesEmptyTrashBins\";\n public readonly title = \"Headless CMS - Empty all trash bins\";\n public readonly description =\n \"Delete all entries in the trash bin for each model in the system.\";\n public readonly maxIterations = 120;\n public readonly databaseLogs = false;\n\n public readonly selfCleanup = [\"onSuccess\" as const, \"onAbort\" as const];\n\n constructor(\n private tenantContext: TenantContext.Interface,\n private listTenants: ListTenantsUseCase.Interface,\n private listModels: ListModelsUseCase.Interface,\n private listDeletedEntries: ListDeletedEntriesUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface\n ) {}\n\n async run(\n params: TaskDefinition.RunParams<IEmptyTrashBinsInput, IEmptyTrashBinsOutput>\n ): Promise<TaskDefinition.Result<IEmptyTrashBinsInput, IEmptyTrashBinsOutput>> {\n const { input, controller } = params;\n\n // Abort the task if needed.\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n // Fetch all tenants, excluding those already processed.\n const tenantsResult = await this.listTenants.execute();\n const baseTenants = tenantsResult.value;\n const executedTenantIds = input.executedTenantIds || [];\n const tenants = baseTenants.filter(tenant => !executedTenantIds.includes(tenant.id));\n\n let shouldTaskContinue = false;\n\n // Iterate over each tenant.\n await this.tenantContext.withEachTenant(tenants, async tenant => {\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n return;\n }\n\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n return;\n }\n\n // List all non-private models.\n const modelsResult = await this.listModels.execute({ includePrivate: false });\n const models = modelsResult.value;\n\n // Process each model to delete trashed entries.\n for (const model of models) {\n // Query parameters for fetching deleted entries older than a minute ago.\n const listEntriesParams = {\n where: {\n deletedOn_lt: calculateDateTimeString()\n },\n limit: 50\n };\n\n // Continue deleting entries while there are entries left to delete.\n while (true) {\n const listResult = await this.listDeletedEntries.execute(\n model,\n listEntriesParams\n );\n const { entries, meta } = listResult.value;\n\n if (meta.totalCount === 0) {\n break;\n }\n\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n break;\n }\n for (const entry of entries) {\n if (controller.runtime.isCloseToTimeout()) {\n shouldTaskContinue = true;\n break;\n }\n // Delete each entry individually.\n await this.deleteEntry.execute(model, entry.id, { permanently: true });\n }\n }\n }\n\n // If the task isn't continuing, add the tenant to the executed list.\n if (!shouldTaskContinue) {\n executedTenantIds.push(tenant.id);\n }\n });\n\n // Continue the task or mark it as done based on the `shouldContinue` flag.\n return shouldTaskContinue\n ? controller.response.continue({ ...input, executedTenantIds })\n : controller.response.done(\n \"Task done: emptied the trash bin for all registered models.\"\n );\n }\n}\n\nexport const EmptyTrashBinTaskDefinition = TaskDefinition.createImplementation({\n implementation: EmptyTrashBinTask,\n dependencies: [\n TenantContext,\n ListTenantsUseCase,\n ListModelsUseCase,\n ListDeletedEntriesUseCase,\n DeleteEntryUseCase\n ]\n});\n"],"names":["calculateDateTimeString","retentionPeriodFromEnv","process","retentionPeriod","Number","currentDate","Date","EmptyTrashBinTask","tenantContext","listTenants","listModels","listDeletedEntries","deleteEntry","params","input","controller","tenantsResult","baseTenants","executedTenantIds","tenants","tenant","shouldTaskContinue","modelsResult","models","model","listEntriesParams","listResult","entries","meta","entry","EmptyTrashBinTaskDefinition","TaskDefinition","TenantContext","ListTenantsUseCase","ListModelsUseCase","ListDeletedEntriesUseCase","DeleteEntryUseCase"],"mappings":";;;;;;AAQA,MAAMA,0BAA0B;IAG5B,MAAMC,yBAAyBC,QAAQ,GAAG,CAAC,yCAAyC;IACpF,MAAMC,kBACFF,0BAA0BG,AAAmC,MAAnCA,OAAOH,0BAC3BG,OAAOH,0BACP;IAGV,MAAMI,cAAc,IAAIC;IACxBD,YAAY,OAAO,CAACA,YAAY,OAAO,KAAKF;IAG5C,OAAOE,YAAY,WAAW;AAClC;AAEA,MAAME;IAcF,YACYC,aAAsC,EACtCC,WAAyC,EACzCC,UAAuC,EACvCC,kBAAuD,EACvDC,WAAyC,CACnD;aALUJ,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,UAAU,GAAVA;aACAC,kBAAkB,GAAlBA;aACAC,WAAW,GAAXA;aAfI,SAAS,GAAG;aACZ,EAAE,GAAG;aACL,KAAK,GAAG;aACR,WAAW,GACvB;aACY,aAAa,GAAG;aAChB,YAAY,GAAG;aAEf,WAAW,GAAG;YAAC;YAAsB;SAAmB;IAQrE;IAEH,MAAM,IACFC,MAA6E,EACF;QAC3E,MAAM,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGF;QAG9B,IAAIE,WAAW,OAAO,CAAC,SAAS,IAC5B,OAAOA,WAAW,QAAQ,CAAC,OAAO;QAItC,MAAMC,gBAAgB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO;QACpD,MAAMC,cAAcD,cAAc,KAAK;QACvC,MAAME,oBAAoBJ,MAAM,iBAAiB,IAAI,EAAE;QACvD,MAAMK,UAAUF,YAAY,MAAM,CAACG,CAAAA,SAAU,CAACF,kBAAkB,QAAQ,CAACE,OAAO,EAAE;QAElF,IAAIC,qBAAqB;QAGzB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAACF,SAAS,OAAMC;YACnD,IAAIL,WAAW,OAAO,CAAC,gBAAgB,IAAI;gBACvCM,qBAAqB;gBACrB;YACJ;YAEA,IAAIN,WAAW,OAAO,CAAC,gBAAgB,IAAI;gBACvCM,qBAAqB;gBACrB;YACJ;YAGA,MAAMC,eAAe,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,gBAAgB;YAAM;YAC3E,MAAMC,SAASD,aAAa,KAAK;YAGjC,KAAK,MAAME,SAASD,OAAQ;gBAExB,MAAME,oBAAoB;oBACtB,OAAO;wBACH,cAAczB;oBAClB;oBACA,OAAO;gBACX;gBAGA,MAAO,KAAM;oBACT,MAAM0B,aAAa,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CACpDF,OACAC;oBAEJ,MAAM,EAAEE,OAAO,EAAEC,IAAI,EAAE,GAAGF,WAAW,KAAK;oBAE1C,IAAIE,AAAoB,MAApBA,KAAK,UAAU,EACf;oBAGJ,IAAIb,WAAW,OAAO,CAAC,gBAAgB,IAAI;wBACvCM,qBAAqB;wBACrB;oBACJ;oBACA,KAAK,MAAMQ,SAASF,QAAS;wBACzB,IAAIZ,WAAW,OAAO,CAAC,gBAAgB,IAAI;4BACvCM,qBAAqB;4BACrB;wBACJ;wBAEA,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACG,OAAOK,MAAM,EAAE,EAAE;4BAAE,aAAa;wBAAK;oBACxE;gBACJ;YACJ;YAGA,IAAI,CAACR,oBACDH,kBAAkB,IAAI,CAACE,OAAO,EAAE;QAExC;QAGA,OAAOC,qBACDN,WAAW,QAAQ,CAAC,QAAQ,CAAC;YAAE,GAAGD,KAAK;YAAEI;QAAkB,KAC3DH,WAAW,QAAQ,CAAC,IAAI,CACpB;IAEd;AACJ;AAEO,MAAMe,8BAA8BC,eAAe,oBAAoB,CAAC;IAC3E,gBAAgBxB;IAChB,cAAc;QACVyB;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -1,9 +1,8 @@
1
1
  import { createContextPlugin } from "@webiny/api";
2
2
  import { EmptyTrashBinTaskDefinition } from "./EmptyTrashBinTaskDefinition.js";
3
- export const createEmptyTrashBinsTask = () => {
4
- return createContextPlugin(context => {
5
- context.container.register(EmptyTrashBinTaskDefinition);
6
- });
7
- };
3
+ const createEmptyTrashBinsTask = ()=>createContextPlugin((context)=>{
4
+ context.container.register(EmptyTrashBinTaskDefinition);
5
+ });
6
+ export { createEmptyTrashBinsTask };
8
7
 
9
8
  //# sourceMappingURL=createEmptyTrashBinsTask.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createContextPlugin","EmptyTrashBinTaskDefinition","createEmptyTrashBinsTask","context","container","register"],"sources":["createEmptyTrashBinsTask.ts"],"sourcesContent":["import { createContextPlugin } from \"@webiny/api\";\nimport { EmptyTrashBinTaskDefinition } from \"./EmptyTrashBinTaskDefinition.js\";\n\nexport const createEmptyTrashBinsTask = () => {\n return createContextPlugin(context => {\n context.container.register(EmptyTrashBinTaskDefinition);\n });\n};\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,aAAa;AACjD,SAASC,2BAA2B;AAEpC,OAAO,MAAMC,wBAAwB,GAAGA,CAAA,KAAM;EAC1C,OAAOF,mBAAmB,CAACG,OAAO,IAAI;IAClCA,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACJ,2BAA2B,CAAC;EAC3D,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"tasks/createEmptyTrashBinsTask.js","sources":["../../src/tasks/createEmptyTrashBinsTask.ts"],"sourcesContent":["import { createContextPlugin } from \"@webiny/api\";\nimport { EmptyTrashBinTaskDefinition } from \"./EmptyTrashBinTaskDefinition.js\";\n\nexport const createEmptyTrashBinsTask = () => {\n return createContextPlugin(context => {\n context.container.register(EmptyTrashBinTaskDefinition);\n });\n};\n"],"names":["createEmptyTrashBinsTask","createContextPlugin","context","EmptyTrashBinTaskDefinition"],"mappings":";;AAGO,MAAMA,2BAA2B,IAC7BC,oBAAoBC,CAAAA;QACvBA,QAAQ,SAAS,CAAC,QAAQ,CAACC;IAC/B"}
package/tasks/index.js CHANGED
@@ -1,3 +1 @@
1
1
  export * from "./createEmptyTrashBinsTask.js";
2
-
3
- //# sourceMappingURL=index.js.map
package/types.js CHANGED
@@ -1,21 +1,10 @@
1
- /**
2
- * Bulk Action Operation
3
- */
4
-
5
- /**
6
- * Bulk Action Operation By Model
7
- */
8
-
9
- export let BulkActionOperationByModelAction = /*#__PURE__*/function (BulkActionOperationByModelAction) {
10
- BulkActionOperationByModelAction["CREATE_SUBTASKS"] = "CREATE_SUBTASKS";
11
- BulkActionOperationByModelAction["CHECK_MORE_SUBTASKS"] = "CHECK_MORE_SUBTASKS";
12
- BulkActionOperationByModelAction["PROCESS_SUBTASKS"] = "PROCESS_SUBTASKS";
13
- BulkActionOperationByModelAction["END_TASK"] = "END_TASK";
14
- return BulkActionOperationByModelAction;
1
+ var types_BulkActionOperationByModelAction = /*#__PURE__*/ function(BulkActionOperationByModelAction) {
2
+ BulkActionOperationByModelAction["CREATE_SUBTASKS"] = "CREATE_SUBTASKS";
3
+ BulkActionOperationByModelAction["CHECK_MORE_SUBTASKS"] = "CHECK_MORE_SUBTASKS";
4
+ BulkActionOperationByModelAction["PROCESS_SUBTASKS"] = "PROCESS_SUBTASKS";
5
+ BulkActionOperationByModelAction["END_TASK"] = "END_TASK";
6
+ return BulkActionOperationByModelAction;
15
7
  }({});
16
-
17
- /**
18
- * Empty Trash Bin
19
- */
8
+ export { types_BulkActionOperationByModelAction as BulkActionOperationByModelAction };
20
9
 
21
10
  //# sourceMappingURL=types.js.map
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["BulkActionOperationByModelAction"],"sources":["types.ts"],"sourcesContent":["import type { CmsContext } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { Context as BaseContext } from \"@webiny/handler/types.js\";\nimport type { Context as TasksContext, ITaskIdentity } from \"@webiny/tasks/types.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface HcmsBulkActionsContext extends BaseContext, CmsContext, TasksContext {}\n\n/**\n * Bulk Action Operation\n */\n\nexport interface IBulkActionOperationInput {\n modelId: string;\n ids: string[];\n data?: Record<string, any>;\n identity: ITaskIdentity;\n done?: string[];\n failed?: string[];\n}\n\nexport interface IBulkActionOperationOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationTaskParams = TaskDefinition.RunParams<\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n>;\n\n/**\n * Bulk Action Operation By Model\n */\n\nexport enum BulkActionOperationByModelAction {\n CREATE_SUBTASKS = \"CREATE_SUBTASKS\",\n CHECK_MORE_SUBTASKS = \"CHECK_MORE_SUBTASKS\",\n PROCESS_SUBTASKS = \"PROCESS_SUBTASKS\",\n END_TASK = \"END_TASK\"\n}\n\nexport interface IBulkActionOperationByModelInput {\n modelId: string;\n identity?: ITaskIdentity;\n where?: Record<string, any>;\n search?: string;\n after?: string | null;\n data?: Record<string, any>;\n action?: BulkActionOperationByModelAction;\n}\n\nexport interface IBulkActionOperationByModelOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationByModelTaskParams = TaskDefinition.RunParams<\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n>;\n\n/**\n * Empty Trash Bin\n */\n\nexport interface IEmptyTrashBinsInput {\n executedTenantIds?: string[] | null;\n}\n\nexport type IEmptyTrashBinsOutput = TaskDefinition.ResultDone;\n\nexport type IEmptyTrashBinsTaskParams = TaskDefinition.RunParams<\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n>;\n"],"mappings":"AAOA;AACA;AACA;;AAqBA;AACA;AACA;;AAEA,WAAYA,gCAAgC,0BAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAhCA,gCAAgC;EAAA,OAAhCA,gCAAgC;AAAA;;AA2B5C;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import type { CmsContext } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { Context as BaseContext } from \"@webiny/handler/types.js\";\nimport type { Context as TasksContext, ITaskIdentity } from \"@webiny/tasks/types.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface HcmsBulkActionsContext extends BaseContext, CmsContext, TasksContext {}\n\n/**\n * Bulk Action Operation\n */\n\nexport interface IBulkActionOperationInput {\n modelId: string;\n ids: string[];\n data?: Record<string, any>;\n identity: ITaskIdentity;\n done?: string[];\n failed?: string[];\n}\n\nexport interface IBulkActionOperationOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationTaskParams = TaskDefinition.RunParams<\n IBulkActionOperationInput,\n IBulkActionOperationOutput\n>;\n\n/**\n * Bulk Action Operation By Model\n */\n\nexport enum BulkActionOperationByModelAction {\n CREATE_SUBTASKS = \"CREATE_SUBTASKS\",\n CHECK_MORE_SUBTASKS = \"CHECK_MORE_SUBTASKS\",\n PROCESS_SUBTASKS = \"PROCESS_SUBTASKS\",\n END_TASK = \"END_TASK\"\n}\n\nexport interface IBulkActionOperationByModelInput {\n modelId: string;\n identity?: ITaskIdentity;\n where?: Record<string, any>;\n search?: string;\n after?: string | null;\n data?: Record<string, any>;\n action?: BulkActionOperationByModelAction;\n}\n\nexport interface IBulkActionOperationByModelOutput {\n done: string[];\n failed: string[];\n}\n\nexport type IBulkActionOperationByModelTaskParams = TaskDefinition.RunParams<\n IBulkActionOperationByModelInput,\n IBulkActionOperationByModelOutput\n>;\n\n/**\n * Empty Trash Bin\n */\n\nexport interface IEmptyTrashBinsInput {\n executedTenantIds?: string[] | null;\n}\n\nexport type IEmptyTrashBinsOutput = TaskDefinition.ResultDone;\n\nexport type IEmptyTrashBinsTaskParams = TaskDefinition.RunParams<\n IEmptyTrashBinsInput,\n IEmptyTrashBinsOutput\n>;\n"],"names":["BulkActionOperationByModelAction"],"mappings":"AAkCO,IAAKA,yCAAgCA,WAAAA,GAAAA,SAAhCA,gCAAgC;;;;;WAAhCA"}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["IUseCase.ts"],"sourcesContent":["export interface IUseCase<TInput, TOutput> {\n execute(params: TInput): Promise<TOutput>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export type { IUseCase } from \"./IUseCase.js\";\n"],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./abstractions.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./createEmptyTrashBinsTask.js\";\n"],"mappings":"AAAA","ignoreList":[]}