@webiny/api-headless-cms-scheduler 6.3.0 → 6.4.0-beta.0

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 (35) hide show
  1. package/context.js +9 -10
  2. package/context.js.map +1 -1
  3. package/exports/api/cms/scheduler.js +0 -2
  4. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js +30 -44
  5. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js.map +1 -1
  6. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js +25 -39
  7. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js.map +1 -1
  8. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js +24 -38
  9. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js.map +1 -1
  10. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js +25 -39
  11. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js.map +1 -1
  12. package/features/CancelScheduledActionOnEntryChange/feature.js +9 -16
  13. package/features/CancelScheduledActionOnEntryChange/feature.js.map +1 -1
  14. package/features/NamespaceHandler/NamespaceHandler.js +33 -39
  15. package/features/NamespaceHandler/NamespaceHandler.js.map +1 -1
  16. package/features/PublishActionHandler/PublishEntryActionHandler.js +75 -97
  17. package/features/PublishActionHandler/PublishEntryActionHandler.js.map +1 -1
  18. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js +33 -38
  19. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js.map +1 -1
  20. package/features/SchedulePublishEntryUseCase/abstractions.js +3 -3
  21. package/features/SchedulePublishEntryUseCase/abstractions.js.map +1 -1
  22. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js +33 -38
  23. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js.map +1 -1
  24. package/features/ScheduleUnpublishEntryUseCase/abstractions.js +3 -3
  25. package/features/ScheduleUnpublishEntryUseCase/abstractions.js.map +1 -1
  26. package/features/UnpublishActionHandler/UnpublishEntryActionHandler.js +55 -83
  27. package/features/UnpublishActionHandler/UnpublishEntryActionHandler.js.map +1 -1
  28. package/index.js +4 -3
  29. package/index.js.map +1 -1
  30. package/package.json +16 -16
  31. package/types.js +0 -3
  32. package/utils/namespace.js +6 -9
  33. package/utils/namespace.js.map +1 -1
  34. package/exports/api/cms/scheduler.js.map +0 -1
  35. package/types.js.map +0 -1
package/context.js CHANGED
@@ -5,15 +5,14 @@ import { PublishEntryActionHandler } from "./features/PublishActionHandler/Publi
5
5
  import { UnpublishEntryActionHandler } from "./features/UnpublishActionHandler/UnpublishEntryActionHandler.js";
6
6
  import { SchedulePublishEntryUseCase } from "./features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js";
7
7
  import { ScheduleUnpublishEntryUseCase } from "./features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js";
8
- export const createHeadlessCmsScheduleContext = () => {
9
- return new ContextPlugin(async context => {
10
- context.container.register(NamespaceHandler);
11
- context.container.register(PublishEntryActionHandler);
12
- context.container.register(UnpublishEntryActionHandler);
13
- context.container.register(SchedulePublishEntryUseCase);
14
- context.container.register(ScheduleUnpublishEntryUseCase);
15
- CancelScheduledActionOnEntryChangeFeature.register(context.container);
16
- });
17
- };
8
+ const createHeadlessCmsScheduleContext = ()=>new ContextPlugin(async (context)=>{
9
+ context.container.register(NamespaceHandler);
10
+ context.container.register(PublishEntryActionHandler);
11
+ context.container.register(UnpublishEntryActionHandler);
12
+ context.container.register(SchedulePublishEntryUseCase);
13
+ context.container.register(ScheduleUnpublishEntryUseCase);
14
+ CancelScheduledActionOnEntryChangeFeature.register(context.container);
15
+ });
16
+ export { createHeadlessCmsScheduleContext };
18
17
 
19
18
  //# sourceMappingURL=context.js.map
package/context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ContextPlugin","CancelScheduledActionOnEntryChangeFeature","NamespaceHandler","PublishEntryActionHandler","UnpublishEntryActionHandler","SchedulePublishEntryUseCase","ScheduleUnpublishEntryUseCase","createHeadlessCmsScheduleContext","context","container","register"],"sources":["context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { CancelScheduledActionOnEntryChangeFeature } from \"~/features/CancelScheduledActionOnEntryChange/feature.js\";\nimport { NamespaceHandler } from \"~/features/NamespaceHandler/NamespaceHandler.js\";\nimport { PublishEntryActionHandler } from \"~/features/PublishActionHandler/PublishEntryActionHandler.js\";\nimport { UnpublishEntryActionHandler } from \"~/features/UnpublishActionHandler/UnpublishEntryActionHandler.js\";\nimport { SchedulePublishEntryUseCase } from \"~/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js\";\nimport { ScheduleUnpublishEntryUseCase } from \"~/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js\";\n\nexport const createHeadlessCmsScheduleContext = () => {\n return new ContextPlugin(async context => {\n context.container.register(NamespaceHandler);\n context.container.register(PublishEntryActionHandler);\n context.container.register(UnpublishEntryActionHandler);\n context.container.register(SchedulePublishEntryUseCase);\n context.container.register(ScheduleUnpublishEntryUseCase);\n\n CancelScheduledActionOnEntryChangeFeature.register(context.container);\n });\n};\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SAASC,yCAAyC;AAClD,SAASC,gBAAgB;AACzB,SAASC,yBAAyB;AAClC,SAASC,2BAA2B;AACpC,SAASC,2BAA2B;AACpC,SAASC,6BAA6B;AAEtC,OAAO,MAAMC,gCAAgC,GAAGA,CAAA,KAAM;EAClD,OAAO,IAAIP,aAAa,CAAC,MAAMQ,OAAO,IAAI;IACtCA,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACR,gBAAgB,CAAC;IAC5CM,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACP,yBAAyB,CAAC;IACrDK,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACN,2BAA2B,CAAC;IACvDI,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACL,2BAA2B,CAAC;IACvDG,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACJ,6BAA6B,CAAC;IAEzDL,yCAAyC,CAACS,QAAQ,CAACF,OAAO,CAACC,SAAS,CAAC;EACzE,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"context.js","sources":["../src/context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { CancelScheduledActionOnEntryChangeFeature } from \"~/features/CancelScheduledActionOnEntryChange/feature.js\";\nimport { NamespaceHandler } from \"~/features/NamespaceHandler/NamespaceHandler.js\";\nimport { PublishEntryActionHandler } from \"~/features/PublishActionHandler/PublishEntryActionHandler.js\";\nimport { UnpublishEntryActionHandler } from \"~/features/UnpublishActionHandler/UnpublishEntryActionHandler.js\";\nimport { SchedulePublishEntryUseCase } from \"~/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js\";\nimport { ScheduleUnpublishEntryUseCase } from \"~/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js\";\n\nexport const createHeadlessCmsScheduleContext = () => {\n return new ContextPlugin(async context => {\n context.container.register(NamespaceHandler);\n context.container.register(PublishEntryActionHandler);\n context.container.register(UnpublishEntryActionHandler);\n context.container.register(SchedulePublishEntryUseCase);\n context.container.register(ScheduleUnpublishEntryUseCase);\n\n CancelScheduledActionOnEntryChangeFeature.register(context.container);\n });\n};\n"],"names":["createHeadlessCmsScheduleContext","ContextPlugin","context","NamespaceHandler","PublishEntryActionHandler","UnpublishEntryActionHandler","SchedulePublishEntryUseCase","ScheduleUnpublishEntryUseCase","CancelScheduledActionOnEntryChangeFeature"],"mappings":";;;;;;;AAQO,MAAMA,mCAAmC,IACrC,IAAIC,cAAc,OAAMC;QAC3BA,QAAQ,SAAS,CAAC,QAAQ,CAACC;QAC3BD,QAAQ,SAAS,CAAC,QAAQ,CAACE;QAC3BF,QAAQ,SAAS,CAAC,QAAQ,CAACG;QAC3BH,QAAQ,SAAS,CAAC,QAAQ,CAACI;QAC3BJ,QAAQ,SAAS,CAAC,QAAQ,CAACK;QAE3BC,0CAA0C,QAAQ,CAACN,QAAQ,SAAS;IACxE"}
@@ -1,4 +1,2 @@
1
1
  export { SchedulePublishEntryUseCase } from "../../../features/SchedulePublishEntryUseCase/abstractions.js";
2
2
  export { ScheduleUnpublishEntryUseCase } from "../../../features/ScheduleUnpublishEntryUseCase/abstractions.js";
3
-
4
- //# sourceMappingURL=scheduler.js.map
@@ -1,54 +1,40 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  import { createNamespace } from "../../utils/namespace.js";
4
-
5
- /**
6
- * Cancels scheduled actions when an entry is deleted
7
- *
8
- * When a user deletes an entry, any scheduled publish/unpublish
9
- * actions for all of its revisions should be canceled since the entry
10
- * no longer exists.
11
- */
12
4
  class CancelScheduledActionOnEntryDeleteHandlerImpl {
13
- constructor(listScheduledActions, cancelScheduledAction) {
14
- this.listScheduledActions = listScheduledActions;
15
- this.cancelScheduledAction = cancelScheduledAction;
16
- }
17
- async handle(event) {
18
- const {
19
- entry,
20
- model
21
- } = event.payload;
22
-
23
- // Skip private models
24
- if (model.isPrivate) {
25
- return;
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
8
+ }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const schedules = await this.listSchedules(model.modelId, entry.entryId);
13
+ for (const action of schedules){
14
+ const cancelRes = await this.cancelScheduledAction.execute(action);
15
+ cancelRes.isFail();
16
+ }
26
17
  }
27
- const schedules = await this.listSchedules(model.modelId, entry.entryId);
28
- for (const action of schedules) {
29
- const cancelRes = await this.cancelScheduledAction.execute(action);
30
- if (cancelRes.isFail()) {
31
- // Silently ignore errors - this is non-critical cleanup.
32
- // The entry was deleted successfully, cancelling scheduled actions is best-effort.
33
- }
18
+ async listSchedules(modelId, entryId) {
19
+ const actionsResult = await this.listScheduledActions.execute({
20
+ limit: 10000,
21
+ where: {
22
+ namespace: createNamespace({
23
+ modelId
24
+ }),
25
+ targetId_startsWith: `${entryId}#`
26
+ }
27
+ });
28
+ return actionsResult.value.items;
34
29
  }
35
- }
36
- async listSchedules(modelId, entryId) {
37
- const actionsResult = await this.listScheduledActions.execute({
38
- limit: 10000,
39
- where: {
40
- namespace: createNamespace({
41
- modelId
42
- }),
43
- targetId_startsWith: `${entryId}#`
44
- }
45
- });
46
- return actionsResult.value.items;
47
- }
48
30
  }
49
- export const CancelScheduledActionOnEntryDeleteEventHandler = EntryAfterDeleteEventHandler.createImplementation({
50
- implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,
51
- dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]
31
+ const CancelScheduledActionOnEntryDeleteEventHandler = EntryAfterDeleteEventHandler.createImplementation({
32
+ implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,
33
+ dependencies: [
34
+ ListScheduledActionsUseCase,
35
+ CancelScheduledActionUseCase
36
+ ]
52
37
  });
38
+ export { CancelScheduledActionOnEntryDeleteEventHandler };
53
39
 
54
40
  //# sourceMappingURL=CancelScheduledActionOnEntryDeleteEventHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterDeleteEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","createNamespace","CancelScheduledActionOnEntryDeleteHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","schedules","listSchedules","modelId","entryId","action","cancelRes","execute","isFail","actionsResult","limit","where","namespace","targetId_startsWith","value","items","CancelScheduledActionOnEntryDeleteEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnEntryDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry is deleted\n *\n * When a user deletes an entry, any scheduled publish/unpublish\n * actions for all of its revisions should be canceled since the entry\n * no longer exists.\n */\nclass CancelScheduledActionOnEntryDeleteHandlerImpl\n implements EntryAfterDeleteEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const schedules = await this.listSchedules(model.modelId, entry.entryId);\n for (const action of schedules) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // The entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n\n private async listSchedules(modelId: string, entryId: string) {\n const actionsResult = await this.listScheduledActions.execute({\n limit: 10000,\n where: {\n namespace: createNamespace({ modelId }),\n targetId_startsWith: `${entryId}#`\n }\n });\n\n return actionsResult.value.items;\n }\n}\n\nexport const CancelScheduledActionOnEntryDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,mEAAmE;AAChH,SACIC,4BAA4B,EAC5BC,2BAA2B,QACxB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,6CAA6C,CAEnD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAAyC,EAAiB;IACnE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACC,aAAa,CAACJ,KAAK,CAACK,OAAO,EAAEN,KAAK,CAACO,OAAO,CAAC;IACxE,KAAK,MAAMC,MAAM,IAAIJ,SAAS,EAAE;MAC5B,MAAMK,SAAS,GAAG,MAAM,IAAI,CAACZ,qBAAqB,CAACa,OAAO,CAACF,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;EAEA,MAAcN,aAAaA,CAACC,OAAe,EAAEC,OAAe,EAAE;IAC1D,MAAMK,aAAa,GAAG,MAAM,IAAI,CAAChB,oBAAoB,CAACc,OAAO,CAAC;MAC1DG,KAAK,EAAE,KAAK;MACZC,KAAK,EAAE;QACHC,SAAS,EAAEtB,eAAe,CAAC;UAAEa;QAAQ,CAAC,CAAC;QACvCU,mBAAmB,EAAE,GAAGT,OAAO;MACnC;IACJ,CAAC,CAAC;IAEF,OAAOK,aAAa,CAACK,KAAK,CAACC,KAAK;EACpC;AACJ;AAEA,OAAO,MAAMC,8CAA8C,GACvD7B,4BAA4B,CAAC8B,oBAAoB,CAAC;EAC9CC,cAAc,EAAE3B,6CAA6C;EAC7D4B,YAAY,EAAE,CAAC9B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry is deleted\n *\n * When a user deletes an entry, any scheduled publish/unpublish\n * actions for all of its revisions should be canceled since the entry\n * no longer exists.\n */\nclass CancelScheduledActionOnEntryDeleteHandlerImpl\n implements EntryAfterDeleteEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const schedules = await this.listSchedules(model.modelId, entry.entryId);\n for (const action of schedules) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // The entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n\n private async listSchedules(modelId: string, entryId: string) {\n const actionsResult = await this.listScheduledActions.execute({\n limit: 10000,\n where: {\n namespace: createNamespace({ modelId }),\n targetId_startsWith: `${entryId}#`\n }\n });\n\n return actionsResult.value.items;\n }\n}\n\nexport const CancelScheduledActionOnEntryDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnEntryDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","schedules","action","cancelRes","modelId","entryId","actionsResult","createNamespace","CancelScheduledActionOnEntryDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAcA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAACD,MAAM,OAAO,EAAED,MAAM,OAAO;QACvE,KAAK,MAAMG,UAAUD,UAAW;YAC5B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;IAEA,MAAc,cAAcC,OAAe,EAAEC,OAAe,EAAE;QAC1D,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;YACP,OAAO;gBACH,WAAWC,gBAAgB;oBAAEH;gBAAQ;gBACrC,qBAAqB,GAAGC,QAAQ,CAAC,CAAC;YACtC;QACJ;QAEA,OAAOC,cAAc,KAAK,CAAC,KAAK;IACpC;AACJ;AAEO,MAAME,iDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBd;IAChB,cAAc;QAACe;QAA6BC;KAA6B;AAC7E"}
@@ -1,49 +1,35 @@
1
1
  import { EntryAfterPublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  import { createNamespace } from "../../utils/namespace.js";
4
-
5
- /**
6
- * Cancels scheduled "publish" when an entry is manually published
7
- *
8
- * When a user manually publishes an entry, any scheduled publish
9
- * action for that entry should be canceled since the manual action
10
- * takes precedence.
11
- */
12
4
  class CancelScheduledActionOnPublishEventHandlerImpl {
13
- constructor(listScheduledActions, cancelScheduledAction) {
14
- this.listScheduledActions = listScheduledActions;
15
- this.cancelScheduledAction = cancelScheduledAction;
16
- }
17
- async handle(event) {
18
- const {
19
- entry,
20
- model
21
- } = event.payload;
22
-
23
- // Skip private models
24
- if (model.isPrivate) {
25
- return;
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
26
8
  }
27
- const actionsResult = await this.listScheduledActions.execute({
28
- where: {
29
- namespace: createNamespace(model),
30
- actionType: ScheduledActionTypePublish,
31
- targetId: entry.id
32
- }
33
- });
34
- const actions = actionsResult.value.items;
35
- for (const action of actions) {
36
- const cancelRes = await this.cancelScheduledAction.execute(action);
37
- if (cancelRes.isFail()) {
38
- // Silently ignore errors - this is non-critical cleanup.
39
- // Even if a schedule runs on an already published action, nothing bad will happen.
40
- }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(model),
15
+ actionType: ScheduledActionTypePublish,
16
+ targetId: entry.id
17
+ }
18
+ });
19
+ const actions = actionsResult.value.items;
20
+ for (const action of actions){
21
+ const cancelRes = await this.cancelScheduledAction.execute(action);
22
+ cancelRes.isFail();
23
+ }
41
24
  }
42
- }
43
25
  }
44
- export const CancelScheduledActionOnPublishEventHandler = EntryAfterPublishEventHandler.createImplementation({
45
- implementation: CancelScheduledActionOnPublishEventHandlerImpl,
46
- dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]
26
+ const CancelScheduledActionOnPublishEventHandler = EntryAfterPublishEventHandler.createImplementation({
27
+ implementation: CancelScheduledActionOnPublishEventHandlerImpl,
28
+ dependencies: [
29
+ ListScheduledActionsUseCase,
30
+ CancelScheduledActionUseCase
31
+ ]
47
32
  });
33
+ export { CancelScheduledActionOnPublishEventHandler };
48
34
 
49
35
  //# sourceMappingURL=CancelScheduledActionOnPublishEventHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterPublishEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","ScheduledActionTypePublish","createNamespace","CancelScheduledActionOnPublishEventHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","actionType","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnPublishEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnPublishEventHandler.ts"],"sourcesContent":["import { EntryAfterPublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled \"publish\" when an entry is manually published\n *\n * When a user manually publishes an entry, any scheduled publish\n * action for that entry should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnPublishEventHandlerImpl\n implements EntryAfterPublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterPublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypePublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Even if a schedule runs on an already published action, nothing bad will happen.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPublishEventHandler =\n EntryAfterPublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnPublishEventHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,6BAA6B,QAAQ,oEAAoE;AAClH,SACIC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,0BAA0B,QACvB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,8CAA8C,CAEpD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAA0C,EAAiB;IACpE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAEd,eAAe,CAACQ,KAAK,CAAC;QACjCO,UAAU,EAAEhB,0BAA0B;QACtCiB,QAAQ,EAAET,KAAK,CAACU;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGP,aAAa,CAACQ,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAAClB,qBAAqB,CAACQ,OAAO,CAACS,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,0CAA0C,GACnD5B,6BAA6B,CAAC6B,oBAAoB,CAAC;EAC/CC,cAAc,EAAEzB,8CAA8C;EAC9D0B,YAAY,EAAE,CAAC7B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.ts"],"sourcesContent":["import { EntryAfterPublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled \"publish\" when an entry is manually published\n *\n * When a user manually publishes an entry, any scheduled publish\n * action for that entry should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnPublishEventHandlerImpl\n implements EntryAfterPublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterPublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypePublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Even if a schedule runs on an already published action, nothing bad will happen.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPublishEventHandler =\n EntryAfterPublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnPublishEventHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnPublishEventHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","ScheduledActionTypePublish","actions","action","cancelRes","CancelScheduledActionOnPublishEventHandler","EntryAfterPublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAeA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAA0C,EAAiB;QACpE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMK,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,6CACTC,8BAA8B,oBAAoB,CAAC;IAC/C,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
@@ -1,48 +1,34 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  import { createNamespace } from "../../utils/namespace.js";
4
-
5
- /**
6
- * Cancels scheduled actions when an entry revision is deleted
7
- *
8
- * When a user deletes an entry revision, any scheduled publish/unpublish
9
- * action for that revision should be canceled since the revision
10
- * no longer exists.
11
- */
12
4
  class CancelScheduledActionOnDeleteHandlerImpl {
13
- constructor(listScheduledActions, cancelScheduledAction) {
14
- this.listScheduledActions = listScheduledActions;
15
- this.cancelScheduledAction = cancelScheduledAction;
16
- }
17
- async handle(event) {
18
- const {
19
- entry,
20
- model
21
- } = event.payload;
22
-
23
- // Skip private models
24
- if (model.isPrivate) {
25
- return;
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
26
8
  }
27
- const actionsResult = await this.listScheduledActions.execute({
28
- where: {
29
- namespace: createNamespace(model),
30
- targetId: entry.id
31
- }
32
- });
33
- const actions = actionsResult.value.items;
34
- for (const action of actions) {
35
- const cancelRes = await this.cancelScheduledAction.execute(action);
36
- if (cancelRes.isFail()) {
37
- // Silently ignore errors - this is non-critical cleanup.
38
- // Entry was deleted successfully, cancelling scheduled actions is best-effort.
39
- }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(model),
15
+ targetId: entry.id
16
+ }
17
+ });
18
+ const actions = actionsResult.value.items;
19
+ for (const action of actions){
20
+ const cancelRes = await this.cancelScheduledAction.execute(action);
21
+ cancelRes.isFail();
22
+ }
40
23
  }
41
- }
42
24
  }
43
- export const CancelScheduledActionOnRevisionDeleteEventHandler = EntryAfterDeleteEventHandler.createImplementation({
44
- implementation: CancelScheduledActionOnDeleteHandlerImpl,
45
- dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]
25
+ const CancelScheduledActionOnRevisionDeleteEventHandler = EntryAfterDeleteEventHandler.createImplementation({
26
+ implementation: CancelScheduledActionOnDeleteHandlerImpl,
27
+ dependencies: [
28
+ ListScheduledActionsUseCase,
29
+ CancelScheduledActionUseCase
30
+ ]
46
31
  });
32
+ export { CancelScheduledActionOnRevisionDeleteEventHandler };
47
33
 
48
34
  //# sourceMappingURL=CancelScheduledActionOnRevisionDeleteEventHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterDeleteEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","createNamespace","CancelScheduledActionOnDeleteHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnRevisionDeleteEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnRevisionDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry revision is deleted\n *\n * When a user deletes an entry revision, any scheduled publish/unpublish\n * action for that revision should be canceled since the revision\n * no longer exists.\n */\nclass CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnRevisionDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,mEAAmE;AAChH,SACIC,4BAA4B,EAC5BC,2BAA2B,QACxB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,wCAAwC,CAAmD;EAC7FC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAAyC,EAAiB;IACnE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAEd,eAAe,CAACQ,KAAK,CAAC;QACjCO,QAAQ,EAAER,KAAK,CAACS;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGN,aAAa,CAACO,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAACjB,qBAAqB,CAACQ,OAAO,CAACQ,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,iDAAiD,GAC1D1B,4BAA4B,CAAC2B,oBAAoB,CAAC;EAC9CC,cAAc,EAAExB,wCAAwC;EACxDyB,YAAY,EAAE,CAAC3B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry revision is deleted\n *\n * When a user deletes an entry revision, any scheduled publish/unpublish\n * action for that revision should be canceled since the revision\n * no longer exists.\n */\nclass CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnRevisionDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","actions","action","cancelRes","CancelScheduledActionOnRevisionDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAcA,MAAMA;IACF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,UAAUD,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMI,UAAUF,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMG,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,oDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBZ;IAChB,cAAc;QAACa;QAA6BC;KAA6B;AAC7E"}
@@ -1,49 +1,35 @@
1
1
  import { EntryAfterUnpublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypeUnpublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  import { createNamespace } from "../../utils/namespace.js";
4
-
5
- /**
6
- * Cancels scheduled action when an entry is manually unpublished
7
- *
8
- * When a user manually unpublishes an entry revision, any scheduled unpublish
9
- * action for that revision should be canceled since the manual action
10
- * takes precedence.
11
- */
12
4
  class CancelScheduledActionOnUnpublishHandlerImpl {
13
- constructor(listScheduledActions, cancelScheduledAction) {
14
- this.listScheduledActions = listScheduledActions;
15
- this.cancelScheduledAction = cancelScheduledAction;
16
- }
17
- async handle(event) {
18
- const {
19
- entry,
20
- model
21
- } = event.payload;
22
-
23
- // Skip private models
24
- if (model.isPrivate) {
25
- return;
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
26
8
  }
27
- const actionsResult = await this.listScheduledActions.execute({
28
- where: {
29
- namespace: createNamespace(model),
30
- actionType: ScheduledActionTypeUnpublish,
31
- targetId: entry.id
32
- }
33
- });
34
- const actions = actionsResult.value.items;
35
- for (const action of actions) {
36
- const cancelRes = await this.cancelScheduledAction.execute(action);
37
- if (cancelRes.isFail()) {
38
- // Silently ignore errors - this is non-critical cleanup.
39
- // Entry was unpublished successfully, cancelling scheduled actions is best-effort.
40
- }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(model),
15
+ actionType: ScheduledActionTypeUnpublish,
16
+ targetId: entry.id
17
+ }
18
+ });
19
+ const actions = actionsResult.value.items;
20
+ for (const action of actions){
21
+ const cancelRes = await this.cancelScheduledAction.execute(action);
22
+ cancelRes.isFail();
23
+ }
41
24
  }
42
- }
43
25
  }
44
- export const CancelScheduledActionOnUnpublishEventHandler = EntryAfterUnpublishEventHandler.createImplementation({
45
- implementation: CancelScheduledActionOnUnpublishHandlerImpl,
46
- dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]
26
+ const CancelScheduledActionOnUnpublishEventHandler = EntryAfterUnpublishEventHandler.createImplementation({
27
+ implementation: CancelScheduledActionOnUnpublishHandlerImpl,
28
+ dependencies: [
29
+ ListScheduledActionsUseCase,
30
+ CancelScheduledActionUseCase
31
+ ]
47
32
  });
33
+ export { CancelScheduledActionOnUnpublishEventHandler };
48
34
 
49
35
  //# sourceMappingURL=CancelScheduledActionOnUnpublishEventHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterUnpublishEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","ScheduledActionTypeUnpublish","createNamespace","CancelScheduledActionOnUnpublishHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","actionType","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnUnpublishEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnUnpublishEventHandler.ts"],"sourcesContent":["import { EntryAfterUnpublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypeUnpublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled action when an entry is manually unpublished\n *\n * When a user manually unpublishes an entry revision, any scheduled unpublish\n * action for that revision should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnUnpublishHandlerImpl\n implements EntryAfterUnpublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypeUnpublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was unpublished successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnUnpublishEventHandler =\n EntryAfterUnpublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnUnpublishHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,+BAA+B,QAAQ,sEAAsE;AACtH,SACIC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,4BAA4B,QACzB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,2CAA2C,CAEjD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAA4C,EAAiB;IACtE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAEd,eAAe,CAACQ,KAAK,CAAC;QACjCO,UAAU,EAAEhB,4BAA4B;QACxCiB,QAAQ,EAAET,KAAK,CAACU;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGP,aAAa,CAACQ,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAAClB,qBAAqB,CAACQ,OAAO,CAACS,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,4CAA4C,GACrD5B,+BAA+B,CAAC6B,oBAAoB,CAAC;EACjDC,cAAc,EAAEzB,2CAA2C;EAC3D0B,YAAY,EAAE,CAAC7B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.ts"],"sourcesContent":["import { EntryAfterUnpublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypeUnpublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled action when an entry is manually unpublished\n *\n * When a user manually unpublishes an entry revision, any scheduled unpublish\n * action for that revision should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnUnpublishHandlerImpl\n implements EntryAfterUnpublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypeUnpublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was unpublished successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnUnpublishEventHandler =\n EntryAfterUnpublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnUnpublishHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnUnpublishHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","ScheduledActionTypeUnpublish","actions","action","cancelRes","CancelScheduledActionOnUnpublishEventHandler","EntryAfterUnpublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAeA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAA4C,EAAiB;QACtE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMK,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,+CACTC,gCAAgC,oBAAoB,CAAC;IACjD,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
@@ -3,22 +3,15 @@ import { CancelScheduledActionOnPublishEventHandler } from "./CancelScheduledAct
3
3
  import { CancelScheduledActionOnUnpublishEventHandler } from "./CancelScheduledActionOnUnpublishEventHandler.js";
4
4
  import { CancelScheduledActionOnEntryDeleteEventHandler } from "./CancelScheduledActionOnEntryDeleteEventHandler.js";
5
5
  import { CancelScheduledActionOnRevisionDeleteEventHandler } from "./CancelScheduledActionOnRevisionDeleteEventHandler.js";
6
-
7
- /**
8
- * CancelScheduledActionOnEntryChange Feature
9
- *
10
- * Automatically cancels scheduled actions when entries are manually
11
- * published, unpublished, or deleted. This ensures scheduled actions
12
- * don't execute after a user has already performed the action manually.
13
- */
14
- export const CancelScheduledActionOnEntryChangeFeature = createFeature({
15
- name: "CancelScheduledActionOnEntryChange",
16
- register(container) {
17
- container.register(CancelScheduledActionOnPublishEventHandler);
18
- container.register(CancelScheduledActionOnUnpublishEventHandler);
19
- container.register(CancelScheduledActionOnEntryDeleteEventHandler);
20
- container.register(CancelScheduledActionOnRevisionDeleteEventHandler);
21
- }
6
+ const CancelScheduledActionOnEntryChangeFeature = createFeature({
7
+ name: "CancelScheduledActionOnEntryChange",
8
+ register (container) {
9
+ container.register(CancelScheduledActionOnPublishEventHandler);
10
+ container.register(CancelScheduledActionOnUnpublishEventHandler);
11
+ container.register(CancelScheduledActionOnEntryDeleteEventHandler);
12
+ container.register(CancelScheduledActionOnRevisionDeleteEventHandler);
13
+ }
22
14
  });
15
+ export { CancelScheduledActionOnEntryChangeFeature };
23
16
 
24
17
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","CancelScheduledActionOnPublishEventHandler","CancelScheduledActionOnUnpublishEventHandler","CancelScheduledActionOnEntryDeleteEventHandler","CancelScheduledActionOnRevisionDeleteEventHandler","CancelScheduledActionOnEntryChangeFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CancelScheduledActionOnPublishEventHandler } from \"./CancelScheduledActionOnPublishEventHandler.js\";\nimport { CancelScheduledActionOnUnpublishEventHandler } from \"./CancelScheduledActionOnUnpublishEventHandler.js\";\nimport { CancelScheduledActionOnEntryDeleteEventHandler } from \"./CancelScheduledActionOnEntryDeleteEventHandler.js\";\nimport { CancelScheduledActionOnRevisionDeleteEventHandler } from \"./CancelScheduledActionOnRevisionDeleteEventHandler.js\";\n\n/**\n * CancelScheduledActionOnEntryChange Feature\n *\n * Automatically cancels scheduled actions when entries are manually\n * published, unpublished, or deleted. This ensures scheduled actions\n * don't execute after a user has already performed the action manually.\n */\nexport const CancelScheduledActionOnEntryChangeFeature = createFeature({\n name: \"CancelScheduledActionOnEntryChange\",\n register(container) {\n container.register(CancelScheduledActionOnPublishEventHandler);\n container.register(CancelScheduledActionOnUnpublishEventHandler);\n container.register(CancelScheduledActionOnEntryDeleteEventHandler);\n container.register(CancelScheduledActionOnRevisionDeleteEventHandler);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,0CAA0C;AACnD,SAASC,4CAA4C;AACrD,SAASC,8CAA8C;AACvD,SAASC,iDAAiD;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,yCAAyC,GAAGL,aAAa,CAAC;EACnEM,IAAI,EAAE,oCAAoC;EAC1CC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACN,0CAA0C,CAAC;IAC9DO,SAAS,CAACD,QAAQ,CAACL,4CAA4C,CAAC;IAChEM,SAAS,CAACD,QAAQ,CAACJ,8CAA8C,CAAC;IAClEK,SAAS,CAACD,QAAQ,CAACH,iDAAiD,CAAC;EACzE;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/feature.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CancelScheduledActionOnPublishEventHandler } from \"./CancelScheduledActionOnPublishEventHandler.js\";\nimport { CancelScheduledActionOnUnpublishEventHandler } from \"./CancelScheduledActionOnUnpublishEventHandler.js\";\nimport { CancelScheduledActionOnEntryDeleteEventHandler } from \"./CancelScheduledActionOnEntryDeleteEventHandler.js\";\nimport { CancelScheduledActionOnRevisionDeleteEventHandler } from \"./CancelScheduledActionOnRevisionDeleteEventHandler.js\";\n\n/**\n * CancelScheduledActionOnEntryChange Feature\n *\n * Automatically cancels scheduled actions when entries are manually\n * published, unpublished, or deleted. This ensures scheduled actions\n * don't execute after a user has already performed the action manually.\n */\nexport const CancelScheduledActionOnEntryChangeFeature = createFeature({\n name: \"CancelScheduledActionOnEntryChange\",\n register(container) {\n container.register(CancelScheduledActionOnPublishEventHandler);\n container.register(CancelScheduledActionOnUnpublishEventHandler);\n container.register(CancelScheduledActionOnEntryDeleteEventHandler);\n container.register(CancelScheduledActionOnRevisionDeleteEventHandler);\n }\n});\n"],"names":["CancelScheduledActionOnEntryChangeFeature","createFeature","container","CancelScheduledActionOnPublishEventHandler","CancelScheduledActionOnUnpublishEventHandler","CancelScheduledActionOnEntryDeleteEventHandler","CancelScheduledActionOnRevisionDeleteEventHandler"],"mappings":";;;;;AAaO,MAAMA,4CAA4CC,cAAc;IACnE,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;IACvB;AACJ"}
@@ -1,50 +1,44 @@
1
- import { NamespaceHandler as NamespaceHandlerAbstraction } from "@webiny/api-scheduler/exports/api/scheduler.js";
1
+ import { NamespaceHandler } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
2
  import { extractModelIdFromNamespace } from "../../utils/namespace.js";
3
3
  import { Result } from "@webiny/feature/exports/api.js";
4
4
  import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
5
5
  import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js";
6
6
  class NamespaceHandlerImpl {
7
- constructor(getModelUseCase, getEntryByIdUseCase) {
8
- this.getModelUseCase = getModelUseCase;
9
- this.getEntryByIdUseCase = getEntryByIdUseCase;
10
- }
11
- canHandle(namespace) {
12
- const modelId = extractModelIdFromNamespace(namespace);
13
- return !!modelId;
14
- }
15
- async execute(params) {
16
- /**
17
- * We know that modelId is ok because of the canHandle() method, which is always called before execute() and must return true for this handler to be executed.
18
- */
19
- const modelId = extractModelIdFromNamespace(params.namespace);
20
- // Fetch the target model
21
- const modelResult = await this.getModelUseCase.execute(modelId);
22
- if (modelResult.isFail()) {
23
- return Result.fail(modelResult.error);
7
+ constructor(getModelUseCase, getEntryByIdUseCase){
8
+ this.getModelUseCase = getModelUseCase;
9
+ this.getEntryByIdUseCase = getEntryByIdUseCase;
24
10
  }
25
- const model = modelResult.value;
26
-
27
- // Fetch entry to get title
28
- const entryResult = await this.getEntryByIdUseCase.execute(model, params.targetId);
29
- if (entryResult.isFail()) {
30
- return Result.fail(entryResult.error);
11
+ canHandle(namespace) {
12
+ const modelId = extractModelIdFromNamespace(namespace);
13
+ return !!modelId;
14
+ }
15
+ async execute(params) {
16
+ const modelId = extractModelIdFromNamespace(params.namespace);
17
+ const modelResult = await this.getModelUseCase.execute(modelId);
18
+ if (modelResult.isFail()) return Result.fail(modelResult.error);
19
+ const model = modelResult.value;
20
+ const entryResult = await this.getEntryByIdUseCase.execute(model, params.targetId);
21
+ if (entryResult.isFail()) return Result.fail(entryResult.error);
22
+ const entry = entryResult.value;
23
+ const title = entry.values[model.titleFieldId] || "Unknown entry title";
24
+ return Result.ok({
25
+ namespace: params.namespace,
26
+ title,
27
+ modelId,
28
+ actionType: params.actionType,
29
+ targetId: params.targetId,
30
+ scheduleId: params.scheduleId,
31
+ immediately: params.immediately || false
32
+ });
31
33
  }
32
- const entry = entryResult.value;
33
- const title = entry.values[model.titleFieldId] || "Unknown entry title";
34
- return Result.ok({
35
- namespace: params.namespace,
36
- title,
37
- modelId,
38
- actionType: params.actionType,
39
- targetId: params.targetId,
40
- scheduleId: params.scheduleId,
41
- immediately: params.immediately || false
42
- });
43
- }
44
34
  }
45
- export const NamespaceHandler = NamespaceHandlerAbstraction.createImplementation({
46
- implementation: NamespaceHandlerImpl,
47
- dependencies: [GetModelUseCase, GetEntryByIdUseCase]
35
+ const NamespaceHandler_NamespaceHandler = NamespaceHandler.createImplementation({
36
+ implementation: NamespaceHandlerImpl,
37
+ dependencies: [
38
+ GetModelUseCase,
39
+ GetEntryByIdUseCase
40
+ ]
48
41
  });
42
+ export { NamespaceHandler_NamespaceHandler as NamespaceHandler };
49
43
 
50
44
  //# sourceMappingURL=NamespaceHandler.js.map