@webiny/api-headless-cms 6.5.0-beta.3 → 6.5.0-beta.4

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 (89) hide show
  1. package/exports/api/cms/entry.d.ts +2 -0
  2. package/exports/api/cms/entry.js +2 -0
  3. package/features/contentEntry/ContentEntriesFeature.js +4 -0
  4. package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
  5. package/features/contentEntry/CreateEntry/CreateEntryUseCase.d.ts +2 -2
  6. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +2 -2
  7. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  8. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +2 -2
  9. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +2 -2
  10. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  11. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.d.ts +2 -2
  12. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js +2 -2
  13. package/features/contentEntry/DeleteEntry/DeleteEntryUseCase.js.map +1 -1
  14. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.d.ts +2 -2
  15. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js +2 -2
  16. package/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js.map +1 -1
  17. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.d.ts +2 -2
  18. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js +2 -2
  19. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js.map +1 -1
  20. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.d.ts +2 -2
  21. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js +2 -2
  22. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js.map +1 -1
  23. package/features/contentEntry/DuplicateEntry/DuplicateEntryUseCase.d.ts +17 -0
  24. package/features/contentEntry/DuplicateEntry/DuplicateEntryUseCase.js +83 -0
  25. package/features/contentEntry/DuplicateEntry/DuplicateEntryUseCase.js.map +1 -0
  26. package/features/contentEntry/DuplicateEntry/abstractions.d.ts +47 -0
  27. package/features/contentEntry/DuplicateEntry/abstractions.js +5 -0
  28. package/features/contentEntry/DuplicateEntry/abstractions.js.map +1 -0
  29. package/features/contentEntry/DuplicateEntry/events.d.ts +41 -0
  30. package/features/contentEntry/DuplicateEntry/events.js +32 -0
  31. package/features/contentEntry/DuplicateEntry/events.js.map +1 -0
  32. package/features/contentEntry/DuplicateEntry/feature.d.ts +4 -0
  33. package/features/contentEntry/DuplicateEntry/feature.js +11 -0
  34. package/features/contentEntry/DuplicateEntry/feature.js.map +1 -0
  35. package/features/contentEntry/DuplicateEntry/index.d.ts +2 -0
  36. package/features/contentEntry/DuplicateEntry/index.js +2 -0
  37. package/features/contentEntry/DuplicateEntry/prepareDuplicateValues.d.ts +7 -0
  38. package/features/contentEntry/DuplicateEntry/prepareDuplicateValues.js +12 -0
  39. package/features/contentEntry/DuplicateEntry/prepareDuplicateValues.js.map +1 -0
  40. package/features/contentEntry/EntryEventPublisher/EntryEventPublisher.d.ts +10 -0
  41. package/features/contentEntry/EntryEventPublisher/EntryEventPublisher.js +25 -0
  42. package/features/contentEntry/EntryEventPublisher/EntryEventPublisher.js.map +1 -0
  43. package/features/contentEntry/EntryEventPublisher/abstractions.d.ts +16 -0
  44. package/features/contentEntry/EntryEventPublisher/abstractions.js +5 -0
  45. package/features/contentEntry/EntryEventPublisher/abstractions.js.map +1 -0
  46. package/features/contentEntry/EntryEventPublisher/feature.d.ts +4 -0
  47. package/features/contentEntry/EntryEventPublisher/feature.js +11 -0
  48. package/features/contentEntry/EntryEventPublisher/feature.js.map +1 -0
  49. package/features/contentEntry/EntryEventPublisher/index.d.ts +2 -0
  50. package/features/contentEntry/EntryEventPublisher/index.js +2 -0
  51. package/features/contentEntry/MoveEntry/MoveEntryUseCase.d.ts +2 -2
  52. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js +2 -2
  53. package/features/contentEntry/MoveEntry/MoveEntryUseCase.js.map +1 -1
  54. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +2 -2
  55. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +2 -2
  56. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  57. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.d.ts +2 -2
  58. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +2 -2
  59. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  60. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.d.ts +2 -2
  61. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js +2 -2
  62. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinUseCase.js.map +1 -1
  63. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.d.ts +2 -2
  64. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +2 -2
  65. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  66. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.d.ts +2 -2
  67. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +2 -2
  68. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  69. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +2 -2
  70. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -2
  71. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
  72. package/features/modelBuilder/abstractions.d.ts +4 -0
  73. package/features/modelBuilder/abstractions.js.map +1 -1
  74. package/features/modelBuilder/fields/DateTimeFieldType.js +1 -0
  75. package/features/modelBuilder/fields/DateTimeFieldType.js.map +1 -1
  76. package/features/modelBuilder/models/ModelBuilder.d.ts +8 -0
  77. package/features/modelBuilder/models/ModelBuilder.js +1 -0
  78. package/features/modelBuilder/models/ModelBuilder.js.map +1 -1
  79. package/features/modelBuilder/models/PrivateModelBuilder.d.ts +5 -0
  80. package/features/modelBuilder/models/PrivateModelBuilder.js +12 -1
  81. package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
  82. package/graphql/schema/createManageResolvers.js +3 -1
  83. package/graphql/schema/createManageResolvers.js.map +1 -1
  84. package/graphql/schema/createManageSDL.js +2 -0
  85. package/graphql/schema/createManageSDL.js.map +1 -1
  86. package/graphql/schema/resolvers/manage/resolveDuplicate.d.ts +7 -0
  87. package/graphql/schema/resolvers/manage/resolveDuplicate.js +11 -0
  88. package/graphql/schema/resolvers/manage/resolveDuplicate.js.map +1 -0
  89. package/package.json +18 -18
@@ -4,6 +4,8 @@ export { CreateEntryUseCase } from "../../../features/contentEntry/CreateEntry/a
4
4
  export { EntryBeforeCreateEventHandler, EntryAfterCreateEventHandler } from "../../../features/contentEntry/CreateEntry/events.js";
5
5
  export { CreateEntryRevisionFromUseCase } from "../../../features/contentEntry/CreateEntryRevisionFrom/abstractions.js";
6
6
  export { EntryRevisionBeforeCreateEventHandler, EntryRevisionAfterCreateEventHandler } from "../../../features/contentEntry/CreateEntryRevisionFrom/events.js";
7
+ export { DuplicateEntryUseCase } from "../../../features/contentEntry/DuplicateEntry/abstractions.js";
8
+ export { EntryBeforeDuplicateEventHandler, EntryAfterDuplicateEventHandler } from "../../../features/contentEntry/DuplicateEntry/events.js";
7
9
  export { DeleteEntryUseCase, MoveEntryToBinUseCase } from "../../../features/contentEntry/DeleteEntry/abstractions.js";
8
10
  export { EntryBeforeDeleteEventHandler, EntryAfterDeleteEventHandler } from "../../../features/contentEntry/DeleteEntry/events.js";
9
11
  export { DeleteEntryRevisionUseCase } from "../../../features/contentEntry/DeleteEntryRevision/abstractions.js";
@@ -3,6 +3,8 @@ export { CreateEntryUseCase } from "../../../features/contentEntry/CreateEntry/a
3
3
  export { EntryAfterCreateEventHandler, EntryBeforeCreateEventHandler } from "../../../features/contentEntry/CreateEntry/events.js";
4
4
  export { CreateEntryRevisionFromUseCase } from "../../../features/contentEntry/CreateEntryRevisionFrom/abstractions.js";
5
5
  export { EntryRevisionAfterCreateEventHandler, EntryRevisionBeforeCreateEventHandler } from "../../../features/contentEntry/CreateEntryRevisionFrom/events.js";
6
+ export { DuplicateEntryUseCase } from "../../../features/contentEntry/DuplicateEntry/abstractions.js";
7
+ export { EntryAfterDuplicateEventHandler, EntryBeforeDuplicateEventHandler } from "../../../features/contentEntry/DuplicateEntry/events.js";
6
8
  export { DeleteEntryUseCase, MoveEntryToBinUseCase } from "../../../features/contentEntry/DeleteEntry/abstractions.js";
7
9
  export { EntryAfterDeleteEventHandler, EntryBeforeDeleteEventHandler } from "../../../features/contentEntry/DeleteEntry/events.js";
8
10
  export { DeleteEntryRevisionUseCase } from "../../../features/contentEntry/DeleteEntryRevision/abstractions.js";
@@ -1,6 +1,7 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { CreateEntryFeature } from "./CreateEntry/feature.js";
3
3
  import { CreateEntryRevisionFromFeature } from "./CreateEntryRevisionFrom/feature.js";
4
+ import { DuplicateEntryFeature } from "./DuplicateEntry/feature.js";
4
5
  import { UpdateEntryFeature } from "./UpdateEntry/feature.js";
5
6
  import { ValidateEntryFeature } from "./ValidateEntry/feature.js";
6
7
  import { MoveEntryFeature } from "./MoveEntry/feature.js";
@@ -29,12 +30,14 @@ import { ContentEntryTraverserFeature } from "./ContentEntryTraverser/feature.js
29
30
  import { UpdateRevisionFeature } from "./UpdateRevision/feature.js";
30
31
  import { UpdateRevisionDescriptionFeature } from "./UpdateRevisionDescription/feature.js";
31
32
  import { EntryDataFactoriesFeature } from "./entryDataFactories/EntryDataFactoriesFeature.js";
33
+ import { EntryEventPublisherFeature } from "./EntryEventPublisher/feature.js";
32
34
  import { RuntimeTenant } from "../runtimeTenant/RuntimeTenant.js";
33
35
  const ContentEntriesFeature = createFeature({
34
36
  name: "ContentEntries",
35
37
  register (container) {
36
38
  container.register(RuntimeTenant);
37
39
  EntryDataFactoriesFeature.register(container);
40
+ EntryEventPublisherFeature.register(container);
38
41
  GetRevisionByIdFeature.register(container);
39
42
  GetEntriesByIdsFeature.register(container);
40
43
  GetEntryByIdFeature.register(container);
@@ -51,6 +54,7 @@ const ContentEntriesFeature = createFeature({
51
54
  ContentEntryTraverserFeature.register(container);
52
55
  CreateEntryFeature.register(container);
53
56
  CreateEntryRevisionFromFeature.register(container);
57
+ DuplicateEntryFeature.register(container);
54
58
  UpdateEntryFeature.register(container);
55
59
  UpdateRevisionFeature.register(container);
56
60
  UpdateRevisionDescriptionFeature.register(container);
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/ContentEntriesFeature.js","sources":["../../../src/features/contentEntry/ContentEntriesFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateEntryFeature } from \"./CreateEntry/feature.js\";\nimport { CreateEntryRevisionFromFeature } from \"./CreateEntryRevisionFrom/feature.js\";\nimport { UpdateEntryFeature } from \"./UpdateEntry/feature.js\";\nimport { ValidateEntryFeature } from \"./ValidateEntry/feature.js\";\nimport { MoveEntryFeature } from \"./MoveEntry/feature.js\";\nimport { RepublishEntryFeature } from \"./RepublishEntry/feature.js\";\nimport { PublishEntryFeature } from \"./PublishEntry/feature.js\";\nimport { GetRevisionByIdFeature } from \"./GetRevisionById/feature.js\";\nimport { ListEntriesFeature } from \"./ListEntries/feature.js\";\nimport { GetEntriesByIdsFeature } from \"./GetEntriesByIds/feature.js\";\nimport { GetEntryByIdFeature } from \"./GetEntryById/feature.js\";\nimport { GetPublishedEntriesByIdsFeature } from \"./GetPublishedEntriesByIds/feature.js\";\nimport { GetLatestEntriesByIdsFeature } from \"./GetLatestEntriesByIds/feature.js\";\nimport { GetRevisionsByEntryIdFeature } from \"./GetRevisionsByEntryId/feature.js\";\nimport { GetPreviousRevisionByEntryIdFeature } from \"./GetPreviousRevisionByEntryId/feature.js\";\nimport { GetEntryFeature } from \"./GetEntry/feature.js\";\nimport { DeleteEntryFeature } from \"./DeleteEntry/feature.js\";\nimport { DeleteEntryRevisionFeature } from \"./DeleteEntryRevision/feature.js\";\nimport { DeleteMultipleEntriesFeature } from \"./DeleteMultipleEntries/feature.js\";\nimport { RestoreEntryFromBinFeature } from \"./RestoreEntryFromBin/feature.js\";\nimport { GetLatestRevisionByEntryIdFeature } from \"./GetLatestRevisionByEntryId/feature.js\";\nimport { GetPublishedRevisionByEntryIdFeature } from \"./GetPublishedRevisionByEntryId/feature.js\";\nimport { UnpublishEntryFeature } from \"./UnpublishEntry/feature.js\";\nimport { GetUniqueFieldValuesFeature } from \"./GetUniqueFieldValues/feature.js\";\nimport { GetSingletonEntryFeature } from \"./GetSingletonEntry/feature.js\";\nimport { UpdateSingletonEntryFeature } from \"./UpdateSingletonEntry/feature.js\";\nimport { ContentEntryTraverserFeature } from \"./ContentEntryTraverser/feature.js\";\nimport { UpdateRevisionFeature } from \"./UpdateRevision/feature.js\";\nimport { UpdateRevisionDescriptionFeature } from \"./UpdateRevisionDescription/feature.js\";\nimport { EntryDataFactoriesFeature } from \"./entryDataFactories/EntryDataFactoriesFeature.js\";\nimport { RuntimeTenant } from \"../runtimeTenant/RuntimeTenant.js\";\n\nexport const ContentEntriesFeature = createFeature({\n name: \"ContentEntries\",\n register(container) {\n container.register(RuntimeTenant);\n EntryDataFactoriesFeature.register(container);\n // Query features\n GetRevisionByIdFeature.register(container);\n GetEntriesByIdsFeature.register(container);\n GetEntryByIdFeature.register(container);\n GetPublishedEntriesByIdsFeature.register(container);\n GetPublishedRevisionByEntryIdFeature.register(container);\n GetLatestEntriesByIdsFeature.register(container);\n GetLatestRevisionByEntryIdFeature.register(container);\n GetRevisionsByEntryIdFeature.register(container);\n GetPreviousRevisionByEntryIdFeature.register(container);\n GetEntryFeature.register(container);\n ListEntriesFeature.register(container);\n GetUniqueFieldValuesFeature.register(container);\n GetSingletonEntryFeature.register(container);\n\n // Provider features\n ContentEntryTraverserFeature.register(container);\n\n // Command features\n CreateEntryFeature.register(container);\n CreateEntryRevisionFromFeature.register(container);\n UpdateEntryFeature.register(container);\n UpdateRevisionFeature.register(container);\n UpdateRevisionDescriptionFeature.register(container);\n ValidateEntryFeature.register(container);\n MoveEntryFeature.register(container);\n PublishEntryFeature.register(container);\n UnpublishEntryFeature.register(container);\n RepublishEntryFeature.register(container);\n DeleteEntryFeature.register(container);\n DeleteEntryRevisionFeature.register(container);\n DeleteMultipleEntriesFeature.register(container);\n RestoreEntryFromBinFeature.register(container);\n UpdateSingletonEntryFeature.register(container);\n }\n});\n"],"names":["ContentEntriesFeature","createFeature","container","RuntimeTenant","EntryDataFactoriesFeature","GetRevisionByIdFeature","GetEntriesByIdsFeature","GetEntryByIdFeature","GetPublishedEntriesByIdsFeature","GetPublishedRevisionByEntryIdFeature","GetLatestEntriesByIdsFeature","GetLatestRevisionByEntryIdFeature","GetRevisionsByEntryIdFeature","GetPreviousRevisionByEntryIdFeature","GetEntryFeature","ListEntriesFeature","GetUniqueFieldValuesFeature","GetSingletonEntryFeature","ContentEntryTraverserFeature","CreateEntryFeature","CreateEntryRevisionFromFeature","UpdateEntryFeature","UpdateRevisionFeature","UpdateRevisionDescriptionFeature","ValidateEntryFeature","MoveEntryFeature","PublishEntryFeature","UnpublishEntryFeature","RepublishEntryFeature","DeleteEntryFeature","DeleteEntryRevisionFeature","DeleteMultipleEntriesFeature","RestoreEntryFromBinFeature","UpdateSingletonEntryFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBC,0BAA0B,QAAQ,CAACF;QAEnCG,uBAAuB,QAAQ,CAACH;QAChCI,uBAAuB,QAAQ,CAACJ;QAChCK,oBAAoB,QAAQ,CAACL;QAC7BM,gCAAgC,QAAQ,CAACN;QACzCO,qCAAqC,QAAQ,CAACP;QAC9CQ,6BAA6B,QAAQ,CAACR;QACtCS,kCAAkC,QAAQ,CAACT;QAC3CU,6BAA6B,QAAQ,CAACV;QACtCW,oCAAoC,QAAQ,CAACX;QAC7CY,gBAAgB,QAAQ,CAACZ;QACzBa,mBAAmB,QAAQ,CAACb;QAC5Bc,4BAA4B,QAAQ,CAACd;QACrCe,yBAAyB,QAAQ,CAACf;QAGlCgB,6BAA6B,QAAQ,CAAChB;QAGtCiB,mBAAmB,QAAQ,CAACjB;QAC5BkB,+BAA+B,QAAQ,CAAClB;QACxCmB,mBAAmB,QAAQ,CAACnB;QAC5BoB,sBAAsB,QAAQ,CAACpB;QAC/BqB,iCAAiC,QAAQ,CAACrB;QAC1CsB,qBAAqB,QAAQ,CAACtB;QAC9BuB,iBAAiB,QAAQ,CAACvB;QAC1BwB,oBAAoB,QAAQ,CAACxB;QAC7ByB,sBAAsB,QAAQ,CAACzB;QAC/B0B,sBAAsB,QAAQ,CAAC1B;QAC/B2B,mBAAmB,QAAQ,CAAC3B;QAC5B4B,2BAA2B,QAAQ,CAAC5B;QACpC6B,6BAA6B,QAAQ,CAAC7B;QACtC8B,2BAA2B,QAAQ,CAAC9B;QACpC+B,4BAA4B,QAAQ,CAAC/B;IACzC;AACJ"}
1
+ {"version":3,"file":"features/contentEntry/ContentEntriesFeature.js","sources":["../../../src/features/contentEntry/ContentEntriesFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CreateEntryFeature } from \"./CreateEntry/feature.js\";\nimport { CreateEntryRevisionFromFeature } from \"./CreateEntryRevisionFrom/feature.js\";\nimport { DuplicateEntryFeature } from \"./DuplicateEntry/feature.js\";\nimport { UpdateEntryFeature } from \"./UpdateEntry/feature.js\";\nimport { ValidateEntryFeature } from \"./ValidateEntry/feature.js\";\nimport { MoveEntryFeature } from \"./MoveEntry/feature.js\";\nimport { RepublishEntryFeature } from \"./RepublishEntry/feature.js\";\nimport { PublishEntryFeature } from \"./PublishEntry/feature.js\";\nimport { GetRevisionByIdFeature } from \"./GetRevisionById/feature.js\";\nimport { ListEntriesFeature } from \"./ListEntries/feature.js\";\nimport { GetEntriesByIdsFeature } from \"./GetEntriesByIds/feature.js\";\nimport { GetEntryByIdFeature } from \"./GetEntryById/feature.js\";\nimport { GetPublishedEntriesByIdsFeature } from \"./GetPublishedEntriesByIds/feature.js\";\nimport { GetLatestEntriesByIdsFeature } from \"./GetLatestEntriesByIds/feature.js\";\nimport { GetRevisionsByEntryIdFeature } from \"./GetRevisionsByEntryId/feature.js\";\nimport { GetPreviousRevisionByEntryIdFeature } from \"./GetPreviousRevisionByEntryId/feature.js\";\nimport { GetEntryFeature } from \"./GetEntry/feature.js\";\nimport { DeleteEntryFeature } from \"./DeleteEntry/feature.js\";\nimport { DeleteEntryRevisionFeature } from \"./DeleteEntryRevision/feature.js\";\nimport { DeleteMultipleEntriesFeature } from \"./DeleteMultipleEntries/feature.js\";\nimport { RestoreEntryFromBinFeature } from \"./RestoreEntryFromBin/feature.js\";\nimport { GetLatestRevisionByEntryIdFeature } from \"./GetLatestRevisionByEntryId/feature.js\";\nimport { GetPublishedRevisionByEntryIdFeature } from \"./GetPublishedRevisionByEntryId/feature.js\";\nimport { UnpublishEntryFeature } from \"./UnpublishEntry/feature.js\";\nimport { GetUniqueFieldValuesFeature } from \"./GetUniqueFieldValues/feature.js\";\nimport { GetSingletonEntryFeature } from \"./GetSingletonEntry/feature.js\";\nimport { UpdateSingletonEntryFeature } from \"./UpdateSingletonEntry/feature.js\";\nimport { ContentEntryTraverserFeature } from \"./ContentEntryTraverser/feature.js\";\nimport { UpdateRevisionFeature } from \"./UpdateRevision/feature.js\";\nimport { UpdateRevisionDescriptionFeature } from \"./UpdateRevisionDescription/feature.js\";\nimport { EntryDataFactoriesFeature } from \"./entryDataFactories/EntryDataFactoriesFeature.js\";\nimport { EntryEventPublisherFeature } from \"./EntryEventPublisher/feature.js\";\nimport { RuntimeTenant } from \"../runtimeTenant/RuntimeTenant.js\";\n\nexport const ContentEntriesFeature = createFeature({\n name: \"ContentEntries\",\n register(container) {\n container.register(RuntimeTenant);\n EntryDataFactoriesFeature.register(container);\n EntryEventPublisherFeature.register(container);\n // Query features\n GetRevisionByIdFeature.register(container);\n GetEntriesByIdsFeature.register(container);\n GetEntryByIdFeature.register(container);\n GetPublishedEntriesByIdsFeature.register(container);\n GetPublishedRevisionByEntryIdFeature.register(container);\n GetLatestEntriesByIdsFeature.register(container);\n GetLatestRevisionByEntryIdFeature.register(container);\n GetRevisionsByEntryIdFeature.register(container);\n GetPreviousRevisionByEntryIdFeature.register(container);\n GetEntryFeature.register(container);\n ListEntriesFeature.register(container);\n GetUniqueFieldValuesFeature.register(container);\n GetSingletonEntryFeature.register(container);\n\n // Provider features\n ContentEntryTraverserFeature.register(container);\n\n // Command features\n CreateEntryFeature.register(container);\n CreateEntryRevisionFromFeature.register(container);\n DuplicateEntryFeature.register(container);\n UpdateEntryFeature.register(container);\n UpdateRevisionFeature.register(container);\n UpdateRevisionDescriptionFeature.register(container);\n ValidateEntryFeature.register(container);\n MoveEntryFeature.register(container);\n PublishEntryFeature.register(container);\n UnpublishEntryFeature.register(container);\n RepublishEntryFeature.register(container);\n DeleteEntryFeature.register(container);\n DeleteEntryRevisionFeature.register(container);\n DeleteMultipleEntriesFeature.register(container);\n RestoreEntryFromBinFeature.register(container);\n UpdateSingletonEntryFeature.register(container);\n }\n});\n"],"names":["ContentEntriesFeature","createFeature","container","RuntimeTenant","EntryDataFactoriesFeature","EntryEventPublisherFeature","GetRevisionByIdFeature","GetEntriesByIdsFeature","GetEntryByIdFeature","GetPublishedEntriesByIdsFeature","GetPublishedRevisionByEntryIdFeature","GetLatestEntriesByIdsFeature","GetLatestRevisionByEntryIdFeature","GetRevisionsByEntryIdFeature","GetPreviousRevisionByEntryIdFeature","GetEntryFeature","ListEntriesFeature","GetUniqueFieldValuesFeature","GetSingletonEntryFeature","ContentEntryTraverserFeature","CreateEntryFeature","CreateEntryRevisionFromFeature","DuplicateEntryFeature","UpdateEntryFeature","UpdateRevisionFeature","UpdateRevisionDescriptionFeature","ValidateEntryFeature","MoveEntryFeature","PublishEntryFeature","UnpublishEntryFeature","RepublishEntryFeature","DeleteEntryFeature","DeleteEntryRevisionFeature","DeleteMultipleEntriesFeature","RestoreEntryFromBinFeature","UpdateSingletonEntryFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBC,0BAA0B,QAAQ,CAACF;QACnCG,2BAA2B,QAAQ,CAACH;QAEpCI,uBAAuB,QAAQ,CAACJ;QAChCK,uBAAuB,QAAQ,CAACL;QAChCM,oBAAoB,QAAQ,CAACN;QAC7BO,gCAAgC,QAAQ,CAACP;QACzCQ,qCAAqC,QAAQ,CAACR;QAC9CS,6BAA6B,QAAQ,CAACT;QACtCU,kCAAkC,QAAQ,CAACV;QAC3CW,6BAA6B,QAAQ,CAACX;QACtCY,oCAAoC,QAAQ,CAACZ;QAC7Ca,gBAAgB,QAAQ,CAACb;QACzBc,mBAAmB,QAAQ,CAACd;QAC5Be,4BAA4B,QAAQ,CAACf;QACrCgB,yBAAyB,QAAQ,CAAChB;QAGlCiB,6BAA6B,QAAQ,CAACjB;QAGtCkB,mBAAmB,QAAQ,CAAClB;QAC5BmB,+BAA+B,QAAQ,CAACnB;QACxCoB,sBAAsB,QAAQ,CAACpB;QAC/BqB,mBAAmB,QAAQ,CAACrB;QAC5BsB,sBAAsB,QAAQ,CAACtB;QAC/BuB,iCAAiC,QAAQ,CAACvB;QAC1CwB,qBAAqB,QAAQ,CAACxB;QAC9ByB,iBAAiB,QAAQ,CAACzB;QAC1B0B,oBAAoB,QAAQ,CAAC1B;QAC7B2B,sBAAsB,QAAQ,CAAC3B;QAC/B4B,sBAAsB,QAAQ,CAAC5B;QAC/B6B,mBAAmB,QAAQ,CAAC7B;QAC5B8B,2BAA2B,QAAQ,CAAC9B;QACpC+B,6BAA6B,QAAQ,CAAC/B;QACtCgC,2BAA2B,QAAQ,CAAChC;QACpCiC,4BAA4B,QAAQ,CAACjC;IACzC;AACJ"}
@@ -1,6 +1,6 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { CreateEntryRepository, CreateEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
3
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
3
+ import { EntryEventPublisher } from "../../../features/contentEntry/EntryEventPublisher/index.js";
4
4
  import { AccessControl } from "../../../features/shared/abstractions.js";
5
5
  import type { CmsEntry, CmsEntryValues, CmsModel, CreateCmsEntryInput, CreateCmsEntryOptionsInput } from "../../../types/index.js";
6
6
  import { CreateEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateEntryDataFactory/index.js";
@@ -9,7 +9,7 @@ declare class CreateEntryUseCaseImpl implements UseCaseAbstraction.Interface {
9
9
  private repository;
10
10
  private accessControl;
11
11
  private createEntryDataFactory;
12
- constructor(eventPublisher: EventPublisher.Interface, repository: CreateEntryRepository.Interface, accessControl: AccessControl.Interface, createEntryDataFactory: CreateEntryDataFactory.Interface);
12
+ constructor(eventPublisher: EntryEventPublisher.Interface, repository: CreateEntryRepository.Interface, accessControl: AccessControl.Interface, createEntryDataFactory: CreateEntryDataFactory.Interface);
13
13
  execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, rawInput: CreateCmsEntryInput<T>, options?: CreateCmsEntryOptionsInput): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>>;
14
14
  }
15
15
  export declare const CreateEntryUseCase: import("@webiny/di").Implementation<typeof CreateEntryUseCaseImpl>;
@@ -1,6 +1,6 @@
1
1
  import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { CreateEntryRepository, CreateEntryUseCase } from "./abstractions.js";
3
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
3
+ import { EntryEventPublisher } from "../EntryEventPublisher/index.js";
4
4
  import { EntryAfterCreateEvent, EntryBeforeCreateEvent } from "./events.js";
5
5
  import { AccessControl } from "../../shared/abstractions.js";
6
6
  import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
@@ -48,7 +48,7 @@ const CreateEntryUseCase_CreateEntryUseCase = createImplementation({
48
48
  abstraction: CreateEntryUseCase,
49
49
  implementation: CreateEntryUseCaseImpl,
50
50
  dependencies: [
51
- EventPublisher,
51
+ EntryEventPublisher,
52
52
  CreateEntryRepository,
53
53
  AccessControl,
54
54
  CreateEntryDataFactory
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/CreateEntry/CreateEntryUseCase.js","sources":["../../../../src/features/contentEntry/CreateEntry/CreateEntryUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { CreateEntryRepository, CreateEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryAfterCreateEvent, EntryBeforeCreateEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateEntryDataFactory/index.js\";\n\nclass CreateEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: CreateEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private createEntryDataFactory: CreateEntryDataFactory.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n const { entry, input } = await this.createEntryDataFactory.create<T>(\n model,\n rawInput,\n options\n );\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromEntry(entry));\n }\n\n await this.eventPublisher.publish(new EntryBeforeCreateEvent({ entry, input, model }));\n\n const result = await this.repository.execute(model, entry);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n await this.eventPublisher.publish(\n new EntryAfterCreateEvent({\n entry,\n input,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const CreateEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryUseCaseImpl,\n dependencies: [EventPublisher, CreateEntryRepository, AccessControl, CreateEntryDataFactory]\n});\n"],"names":["CreateEntryUseCaseImpl","eventPublisher","repository","accessControl","createEntryDataFactory","model","rawInput","options","canAccess","Result","EntryNotAuthorizedError","entry","input","canAccessEntry","EntryBeforeCreateEvent","result","EntryAfterCreateEvent","error","CreateEntryUseCase","createImplementation","UseCaseAbstraction","EventPublisher","CreateEntryRepository","AccessControl","CreateEntryDataFactory"],"mappings":";;;;;;;AAeA,MAAMA;IACF,YACYC,cAAwC,EACxCC,UAA2C,EAC3CC,aAAsC,EACtCC,sBAAwD,CAClE;aAJUH,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,sBAAsB,GAAtBA;IACT;IAEH,MAAa,QACTC,KAAe,EACfC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEH;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACG,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACL;QAGzD,IAAI;YACA,MAAM,EAAEM,KAAK,EAAEC,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAC7DP,OACAC,UACAC;YAGJ,MAAMM,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC3DR;gBACAM;gBACA,KAAK;YACT;YAEA,IAAI,CAACE,gBACD,OAAOJ,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACC;YAGzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIG,uBAAuB;gBAAEH;gBAAOC;gBAAOP;YAAM;YAEnF,MAAMU,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACV,OAAOM;YACpD,IAAII,OAAO,MAAM,IACb,OAAON,OAAO,IAAI,CAACM,OAAO,KAAK;YAGnC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;gBACtBL;gBACAC;gBACAP;YACJ;YAGJ,OAAOI,OAAO,EAAE,CAACE;QACrB,EAAE,OAAOM,OAAO;YACZ,OAAOR,OAAO,IAAI,CAACQ;QACvB;IACJ;AACJ;AAEO,MAAMC,wCAAqBC,qBAAqB;IACnD,aAAaC;IACb,gBAAgBpB;IAChB,cAAc;QAACqB;QAAgBC;QAAuBC;QAAeC;KAAuB;AAChG"}
1
+ {"version":3,"file":"features/contentEntry/CreateEntry/CreateEntryUseCase.js","sources":["../../../../src/features/contentEntry/CreateEntry/CreateEntryUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { CreateEntryRepository, CreateEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EntryEventPublisher } from \"~/features/contentEntry/EntryEventPublisher/index.js\";\nimport { EntryAfterCreateEvent, EntryBeforeCreateEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateEntryDataFactory/index.js\";\n\nclass CreateEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EntryEventPublisher.Interface,\n private repository: CreateEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private createEntryDataFactory: CreateEntryDataFactory.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n const { entry, input } = await this.createEntryDataFactory.create<T>(\n model,\n rawInput,\n options\n );\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromEntry(entry));\n }\n\n await this.eventPublisher.publish(new EntryBeforeCreateEvent({ entry, input, model }));\n\n const result = await this.repository.execute(model, entry);\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n await this.eventPublisher.publish(\n new EntryAfterCreateEvent({\n entry,\n input,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const CreateEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryUseCaseImpl,\n dependencies: [\n EntryEventPublisher,\n CreateEntryRepository,\n AccessControl,\n CreateEntryDataFactory\n ]\n});\n"],"names":["CreateEntryUseCaseImpl","eventPublisher","repository","accessControl","createEntryDataFactory","model","rawInput","options","canAccess","Result","EntryNotAuthorizedError","entry","input","canAccessEntry","EntryBeforeCreateEvent","result","EntryAfterCreateEvent","error","CreateEntryUseCase","createImplementation","UseCaseAbstraction","EntryEventPublisher","CreateEntryRepository","AccessControl","CreateEntryDataFactory"],"mappings":";;;;;;;AAeA,MAAMA;IACF,YACYC,cAA6C,EAC7CC,UAA2C,EAC3CC,aAAsC,EACtCC,sBAAwD,CAClE;aAJUH,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,sBAAsB,GAAtBA;IACT;IAEH,MAAa,QACTC,KAAe,EACfC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEH;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACG,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACL;QAGzD,IAAI;YACA,MAAM,EAAEM,KAAK,EAAEC,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAC7DP,OACAC,UACAC;YAGJ,MAAMM,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC3DR;gBACAM;gBACA,KAAK;YACT;YAEA,IAAI,CAACE,gBACD,OAAOJ,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACC;YAGzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIG,uBAAuB;gBAAEH;gBAAOC;gBAAOP;YAAM;YAEnF,MAAMU,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACV,OAAOM;YACpD,IAAII,OAAO,MAAM,IACb,OAAON,OAAO,IAAI,CAACM,OAAO,KAAK;YAGnC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;gBACtBL;gBACAC;gBACAP;YACJ;YAGJ,OAAOI,OAAO,EAAE,CAACE;QACrB,EAAE,OAAOM,OAAO;YACZ,OAAOR,OAAO,IAAI,CAACQ;QACvB;IACJ;AACJ;AAEO,MAAMC,wCAAqBC,qBAAqB;IACnD,aAAaC;IACb,gBAAgBpB;IAChB,cAAc;QACVqB;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -1,5 +1,5 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { EntryEventPublisher } from "../../../features/contentEntry/EntryEventPublisher/index.js";
3
3
  import { CreateEntryRevisionFromRepository, CreateEntryRevisionFromUseCase as UseCaseAbstraction } from "./abstractions.js";
4
4
  import { AccessControl } from "../../../features/shared/abstractions.js";
5
5
  import { GetRevisionByIdUseCase } from "../../../features/contentEntry/GetRevisionById/index.js";
@@ -11,7 +11,7 @@ declare class CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.I
11
11
  private getRevisionById;
12
12
  private eventPublisher;
13
13
  private createEntryRevisionFromDataFactory;
14
- constructor(repository: CreateEntryRevisionFromRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, eventPublisher: EventPublisher.Interface, createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface);
14
+ constructor(repository: CreateEntryRevisionFromRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, eventPublisher: EntryEventPublisher.Interface, createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface);
15
15
  execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, sourceId: string, rawInput: CreateCmsEntryInput<T>, options?: CreateCmsEntryOptionsInput): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>>;
16
16
  }
17
17
  export declare const CreateEntryRevisionFromUseCase: import("@webiny/di").Implementation<typeof CreateEntryRevisionFromUseCaseImpl>;
@@ -1,5 +1,5 @@
1
1
  import { Result, createImplementation } from "@webiny/feature/api";
2
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { EntryEventPublisher } from "../EntryEventPublisher/index.js";
3
3
  import { CreateEntryRevisionFromRepository, CreateEntryRevisionFromUseCase } from "./abstractions.js";
4
4
  import { AccessControl } from "../../shared/abstractions.js";
5
5
  import { GetRevisionByIdUseCase } from "../GetRevisionById/index.js";
@@ -77,7 +77,7 @@ const CreateEntryRevisionFromUseCase_CreateEntryRevisionFromUseCase = createImpl
77
77
  CreateEntryRevisionFromRepository,
78
78
  AccessControl,
79
79
  GetRevisionByIdUseCase,
80
- EventPublisher,
80
+ EntryEventPublisher,
81
81
  CreateEntryRevisionFromDataFactory
82
82
  ]
83
83
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js","sources":["../../../../src/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n CreateEntryRevisionFromRepository,\n CreateEntryRevisionFromUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport {\n EntryRevisionAfterCreateEvent,\n EntryRevisionBeforeCreateEvent,\n EntryRevisionCreateErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateEntryRevisionFromDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/index.js\";\n\nclass CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: CreateEntryRevisionFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const originalResult = await this.getRevisionById.execute<T>(model, sourceId);\n\n if (originalResult.isFail()) {\n return Result.fail(originalResult.error);\n }\n\n const originalEntry = originalResult.value;\n\n const dataResult = await this.createEntryRevisionFromDataFactory.create<T>(\n sourceId,\n model,\n rawInput,\n originalEntry,\n options\n );\n if (dataResult.isFail()) {\n return Result.fail(dataResult.error);\n }\n const { entry, input } = dataResult.value;\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n await this.eventPublisher.publish(\n new EntryRevisionBeforeCreateEvent({\n entry,\n model,\n input,\n original: originalEntry\n })\n );\n\n const result = await this.repository.execute<T>(model, entry);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n const createdEntry = result.value;\n\n await this.eventPublisher.publish(\n new EntryRevisionAfterCreateEvent({\n entry: createdEntry,\n model,\n input,\n original: originalEntry\n })\n );\n\n return Result.ok(createdEntry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: error as Error\n })\n );\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const CreateEntryRevisionFromUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryRevisionFromUseCaseImpl,\n dependencies: [\n CreateEntryRevisionFromRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n EventPublisher,\n CreateEntryRevisionFromDataFactory\n ]\n});\n"],"names":["CreateEntryRevisionFromUseCaseImpl","repository","accessControl","getRevisionById","eventPublisher","createEntryRevisionFromDataFactory","model","sourceId","rawInput","options","canAccess","Result","EntryNotAuthorizedError","originalResult","originalEntry","dataResult","entry","input","canAccessEntry","EntryRevisionBeforeCreateEvent","result","EntryRevisionCreateErrorEvent","createdEntry","EntryRevisionAfterCreateEvent","error","CreateEntryRevisionFromUseCase","createImplementation","UseCaseAbstraction","CreateEntryRevisionFromRepository","AccessControl","GetRevisionByIdUseCase","EventPublisher","CreateEntryRevisionFromDataFactory"],"mappings":";;;;;;;;AAuBA,MAAMA;IACF,YACYC,UAAuD,EACvDC,aAAsC,EACtCC,eAAiD,EACjDC,cAAwC,EACxCC,kCAAgF,CAC1F;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,kCAAkC,GAAlCA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,QAAgB,EAChBC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,MAAMO,iBAAiB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAIP,OAAOC;QAEpE,IAAIM,eAAe,MAAM,IACrB,OAAOF,OAAO,IAAI,CAACE,eAAe,KAAK;QAG3C,MAAMC,gBAAgBD,eAAe,KAAK;QAE1C,MAAME,aAAa,MAAM,IAAI,CAAC,kCAAkC,CAAC,MAAM,CACnER,UACAD,OACAE,UACAM,eACAL;QAEJ,IAAIM,WAAW,MAAM,IACjB,OAAOJ,OAAO,IAAI,CAACI,WAAW,KAAK;QAEvC,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,WAAW,KAAK;QAEzC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DZ;YACAU;YACA,KAAK;QACT;QAEA,IAAI,CAACE,gBACD,OAAOP,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIa,+BAA+B;gBAC/BH;gBACAV;gBACAW;gBACA,UAAUH;YACd;YAGJ,MAAMM,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAId,OAAOU;YAEvD,IAAII,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9BL;oBACAV;oBACAW;oBACA,UAAUH;oBACV,OAAOM,OAAO,KAAK;gBACvB;gBAEJ,OAAOT,OAAO,IAAI,CAACS,OAAO,KAAK;YACnC;YAEA,MAAME,eAAeF,OAAO,KAAK;YAEjC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,8BAA8B;gBAC9B,OAAOD;gBACPhB;gBACAW;gBACA,UAAUH;YACd;YAGJ,OAAOH,OAAO,EAAE,CAACW;QACrB,EAAE,OAAOE,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,8BAA8B;gBAC9BL;gBACAV;gBACAW;gBACA,UAAUH;gBACV,OAAOU;YACX;YAEJ,OAAOb,OAAO,IAAI,CAACa;QACvB;IACJ;AACJ;AAEO,MAAMC,gEAAiCC,qBAAqB;IAC/D,aAAaC;IACb,gBAAgB3B;IAChB,cAAc;QACV4B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js","sources":["../../../../src/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { EntryEventPublisher } from \"~/features/contentEntry/EntryEventPublisher/index.js\";\nimport {\n CreateEntryRevisionFromRepository,\n CreateEntryRevisionFromUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport {\n EntryRevisionAfterCreateEvent,\n EntryRevisionBeforeCreateEvent,\n EntryRevisionCreateErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateEntryRevisionFromDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/index.js\";\n\nclass CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: CreateEntryRevisionFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private eventPublisher: EntryEventPublisher.Interface,\n private createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const originalResult = await this.getRevisionById.execute<T>(model, sourceId);\n\n if (originalResult.isFail()) {\n return Result.fail(originalResult.error);\n }\n\n const originalEntry = originalResult.value;\n\n const dataResult = await this.createEntryRevisionFromDataFactory.create<T>(\n sourceId,\n model,\n rawInput,\n originalEntry,\n options\n );\n if (dataResult.isFail()) {\n return Result.fail(dataResult.error);\n }\n const { entry, input } = dataResult.value;\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n await this.eventPublisher.publish(\n new EntryRevisionBeforeCreateEvent({\n entry,\n model,\n input,\n original: originalEntry\n })\n );\n\n const result = await this.repository.execute<T>(model, entry);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n const createdEntry = result.value;\n\n await this.eventPublisher.publish(\n new EntryRevisionAfterCreateEvent({\n entry: createdEntry,\n model,\n input,\n original: originalEntry\n })\n );\n\n return Result.ok(createdEntry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: error as Error\n })\n );\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const CreateEntryRevisionFromUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryRevisionFromUseCaseImpl,\n dependencies: [\n CreateEntryRevisionFromRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n EntryEventPublisher,\n CreateEntryRevisionFromDataFactory\n ]\n});\n"],"names":["CreateEntryRevisionFromUseCaseImpl","repository","accessControl","getRevisionById","eventPublisher","createEntryRevisionFromDataFactory","model","sourceId","rawInput","options","canAccess","Result","EntryNotAuthorizedError","originalResult","originalEntry","dataResult","entry","input","canAccessEntry","EntryRevisionBeforeCreateEvent","result","EntryRevisionCreateErrorEvent","createdEntry","EntryRevisionAfterCreateEvent","error","CreateEntryRevisionFromUseCase","createImplementation","UseCaseAbstraction","CreateEntryRevisionFromRepository","AccessControl","GetRevisionByIdUseCase","EntryEventPublisher","CreateEntryRevisionFromDataFactory"],"mappings":";;;;;;;;AAuBA,MAAMA;IACF,YACYC,UAAuD,EACvDC,aAAsC,EACtCC,eAAiD,EACjDC,cAA6C,EAC7CC,kCAAgF,CAC1F;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,kCAAkC,GAAlCA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,QAAgB,EAChBC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,MAAMO,iBAAiB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAIP,OAAOC;QAEpE,IAAIM,eAAe,MAAM,IACrB,OAAOF,OAAO,IAAI,CAACE,eAAe,KAAK;QAG3C,MAAMC,gBAAgBD,eAAe,KAAK;QAE1C,MAAME,aAAa,MAAM,IAAI,CAAC,kCAAkC,CAAC,MAAM,CACnER,UACAD,OACAE,UACAM,eACAL;QAEJ,IAAIM,WAAW,MAAM,IACjB,OAAOJ,OAAO,IAAI,CAACI,WAAW,KAAK;QAEvC,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,WAAW,KAAK;QAEzC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DZ;YACAU;YACA,KAAK;QACT;QAEA,IAAI,CAACE,gBACD,OAAOP,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIa,+BAA+B;gBAC/BH;gBACAV;gBACAW;gBACA,UAAUH;YACd;YAGJ,MAAMM,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAId,OAAOU;YAEvD,IAAII,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9BL;oBACAV;oBACAW;oBACA,UAAUH;oBACV,OAAOM,OAAO,KAAK;gBACvB;gBAEJ,OAAOT,OAAO,IAAI,CAACS,OAAO,KAAK;YACnC;YAEA,MAAME,eAAeF,OAAO,KAAK;YAEjC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,8BAA8B;gBAC9B,OAAOD;gBACPhB;gBACAW;gBACA,UAAUH;YACd;YAGJ,OAAOH,OAAO,EAAE,CAACW;QACrB,EAAE,OAAOE,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,8BAA8B;gBAC9BL;gBACAV;gBACAW;gBACA,UAAUH;gBACV,OAAOU;YACX;YAEJ,OAAOb,OAAO,IAAI,CAACa;QACvB;IACJ;AACJ;AAEO,MAAMC,gEAAiCC,qBAAqB;IAC/D,aAAaC;IACb,gBAAgB3B;IAChB,cAAc;QACV4B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -4,7 +4,7 @@ import { DeleteEntryRepository } from "./abstractions.js";
4
4
  import { AccessControl } from "../../../features/shared/abstractions.js";
5
5
  import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
6
6
  import type { CmsDeleteEntryOptions, CmsModel } from "../../../types/index.js";
7
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
7
+ import { EntryEventPublisher } from "../../../features/contentEntry/EntryEventPublisher/index.js";
8
8
  /**
9
9
  * DeleteEntryUseCase - Orchestrates permanent deletion of an entry.
10
10
  *
@@ -20,7 +20,7 @@ declare class DeleteEntryUseCaseImpl implements UseCaseAbstraction.Interface {
20
20
  private accessControl;
21
21
  private getLatestRevision;
22
22
  private eventPublisher;
23
- constructor(moveEntryToBin: MoveEntryToBinUseCase.Interface, repository: DeleteEntryRepository.Interface, accessControl: AccessControl.Interface, getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface, eventPublisher: EventPublisher.Interface);
23
+ constructor(moveEntryToBin: MoveEntryToBinUseCase.Interface, repository: DeleteEntryRepository.Interface, accessControl: AccessControl.Interface, getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface, eventPublisher: EntryEventPublisher.Interface);
24
24
  execute(model: CmsModel, id: string, options: CmsDeleteEntryOptions): Promise<Result<void, UseCaseAbstraction.Error>>;
25
25
  }
26
26
  export declare const DeleteEntryUseCase: import("@webiny/di").Implementation<typeof DeleteEntryUseCaseImpl>;
@@ -2,7 +2,7 @@ import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { DeleteEntryRepository, DeleteEntryUseCase, MoveEntryToBinUseCase } from "./abstractions.js";
3
3
  import { AccessControl } from "../../shared/abstractions.js";
4
4
  import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../GetLatestRevisionByEntryId/index.js";
5
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
5
+ import { EntryEventPublisher } from "../EntryEventPublisher/index.js";
6
6
  import { EntryAfterDeleteEvent, EntryBeforeDeleteEvent, EntryDeleteErrorEvent } from "./events.js";
7
7
  import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
8
8
  class DeleteEntryUseCaseImpl {
@@ -73,7 +73,7 @@ const DeleteEntryUseCase_DeleteEntryUseCase = createImplementation({
73
73
  DeleteEntryRepository,
74
74
  AccessControl,
75
75
  GetLatestRevisionByEntryIdIncludingDeletedUseCase,
76
- EventPublisher
76
+ EntryEventPublisher
77
77
  ]
78
78
  });
79
79
  export { DeleteEntryUseCase_DeleteEntryUseCase as DeleteEntryUseCase };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/DeleteEntry/DeleteEntryUseCase.js","sources":["../../../../src/features/contentEntry/DeleteEntry/DeleteEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryUseCase as UseCaseAbstraction, MoveEntryToBinUseCase } from \"./abstractions.js\";\nimport { DeleteEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsDeleteEntryOptions, CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * DeleteEntryUseCase - Orchestrates permanent deletion of an entry.\n *\n * Responsibilities:\n * - Apply access control\n * - Get the entry to delete by ID\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private moveEntryToBin: MoveEntryToBinUseCase.Interface,\n private repository: DeleteEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n id: string,\n options: CmsDeleteEntryOptions\n ): Promise<Result<void, UseCaseAbstraction.Error>> {\n const { permanently = true } = options;\n\n if (!permanently) {\n return this.moveEntryToBin.execute(model, id);\n }\n\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the entry to delete by ID\n const getResult = await this.getLatestRevision.execute(model, { id });\n\n if (getResult.isFail()) {\n return Result.fail(getResult.error);\n }\n\n const entryToDelete = getResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: entryToDelete,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: true\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute(model, entryToDelete);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: true,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: true\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: true,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteEntryUseCaseImpl,\n dependencies: [\n MoveEntryToBinUseCase,\n DeleteEntryRepository,\n AccessControl,\n GetLatestRevisionByEntryIdIncludingDeletedUseCase,\n EventPublisher\n ]\n});\n"],"names":["DeleteEntryUseCaseImpl","moveEntryToBin","repository","accessControl","getLatestRevision","eventPublisher","model","id","options","permanently","canAccess","Result","EntryNotAuthorizedError","getResult","entryToDelete","canAccessEntry","EntryBeforeDeleteEvent","result","EntryDeleteErrorEvent","EntryAfterDeleteEvent","error","DeleteEntryUseCase","createImplementation","UseCaseAbstraction","MoveEntryToBinUseCase","DeleteEntryRepository","AccessControl","GetLatestRevisionByEntryIdIncludingDeletedUseCase","EventPublisher"],"mappings":";;;;;;;AAoBA,MAAMA;IACF,YACYC,cAA+C,EAC/CC,UAA2C,EAC3CC,aAAsC,EACtCC,iBAA8E,EAC9EC,cAAwC,CAClD;aALUJ,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,iBAAiB,GAAjBA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,EAAU,EACVC,OAA8B,EACiB;QAC/C,MAAM,EAAEC,cAAc,IAAI,EAAE,GAAGD;QAE/B,IAAI,CAACC,aACD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAACH,OAAOC;QAI9C,MAAMG,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAIzD,MAAMO,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACP,OAAO;YAAEC;QAAG;QAEnE,IAAIM,UAAU,MAAM,IAChB,OAAOF,OAAO,IAAI,CAACE,UAAU,KAAK;QAGtC,MAAMC,gBAAgBD,UAAU,KAAK;QAGrC,MAAME,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DT;YACA,OAAOQ;YACP,KAAK;QACT;QAEA,IAAI,CAACC,gBACD,OAAOJ,OAAO,IAAI,CAAC,IAAIC;QAG3B,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAII,uBAAuB;gBACvB,OAAOF;gBACPR;gBACA,WAAW;YACf;YAIJ,MAAMW,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACX,OAAOQ;YAEpD,IAAIG,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;oBACtB,OAAOJ;oBACPR;oBACA,WAAW;oBACX,OAAOW,OAAO,KAAK;gBACvB;gBAEJ,OAAON,OAAO,IAAI,CAACM,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,sBAAsB;gBACtB,OAAOL;gBACPR;gBACA,WAAW;YACf;YAGJ,OAAOK,OAAO,EAAE;QACpB,EAAE,OAAOS,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,sBAAsB;gBACtB,OAAOJ;gBACPR;gBACA,WAAW;gBACX,OAAOc;YACX;YAEJ,OAAOT,OAAO,IAAI,CAACS;QACvB;IACJ;AACJ;AAEO,MAAMC,wCAAqBC,qBAAqB;IACnD,aAAaC;IACb,gBAAgBvB;IAChB,cAAc;QACVwB;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/DeleteEntry/DeleteEntryUseCase.js","sources":["../../../../src/features/contentEntry/DeleteEntry/DeleteEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryUseCase as UseCaseAbstraction, MoveEntryToBinUseCase } from \"./abstractions.js\";\nimport { DeleteEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsDeleteEntryOptions, CmsModel } from \"~/types/index.js\";\nimport { EntryEventPublisher } from \"~/features/contentEntry/EntryEventPublisher/index.js\";\nimport { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * DeleteEntryUseCase - Orchestrates permanent deletion of an entry.\n *\n * Responsibilities:\n * - Apply access control\n * - Get the entry to delete by ID\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private moveEntryToBin: MoveEntryToBinUseCase.Interface,\n private repository: DeleteEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface,\n private eventPublisher: EntryEventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n id: string,\n options: CmsDeleteEntryOptions\n ): Promise<Result<void, UseCaseAbstraction.Error>> {\n const { permanently = true } = options;\n\n if (!permanently) {\n return this.moveEntryToBin.execute(model, id);\n }\n\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the entry to delete by ID\n const getResult = await this.getLatestRevision.execute(model, { id });\n\n if (getResult.isFail()) {\n return Result.fail(getResult.error);\n }\n\n const entryToDelete = getResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: entryToDelete,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: true\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute(model, entryToDelete);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: true,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: true\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: true,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteEntryUseCaseImpl,\n dependencies: [\n MoveEntryToBinUseCase,\n DeleteEntryRepository,\n AccessControl,\n GetLatestRevisionByEntryIdIncludingDeletedUseCase,\n EntryEventPublisher\n ]\n});\n"],"names":["DeleteEntryUseCaseImpl","moveEntryToBin","repository","accessControl","getLatestRevision","eventPublisher","model","id","options","permanently","canAccess","Result","EntryNotAuthorizedError","getResult","entryToDelete","canAccessEntry","EntryBeforeDeleteEvent","result","EntryDeleteErrorEvent","EntryAfterDeleteEvent","error","DeleteEntryUseCase","createImplementation","UseCaseAbstraction","MoveEntryToBinUseCase","DeleteEntryRepository","AccessControl","GetLatestRevisionByEntryIdIncludingDeletedUseCase","EntryEventPublisher"],"mappings":";;;;;;;AAoBA,MAAMA;IACF,YACYC,cAA+C,EAC/CC,UAA2C,EAC3CC,aAAsC,EACtCC,iBAA8E,EAC9EC,cAA6C,CACvD;aALUJ,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,iBAAiB,GAAjBA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,EAAU,EACVC,OAA8B,EACiB;QAC/C,MAAM,EAAEC,cAAc,IAAI,EAAE,GAAGD;QAE/B,IAAI,CAACC,aACD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAACH,OAAOC;QAI9C,MAAMG,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAIzD,MAAMO,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACP,OAAO;YAAEC;QAAG;QAEnE,IAAIM,UAAU,MAAM,IAChB,OAAOF,OAAO,IAAI,CAACE,UAAU,KAAK;QAGtC,MAAMC,gBAAgBD,UAAU,KAAK;QAGrC,MAAME,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DT;YACA,OAAOQ;YACP,KAAK;QACT;QAEA,IAAI,CAACC,gBACD,OAAOJ,OAAO,IAAI,CAAC,IAAIC;QAG3B,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAII,uBAAuB;gBACvB,OAAOF;gBACPR;gBACA,WAAW;YACf;YAIJ,MAAMW,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACX,OAAOQ;YAEpD,IAAIG,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;oBACtB,OAAOJ;oBACPR;oBACA,WAAW;oBACX,OAAOW,OAAO,KAAK;gBACvB;gBAEJ,OAAON,OAAO,IAAI,CAACM,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,sBAAsB;gBACtB,OAAOL;gBACPR;gBACA,WAAW;YACf;YAGJ,OAAOK,OAAO,EAAE;QACpB,EAAE,OAAOS,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,sBAAsB;gBACtB,OAAOJ;gBACPR;gBACA,WAAW;gBACX,OAAOc;YACX;YAEJ,OAAOT,OAAO,IAAI,CAACS;QACvB;IACJ;AACJ;AAEO,MAAMC,wCAAqBC,qBAAqB;IACnD,aAAaC;IACb,gBAAgBvB;IAChB,cAAc;QACVwB;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -5,7 +5,7 @@ import { MoveEntryToBinRepository } from "./abstractions.js";
5
5
  import { AccessControl } from "../../../features/shared/abstractions.js";
6
6
  import { GetLatestRevisionByEntryIdUseCase } from "../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
7
7
  import type { CmsModel } from "../../../types/index.js";
8
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
8
+ import { EntryEventPublisher } from "../../../features/contentEntry/EntryEventPublisher/index.js";
9
9
  /**
10
10
  * MoveEntryToBinUseCase - Orchestrates soft deletion of an entry (move to bin).
11
11
  *
@@ -23,7 +23,7 @@ declare class MoveEntryToBinUseCaseImpl implements UseCaseAbstraction.Interface
23
23
  private getLatestRevision;
24
24
  private identityContext;
25
25
  private eventPublisher;
26
- constructor(repository: MoveEntryToBinRepository.Interface, accessControl: AccessControl.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface, identityContext: IdentityContext.Interface, eventPublisher: EventPublisher.Interface);
26
+ constructor(repository: MoveEntryToBinRepository.Interface, accessControl: AccessControl.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface, identityContext: IdentityContext.Interface, eventPublisher: EntryEventPublisher.Interface);
27
27
  execute(model: CmsModel, id: string): Promise<Result<void, UseCaseAbstraction.Error>>;
28
28
  }
29
29
  export declare const MoveEntryToBinUseCase: import("@webiny/di").Implementation<typeof MoveEntryToBinUseCaseImpl>;
@@ -3,7 +3,7 @@ import { IdentityContext } from "@webiny/api-core/features/security/IdentityCont
3
3
  import { MoveEntryToBinRepository, MoveEntryToBinUseCase } from "./abstractions.js";
4
4
  import { AccessControl } from "../../shared/abstractions.js";
5
5
  import { GetLatestRevisionByEntryIdUseCase } from "../GetLatestRevisionByEntryId/index.js";
6
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
6
+ import { EntryEventPublisher } from "../EntryEventPublisher/index.js";
7
7
  import { EntryAfterDeleteEvent, EntryBeforeDeleteEvent, EntryDeleteErrorEvent } from "./events.js";
8
8
  import { EntryNotAuthorizedError, EntryNotFoundError } from "../../../domain/contentEntry/errors.js";
9
9
  import { getDate } from "../../../utils/date.js";
@@ -92,7 +92,7 @@ const MoveEntryToBinUseCase_MoveEntryToBinUseCase = createImplementation({
92
92
  AccessControl,
93
93
  GetLatestRevisionByEntryIdUseCase,
94
94
  IdentityContext,
95
- EventPublisher
95
+ EntryEventPublisher
96
96
  ]
97
97
  });
98
98
  export { MoveEntryToBinUseCase_MoveEntryToBinUseCase as MoveEntryToBinUseCase };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js","sources":["../../../../src/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { MoveEntryToBinUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { MoveEntryToBinRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\n\n/**\n * MoveEntryToBinUseCase - Orchestrates soft deletion of an entry (move to bin).\n *\n * Responsibilities:\n * - Apply access control\n * - Get the entry to delete by ID\n * - Mark entry as deleted (wbyDeleted = true)\n * - Update deletion metadata\n * - Publish domain events with permanent: false\n * - Delegate to repository for storage operations\n */\nclass MoveEntryToBinUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: MoveEntryToBinRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(model: CmsModel, id: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the entry to delete by ID\n const getResult = await this.getLatestRevision.execute(model, { id });\n\n if (getResult.isFail()) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n const originalEntry = getResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n // Create the deleted entry data\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n const entryToDelete = {\n ...originalEntry,\n wbyDeleted: true,\n\n // Entry location fields - move to root folder\n location: {\n folderId: ROOT_FOLDER\n },\n binOriginalFolderId: originalEntry.location?.folderId,\n\n // Entry-level meta fields\n deletedOn: getDate(currentDateTime, null),\n deletedBy: getIdentity(currentIdentity, null),\n\n // Revision-level meta fields\n revisionDeletedOn: getDate(currentDateTime, null),\n revisionDeletedBy: getIdentity(currentIdentity, null)\n };\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: false\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute({\n model,\n entry: entryToDelete\n });\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: false,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: false\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: false,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const MoveEntryToBinUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MoveEntryToBinUseCaseImpl,\n dependencies: [\n MoveEntryToBinRepository,\n AccessControl,\n GetLatestRevisionByEntryIdUseCase,\n IdentityContext,\n EventPublisher\n ]\n});\n"],"names":["MoveEntryToBinUseCaseImpl","repository","accessControl","getLatestRevision","identityContext","eventPublisher","model","id","canAccess","Result","EntryNotAuthorizedError","getResult","EntryNotFoundError","originalEntry","canAccessEntry","currentDateTime","Date","currentIdentity","entryToDelete","ROOT_FOLDER","getDate","getIdentity","EntryBeforeDeleteEvent","result","EntryDeleteErrorEvent","EntryAfterDeleteEvent","error","MoveEntryToBinUseCase","createImplementation","UseCaseAbstraction","MoveEntryToBinRepository","AccessControl","GetLatestRevisionByEntryIdUseCase","IdentityContext","EventPublisher"],"mappings":";;;;;;;;;;;AA2BA,MAAMA;IACF,YACYC,UAA8C,EAC9CC,aAAsC,EACtCC,iBAA8D,EAC9DC,eAA0C,EAC1CC,cAAwC,CAClD;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,iBAAiB,GAAjBA;aACAC,eAAe,GAAfA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QAAQC,KAAe,EAAEC,EAAU,EAAmD;QAExF,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACE,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAIzD,MAAMK,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACL,OAAO;YAAEC;QAAG;QAEnE,IAAII,UAAU,MAAM,IAChB,OAAOF,OAAO,IAAI,CAAC,IAAIG,mBAAmBL;QAG9C,MAAMM,gBAAgBF,UAAU,KAAK;QAGrC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DR;YACA,OAAOO;YACP,KAAK;QACT;QAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMK,kBAAkB,IAAIC,OAAO,WAAW;QAC9C,MAAMC,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW;QAExD,MAAMC,gBAAgB;YAClB,GAAGL,aAAa;YAChB,YAAY;YAGZ,UAAU;gBACN,UAAUM;YACd;YACA,qBAAqBN,cAAc,QAAQ,EAAE;YAG7C,WAAWO,QAAQL,iBAAiB;YACpC,WAAWM,YAAYJ,iBAAiB;YAGxC,mBAAmBG,QAAQL,iBAAiB;YAC5C,mBAAmBM,YAAYJ,iBAAiB;QACpD;QAEA,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIK,uBAAuB;gBACvB,OAAOJ;gBACPZ;gBACA,WAAW;YACf;YAIJ,MAAMiB,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACzCjB;gBACA,OAAOY;YACX;YAEA,IAAIK,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;oBACtB,OAAON;oBACPZ;oBACA,WAAW;oBACX,OAAOiB,OAAO,KAAK;gBACvB;gBAEJ,OAAOd,OAAO,IAAI,CAACc,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,sBAAsB;gBACtB,OAAOP;gBACPZ;gBACA,WAAW;YACf;YAGJ,OAAOG,OAAO,EAAE;QACpB,EAAE,OAAOiB,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,sBAAsB;gBACtB,OAAON;gBACPZ;gBACA,WAAW;gBACX,OAAOoB;YACX;YAEJ,OAAOjB,OAAO,IAAI,CAACiB;QACvB;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgB7B;IAChB,cAAc;QACV8B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.js","sources":["../../../../src/features/contentEntry/DeleteEntry/MoveEntryToBinUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { MoveEntryToBinUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { MoveEntryToBinRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EntryEventPublisher } from \"~/features/contentEntry/EntryEventPublisher/index.js\";\nimport { EntryBeforeDeleteEvent, EntryAfterDeleteEvent, EntryDeleteErrorEvent } from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { getDate } from \"~/utils/date.js\";\nimport { getIdentity } from \"~/utils/identity.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\n\n/**\n * MoveEntryToBinUseCase - Orchestrates soft deletion of an entry (move to bin).\n *\n * Responsibilities:\n * - Apply access control\n * - Get the entry to delete by ID\n * - Mark entry as deleted (wbyDeleted = true)\n * - Update deletion metadata\n * - Publish domain events with permanent: false\n * - Delegate to repository for storage operations\n */\nclass MoveEntryToBinUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: MoveEntryToBinRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EntryEventPublisher.Interface\n ) {}\n\n async execute(model: CmsModel, id: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Get the entry to delete by ID\n const getResult = await this.getLatestRevision.execute(model, { id });\n\n if (getResult.isFail()) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n const originalEntry = getResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n // Create the deleted entry data\n const currentDateTime = new Date().toISOString();\n const currentIdentity = this.identityContext.getIdentity();\n\n const entryToDelete = {\n ...originalEntry,\n wbyDeleted: true,\n\n // Entry location fields - move to root folder\n location: {\n folderId: ROOT_FOLDER\n },\n binOriginalFolderId: originalEntry.location?.folderId,\n\n // Entry-level meta fields\n deletedOn: getDate(currentDateTime, null),\n deletedBy: getIdentity(currentIdentity, null),\n\n // Revision-level meta fields\n revisionDeletedOn: getDate(currentDateTime, null),\n revisionDeletedBy: getIdentity(currentIdentity, null)\n };\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: false\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute({\n model,\n entry: entryToDelete\n });\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: false,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteEvent({\n entry: entryToDelete,\n model,\n permanent: false\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteErrorEvent({\n entry: entryToDelete,\n model,\n permanent: false,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const MoveEntryToBinUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MoveEntryToBinUseCaseImpl,\n dependencies: [\n MoveEntryToBinRepository,\n AccessControl,\n GetLatestRevisionByEntryIdUseCase,\n IdentityContext,\n EntryEventPublisher\n ]\n});\n"],"names":["MoveEntryToBinUseCaseImpl","repository","accessControl","getLatestRevision","identityContext","eventPublisher","model","id","canAccess","Result","EntryNotAuthorizedError","getResult","EntryNotFoundError","originalEntry","canAccessEntry","currentDateTime","Date","currentIdentity","entryToDelete","ROOT_FOLDER","getDate","getIdentity","EntryBeforeDeleteEvent","result","EntryDeleteErrorEvent","EntryAfterDeleteEvent","error","MoveEntryToBinUseCase","createImplementation","UseCaseAbstraction","MoveEntryToBinRepository","AccessControl","GetLatestRevisionByEntryIdUseCase","IdentityContext","EntryEventPublisher"],"mappings":";;;;;;;;;;;AA2BA,MAAMA;IACF,YACYC,UAA8C,EAC9CC,aAAsC,EACtCC,iBAA8D,EAC9DC,eAA0C,EAC1CC,cAA6C,CACvD;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,iBAAiB,GAAjBA;aACAC,eAAe,GAAfA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QAAQC,KAAe,EAAEC,EAAU,EAAmD;QAExF,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACE,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAIzD,MAAMK,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACL,OAAO;YAAEC;QAAG;QAEnE,IAAII,UAAU,MAAM,IAChB,OAAOF,OAAO,IAAI,CAAC,IAAIG,mBAAmBL;QAG9C,MAAMM,gBAAgBF,UAAU,KAAK;QAGrC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DR;YACA,OAAOO;YACP,KAAK;QACT;QAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMK,kBAAkB,IAAIC,OAAO,WAAW;QAC9C,MAAMC,kBAAkB,IAAI,CAAC,eAAe,CAAC,WAAW;QAExD,MAAMC,gBAAgB;YAClB,GAAGL,aAAa;YAChB,YAAY;YAGZ,UAAU;gBACN,UAAUM;YACd;YACA,qBAAqBN,cAAc,QAAQ,EAAE;YAG7C,WAAWO,QAAQL,iBAAiB;YACpC,WAAWM,YAAYJ,iBAAiB;YAGxC,mBAAmBG,QAAQL,iBAAiB;YAC5C,mBAAmBM,YAAYJ,iBAAiB;QACpD;QAEA,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIK,uBAAuB;gBACvB,OAAOJ;gBACPZ;gBACA,WAAW;YACf;YAIJ,MAAMiB,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACzCjB;gBACA,OAAOY;YACX;YAEA,IAAIK,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;oBACtB,OAAON;oBACPZ;oBACA,WAAW;oBACX,OAAOiB,OAAO,KAAK;gBACvB;gBAEJ,OAAOd,OAAO,IAAI,CAACc,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,sBAAsB;gBACtB,OAAOP;gBACPZ;gBACA,WAAW;YACf;YAGJ,OAAOG,OAAO,EAAE;QACpB,EAAE,OAAOiB,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,sBAAsB;gBACtB,OAAON;gBACPZ;gBACA,WAAW;gBACX,OAAOoB;YACX;YAEJ,OAAOjB,OAAO,IAAI,CAACiB;QACvB;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgB7B;IAChB,cAAc;QACV8B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -7,7 +7,7 @@ import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../../../feat
7
7
  import { GetPreviousRevisionByEntryIdUseCase } from "../../../features/contentEntry/GetPreviousRevisionByEntryId/index.js";
8
8
  import { DeleteEntryUseCase } from "../../../features/contentEntry/DeleteEntry/index.js";
9
9
  import type { CmsModel } from "../../../types/index.js";
10
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
10
+ import { EntryEventPublisher } from "../../../features/contentEntry/EntryEventPublisher/index.js";
11
11
  /**
12
12
  * DeleteEntryRevisionUseCase - Orchestrates deletion of a specific entry revision.
13
13
  *
@@ -29,7 +29,7 @@ declare class DeleteEntryRevisionUseCaseImpl implements UseCaseAbstraction.Inter
29
29
  private getPreviousRevision;
30
30
  private deleteEntry;
31
31
  private eventPublisher;
32
- constructor(repository: DeleteEntryRevisionRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface, getPreviousRevision: GetPreviousRevisionByEntryIdUseCase.Interface, deleteEntry: DeleteEntryUseCase.Interface, eventPublisher: EventPublisher.Interface);
32
+ constructor(repository: DeleteEntryRevisionRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface, getPreviousRevision: GetPreviousRevisionByEntryIdUseCase.Interface, deleteEntry: DeleteEntryUseCase.Interface, eventPublisher: EntryEventPublisher.Interface);
33
33
  execute(model: CmsModel, revisionId: string): Promise<Result<void, UseCaseAbstraction.Error>>;
34
34
  }
35
35
  export declare const DeleteEntryRevisionUseCase: import("@webiny/di").Implementation<typeof DeleteEntryRevisionUseCaseImpl>;
@@ -5,7 +5,7 @@ import { GetRevisionByIdUseCase } from "../GetRevisionById/index.js";
5
5
  import { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from "../GetLatestRevisionByEntryId/index.js";
6
6
  import { GetPreviousRevisionByEntryIdUseCase } from "../GetPreviousRevisionByEntryId/index.js";
7
7
  import { DeleteEntryUseCase } from "../DeleteEntry/index.js";
8
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
8
+ import { EntryEventPublisher } from "../EntryEventPublisher/index.js";
9
9
  import { EntryRevisionAfterDeleteEvent, EntryRevisionBeforeDeleteEvent, EntryRevisionDeleteErrorEvent } from "./events.js";
10
10
  import { parseIdentifier } from "@webiny/utils";
11
11
  import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
@@ -92,7 +92,7 @@ const DeleteEntryRevisionUseCase_DeleteEntryRevisionUseCase = createImplementati
92
92
  GetLatestRevisionByEntryIdIncludingDeletedUseCase,
93
93
  GetPreviousRevisionByEntryIdUseCase,
94
94
  DeleteEntryUseCase,
95
- EventPublisher
95
+ EntryEventPublisher
96
96
  ]
97
97
  });
98
98
  export { DeleteEntryRevisionUseCase_DeleteEntryRevisionUseCase as DeleteEntryRevisionUseCase };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js","sources":["../../../../src/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryRevisionUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { DeleteEntryRevisionRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport { GetPreviousRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetPreviousRevisionByEntryId/index.js\";\nimport { DeleteEntryUseCase } from \"~/features/contentEntry/DeleteEntry/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n EntryRevisionBeforeDeleteEvent,\n EntryRevisionAfterDeleteEvent,\n EntryRevisionDeleteErrorEvent\n} from \"./events.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * DeleteEntryRevisionUseCase - Orchestrates deletion of a specific entry revision.\n *\n * Responsibilities:\n * - Parse revision ID to extract entry ID and version\n * - Apply access control\n * - Get the revision to delete\n * - Determine if this is the latest revision\n * - If latest and no previous revision exists, perform full entry delete\n * - If latest and previous exists, set previous as new latest\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteEntryRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: DeleteEntryRevisionRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface,\n private getPreviousRevision: GetPreviousRevisionByEntryIdUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n revisionId: string\n ): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { id: entryId, version } = parseIdentifier(revisionId);\n\n // Get the revision to delete\n const getRevisionResult = await this.getRevisionById.execute(model, revisionId);\n if (getRevisionResult.isFail()) {\n return Result.fail(getRevisionResult.error);\n }\n\n const entryToDelete = getRevisionResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: entryToDelete,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n // Get the latest revision\n const latestRevisionResult = await this.getLatestRevision.execute(model, { id: entryId });\n if (latestRevisionResult.isFail()) {\n return Result.fail(latestRevisionResult.error);\n }\n\n const latestRevision = latestRevisionResult.value;\n const latestRevisionId = latestRevision?.id || null;\n\n // Get the previous revision\n const previousRevisionResult = await this.getPreviousRevision.execute(model, {\n entryId,\n version: version as number\n });\n\n // If targeted record is the latest entry record and there is no previous revision,\n // delete the entire entry.\n const previousRevision = previousRevisionResult.isFail()\n ? null\n : previousRevisionResult.value;\n if (previousRevisionResult.isFail() && entryToDelete.id === latestRevisionId) {\n return await this.deleteEntry.execute(model, revisionId, {});\n }\n\n // Determine the entry to set as latest (if deleting current latest)\n let latestEntry = null;\n if (entryToDelete.id === latestRevisionId && previousRevision) {\n latestEntry = previousRevision;\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryRevisionBeforeDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute({\n model,\n entry: entryToDelete,\n latestEntry\n });\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryRevisionAfterDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteEntryRevisionUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteEntryRevisionUseCaseImpl,\n dependencies: [\n DeleteEntryRevisionRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdIncludingDeletedUseCase,\n GetPreviousRevisionByEntryIdUseCase,\n DeleteEntryUseCase,\n EventPublisher\n ]\n});\n"],"names":["DeleteEntryRevisionUseCaseImpl","repository","accessControl","getRevisionById","getLatestRevision","getPreviousRevision","deleteEntry","eventPublisher","model","revisionId","canAccess","Result","EntryNotAuthorizedError","entryId","version","parseIdentifier","getRevisionResult","entryToDelete","canAccessEntry","latestRevisionResult","latestRevision","latestRevisionId","previousRevisionResult","previousRevision","latestEntry","EntryRevisionBeforeDeleteEvent","result","EntryRevisionDeleteErrorEvent","EntryRevisionAfterDeleteEvent","error","DeleteEntryRevisionUseCase","createImplementation","UseCaseAbstraction","DeleteEntryRevisionRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdIncludingDeletedUseCase","GetPreviousRevisionByEntryIdUseCase","DeleteEntryUseCase","EventPublisher"],"mappings":";;;;;;;;;;;AAgCA,MAAMA;IACF,YACYC,UAAmD,EACnDC,aAAsC,EACtCC,eAAiD,EACjDC,iBAA8E,EAC9EC,mBAAkE,EAClEC,WAAyC,EACzCC,cAAwC,CAClD;aAPUN,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;aACAC,mBAAmB,GAAnBA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,UAAkB,EAC6B;QAE/C,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACE,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAM,EAAE,IAAIK,OAAO,EAAEC,OAAO,EAAE,GAAGC,gBAAgBN;QAGjD,MAAMO,oBAAoB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACR,OAAOC;QACpE,IAAIO,kBAAkB,MAAM,IACxB,OAAOL,OAAO,IAAI,CAACK,kBAAkB,KAAK;QAG9C,MAAMC,gBAAgBD,kBAAkB,KAAK;QAG7C,MAAME,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DV;YACA,OAAOS;YACP,KAAK;QACT;QAEA,IAAI,CAACC,gBACD,OAAOP,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMO,uBAAuB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACX,OAAO;YAAE,IAAIK;QAAQ;QACvF,IAAIM,qBAAqB,MAAM,IAC3B,OAAOR,OAAO,IAAI,CAACQ,qBAAqB,KAAK;QAGjD,MAAMC,iBAAiBD,qBAAqB,KAAK;QACjD,MAAME,mBAAmBD,gBAAgB,MAAM;QAG/C,MAAME,yBAAyB,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAACd,OAAO;YACzEK;YACA,SAASC;QACb;QAIA,MAAMS,mBAAmBD,uBAAuB,MAAM,KAChD,OACAA,uBAAuB,KAAK;QAClC,IAAIA,uBAAuB,MAAM,MAAML,cAAc,EAAE,KAAKI,kBACxD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACb,OAAOC,YAAY,CAAC;QAI9D,IAAIe,cAAc;QAClB,IAAIP,cAAc,EAAE,KAAKI,oBAAoBE,kBACzCC,cAAcD;QAGlB,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,+BAA+B;gBAC/B,OAAOR;gBACPT;YACJ;YAIJ,MAAMkB,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACzClB;gBACA,OAAOS;gBACPO;YACJ;YAEA,IAAIE,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9B,OAAOV;oBACPT;oBACA,OAAOkB,OAAO,KAAK;gBACvB;gBAEJ,OAAOf,OAAO,IAAI,CAACe,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,8BAA8B;gBAC9B,OAAOX;gBACPT;YACJ;YAGJ,OAAOG,OAAO,EAAE;QACpB,EAAE,OAAOkB,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,8BAA8B;gBAC9B,OAAOV;gBACPT;gBACA,OAAOqB;YACX;YAEJ,OAAOlB,OAAO,IAAI,CAACkB;QACvB;IACJ;AACJ;AAEO,MAAMC,wDAA6BC,qBAAqB;IAC3D,aAAaC;IACb,gBAAgBhC;IAChB,cAAc;QACViC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.js","sources":["../../../../src/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { DeleteEntryRevisionUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { DeleteEntryRevisionRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdIncludingDeletedUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport { GetPreviousRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetPreviousRevisionByEntryId/index.js\";\nimport { DeleteEntryUseCase } from \"~/features/contentEntry/DeleteEntry/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EntryEventPublisher } from \"~/features/contentEntry/EntryEventPublisher/index.js\";\nimport {\n EntryRevisionBeforeDeleteEvent,\n EntryRevisionAfterDeleteEvent,\n EntryRevisionDeleteErrorEvent\n} from \"./events.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * DeleteEntryRevisionUseCase - Orchestrates deletion of a specific entry revision.\n *\n * Responsibilities:\n * - Parse revision ID to extract entry ID and version\n * - Apply access control\n * - Get the revision to delete\n * - Determine if this is the latest revision\n * - If latest and no previous revision exists, perform full entry delete\n * - If latest and previous exists, set previous as new latest\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteEntryRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: DeleteEntryRevisionRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdIncludingDeletedUseCase.Interface,\n private getPreviousRevision: GetPreviousRevisionByEntryIdUseCase.Interface,\n private deleteEntry: DeleteEntryUseCase.Interface,\n private eventPublisher: EntryEventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n revisionId: string\n ): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { id: entryId, version } = parseIdentifier(revisionId);\n\n // Get the revision to delete\n const getRevisionResult = await this.getRevisionById.execute(model, revisionId);\n if (getRevisionResult.isFail()) {\n return Result.fail(getRevisionResult.error);\n }\n\n const entryToDelete = getRevisionResult.value;\n\n // Check access control on the specific entry\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: entryToDelete,\n rwd: \"d\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(new EntryNotAuthorizedError());\n }\n\n // Get the latest revision\n const latestRevisionResult = await this.getLatestRevision.execute(model, { id: entryId });\n if (latestRevisionResult.isFail()) {\n return Result.fail(latestRevisionResult.error);\n }\n\n const latestRevision = latestRevisionResult.value;\n const latestRevisionId = latestRevision?.id || null;\n\n // Get the previous revision\n const previousRevisionResult = await this.getPreviousRevision.execute(model, {\n entryId,\n version: version as number\n });\n\n // If targeted record is the latest entry record and there is no previous revision,\n // delete the entire entry.\n const previousRevision = previousRevisionResult.isFail()\n ? null\n : previousRevisionResult.value;\n if (previousRevisionResult.isFail() && entryToDelete.id === latestRevisionId) {\n return await this.deleteEntry.execute(model, revisionId, {});\n }\n\n // Determine the entry to set as latest (if deleting current latest)\n let latestEntry = null;\n if (entryToDelete.id === latestRevisionId && previousRevision) {\n latestEntry = previousRevision;\n }\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryRevisionBeforeDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute({\n model,\n entry: entryToDelete,\n latestEntry\n });\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryRevisionAfterDeleteEvent({\n entry: entryToDelete,\n model\n })\n );\n\n return Result.ok();\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionDeleteErrorEvent({\n entry: entryToDelete,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteEntryRevisionUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteEntryRevisionUseCaseImpl,\n dependencies: [\n DeleteEntryRevisionRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdIncludingDeletedUseCase,\n GetPreviousRevisionByEntryIdUseCase,\n DeleteEntryUseCase,\n EntryEventPublisher\n ]\n});\n"],"names":["DeleteEntryRevisionUseCaseImpl","repository","accessControl","getRevisionById","getLatestRevision","getPreviousRevision","deleteEntry","eventPublisher","model","revisionId","canAccess","Result","EntryNotAuthorizedError","entryId","version","parseIdentifier","getRevisionResult","entryToDelete","canAccessEntry","latestRevisionResult","latestRevision","latestRevisionId","previousRevisionResult","previousRevision","latestEntry","EntryRevisionBeforeDeleteEvent","result","EntryRevisionDeleteErrorEvent","EntryRevisionAfterDeleteEvent","error","DeleteEntryRevisionUseCase","createImplementation","UseCaseAbstraction","DeleteEntryRevisionRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdIncludingDeletedUseCase","GetPreviousRevisionByEntryIdUseCase","DeleteEntryUseCase","EntryEventPublisher"],"mappings":";;;;;;;;;;;AAgCA,MAAMA;IACF,YACYC,UAAmD,EACnDC,aAAsC,EACtCC,eAAiD,EACjDC,iBAA8E,EAC9EC,mBAAkE,EAClEC,WAAyC,EACzCC,cAA6C,CACvD;aAPUN,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;aACAC,mBAAmB,GAAnBA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,UAAkB,EAC6B;QAE/C,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACE,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAM,EAAE,IAAIK,OAAO,EAAEC,OAAO,EAAE,GAAGC,gBAAgBN;QAGjD,MAAMO,oBAAoB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACR,OAAOC;QACpE,IAAIO,kBAAkB,MAAM,IACxB,OAAOL,OAAO,IAAI,CAACK,kBAAkB,KAAK;QAG9C,MAAMC,gBAAgBD,kBAAkB,KAAK;QAG7C,MAAME,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DV;YACA,OAAOS;YACP,KAAK;QACT;QAEA,IAAI,CAACC,gBACD,OAAOP,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMO,uBAAuB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAACX,OAAO;YAAE,IAAIK;QAAQ;QACvF,IAAIM,qBAAqB,MAAM,IAC3B,OAAOR,OAAO,IAAI,CAACQ,qBAAqB,KAAK;QAGjD,MAAMC,iBAAiBD,qBAAqB,KAAK;QACjD,MAAME,mBAAmBD,gBAAgB,MAAM;QAG/C,MAAME,yBAAyB,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAACd,OAAO;YACzEK;YACA,SAASC;QACb;QAIA,MAAMS,mBAAmBD,uBAAuB,MAAM,KAChD,OACAA,uBAAuB,KAAK;QAClC,IAAIA,uBAAuB,MAAM,MAAML,cAAc,EAAE,KAAKI,kBACxD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACb,OAAOC,YAAY,CAAC;QAI9D,IAAIe,cAAc;QAClB,IAAIP,cAAc,EAAE,KAAKI,oBAAoBE,kBACzCC,cAAcD;QAGlB,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,+BAA+B;gBAC/B,OAAOR;gBACPT;YACJ;YAIJ,MAAMkB,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACzClB;gBACA,OAAOS;gBACPO;YACJ;YAEA,IAAIE,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9B,OAAOV;oBACPT;oBACA,OAAOkB,OAAO,KAAK;gBACvB;gBAEJ,OAAOf,OAAO,IAAI,CAACe,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,8BAA8B;gBAC9B,OAAOX;gBACPT;YACJ;YAGJ,OAAOG,OAAO,EAAE;QACpB,EAAE,OAAOkB,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,8BAA8B;gBAC9B,OAAOV;gBACPT;gBACA,OAAOqB;YACX;YAEJ,OAAOlB,OAAO,IAAI,CAACkB;QACvB;IACJ;AACJ;AAEO,MAAMC,wDAA6BC,qBAAqB;IAC3D,aAAaC;IACb,gBAAgBhC;IAChB,cAAc;QACViC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -1,5 +1,5 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { EntryEventPublisher } from "../../../features/contentEntry/EntryEventPublisher/index.js";
3
3
  import { DeleteMultipleEntriesUseCase as UseCaseAbstraction } from "./abstractions.js";
4
4
  import { DeleteMultipleEntriesRepository } from "./abstractions.js";
5
5
  import { AccessControl } from "../../../features/shared/abstractions.js";
@@ -22,7 +22,7 @@ declare class DeleteMultipleEntriesUseCaseImpl implements UseCaseAbstraction.Int
22
22
  private accessControl;
23
23
  private listEntries;
24
24
  private eventPublisher;
25
- constructor(repository: DeleteMultipleEntriesRepository.Interface, accessControl: AccessControl.Interface, listEntries: ListEntriesUseCase.Interface, eventPublisher: EventPublisher.Interface);
25
+ constructor(repository: DeleteMultipleEntriesRepository.Interface, accessControl: AccessControl.Interface, listEntries: ListEntriesUseCase.Interface, eventPublisher: EntryEventPublisher.Interface);
26
26
  execute(model: CmsModel, params: {
27
27
  entries: string[];
28
28
  }): Promise<Result<Array<{
@@ -1,5 +1,5 @@
1
1
  import { Result, createImplementation } from "@webiny/feature/api";
2
- import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import { EntryEventPublisher } from "../EntryEventPublisher/index.js";
3
3
  import { DeleteMultipleEntriesRepository, DeleteMultipleEntriesUseCase } from "./abstractions.js";
4
4
  import { AccessControl } from "../../shared/abstractions.js";
5
5
  import { ListEntriesUseCase } from "../ListEntries/abstractions.js";
@@ -88,7 +88,7 @@ const DeleteMultipleEntriesUseCase_DeleteMultipleEntriesUseCase = createImplemen
88
88
  DeleteMultipleEntriesRepository,
89
89
  AccessControl,
90
90
  ListEntriesUseCase,
91
- EventPublisher
91
+ EntryEventPublisher
92
92
  ]
93
93
  });
94
94
  export { DeleteMultipleEntriesUseCase_DeleteMultipleEntriesUseCase as DeleteMultipleEntriesUseCase };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js","sources":["../../../../src/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { DeleteMultipleEntriesUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { DeleteMultipleEntriesRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { ListEntriesUseCase } from \"~/features/contentEntry/ListEntries/abstractions.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforeDeleteMultipleEvent,\n EntryAfterDeleteMultipleEvent,\n EntryDeleteMultipleErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport { filterAsync } from \"~/utils/filterAsync.js\";\n\n/**\n * DeleteMultipleEntriesUseCase - Orchestrates deleting multiple entries.\n *\n * Responsibilities:\n * - Validate max entries limit (50)\n * - Parse entry IDs to unique entry IDs\n * - Apply access control\n * - Fetch entries using ListEntries use case\n * - Filter entries by access control\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteMultipleEntriesUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: DeleteMultipleEntriesRepository.Interface,\n private accessControl: AccessControl.Interface,\n private listEntries: ListEntriesUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n params: { entries: string[] }\n ): Promise<Result<Array<{ id: string }>, UseCaseAbstraction.Error>> {\n const { entries: input } = params;\n const maxDeletableEntries = 50;\n\n // Parse entry IDs to unique entry IDs\n const entryIdList = new Set<string>();\n for (const id of input) {\n const { id: entryId } = parseIdentifier(id);\n entryIdList.add(entryId);\n }\n const ids = Array.from(entryIdList);\n\n // Validate max entries limit\n if (ids.length > maxDeletableEntries) {\n return Result.fail(\n new WebinyError(\n \"Cannot delete more than 50 entries at once.\",\n \"DELETE_ENTRIES_MAX\",\n {\n entries: ids\n }\n ) as any\n );\n }\n\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Fetch entries using ListEntries use case\n const listResult = await this.listEntries.execute(model, {\n where: {\n latest: true,\n entryId_in: ids\n },\n limit: maxDeletableEntries + 1\n });\n\n if (listResult.isFail()) {\n return Result.fail(listResult.error);\n }\n\n const { entries } = listResult.value;\n\n // Filter entries by access control (only delete entries user can access)\n const accessibleEntries = await filterAsync(entries, async entry => {\n return this.accessControl.canAccessEntry({ model, entry });\n });\n\n const items = accessibleEntries.map(entry => entry.id);\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteMultipleEvent({\n entries,\n ids,\n model\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute(model, items);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteMultipleErrorEvent({\n entries,\n ids,\n model,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteMultipleEvent({\n entries,\n ids,\n model\n })\n );\n\n return Result.ok(\n items.map(id => {\n return { id };\n })\n );\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteMultipleErrorEvent({\n entries,\n ids,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteMultipleEntriesUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteMultipleEntriesUseCaseImpl,\n dependencies: [\n DeleteMultipleEntriesRepository,\n AccessControl,\n ListEntriesUseCase,\n EventPublisher\n ]\n});\n"],"names":["DeleteMultipleEntriesUseCaseImpl","repository","accessControl","listEntries","eventPublisher","model","params","input","maxDeletableEntries","entryIdList","Set","id","entryId","parseIdentifier","ids","Array","Result","WebinyError","canAccess","EntryNotAuthorizedError","listResult","entries","accessibleEntries","filterAsync","entry","items","EntryBeforeDeleteMultipleEvent","result","EntryDeleteMultipleErrorEvent","EntryAfterDeleteMultipleEvent","error","DeleteMultipleEntriesUseCase","createImplementation","UseCaseAbstraction","DeleteMultipleEntriesRepository","AccessControl","ListEntriesUseCase","EventPublisher"],"mappings":";;;;;;;;;;AA8BA,MAAMA;IACF,YACYC,UAAqD,EACrDC,aAAsC,EACtCC,WAAyC,EACzCC,cAAwC,CAClD;aAJUH,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,MAA6B,EACmC;QAChE,MAAM,EAAE,SAASC,KAAK,EAAE,GAAGD;QAC3B,MAAME,sBAAsB;QAG5B,MAAMC,cAAc,IAAIC;QACxB,KAAK,MAAMC,MAAMJ,MAAO;YACpB,MAAM,EAAE,IAAIK,OAAO,EAAE,GAAGC,gBAAgBF;YACxCF,YAAY,GAAG,CAACG;QACpB;QACA,MAAME,MAAMC,MAAM,IAAI,CAACN;QAGvB,IAAIK,IAAI,MAAM,GAAGN,qBACb,OAAOQ,OAAO,IAAI,CACd,IAAIC,cACA,+CACA,sBACA;YACI,SAASH;QACb;QAMZ,MAAMI,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEb;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACa,WACD,OAAOF,OAAO,IAAI,CAACG,wBAAwB,SAAS,CAACd;QAIzD,MAAMe,aAAa,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACf,OAAO;YACrD,OAAO;gBACH,QAAQ;gBACR,YAAYS;YAChB;YACA,OAAON,sBAAsB;QACjC;QAEA,IAAIY,WAAW,MAAM,IACjB,OAAOJ,OAAO,IAAI,CAACI,WAAW,KAAK;QAGvC,MAAM,EAAEC,OAAO,EAAE,GAAGD,WAAW,KAAK;QAGpC,MAAME,oBAAoB,MAAMC,YAAYF,SAAS,OAAMG,QAChD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAAEnB;gBAAOmB;YAAM;QAG5D,MAAMC,QAAQH,kBAAkB,GAAG,CAACE,CAAAA,QAASA,MAAM,EAAE;QAErD,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,+BAA+B;gBAC/BL;gBACAP;gBACAT;YACJ;YAIJ,MAAMsB,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACtB,OAAOoB;YAEpD,IAAIE,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9BP;oBACAP;oBACAT;oBACA,OAAOsB,OAAO,KAAK;gBACvB;gBAEJ,OAAOX,OAAO,IAAI,CAACW,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,8BAA8B;gBAC9BR;gBACAP;gBACAT;YACJ;YAGJ,OAAOW,OAAO,EAAE,CACZS,MAAM,GAAG,CAACd,CAAAA,KACC;oBAAEA;gBAAG;QAGxB,EAAE,OAAOmB,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,8BAA8B;gBAC9BP;gBACAP;gBACAT;gBACA,OAAOyB;YACX;YAEJ,OAAOd,OAAO,IAAI,CAACc;QACvB;IACJ;AACJ;AAEO,MAAMC,4DAA+BC,qBAAqB;IAC7D,aAAaC;IACb,gBAAgBjC;IAChB,cAAc;QACVkC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.js","sources":["../../../../src/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { EntryEventPublisher } from \"~/features/contentEntry/EntryEventPublisher/index.js\";\nimport { DeleteMultipleEntriesUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { DeleteMultipleEntriesRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { ListEntriesUseCase } from \"~/features/contentEntry/ListEntries/abstractions.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforeDeleteMultipleEvent,\n EntryAfterDeleteMultipleEvent,\n EntryDeleteMultipleErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport WebinyError from \"@webiny/error\";\nimport { filterAsync } from \"~/utils/filterAsync.js\";\n\n/**\n * DeleteMultipleEntriesUseCase - Orchestrates deleting multiple entries.\n *\n * Responsibilities:\n * - Validate max entries limit (50)\n * - Parse entry IDs to unique entry IDs\n * - Apply access control\n * - Fetch entries using ListEntries use case\n * - Filter entries by access control\n * - Publish domain events\n * - Delegate to repository for storage operations\n */\nclass DeleteMultipleEntriesUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: DeleteMultipleEntriesRepository.Interface,\n private accessControl: AccessControl.Interface,\n private listEntries: ListEntriesUseCase.Interface,\n private eventPublisher: EntryEventPublisher.Interface\n ) {}\n\n async execute(\n model: CmsModel,\n params: { entries: string[] }\n ): Promise<Result<Array<{ id: string }>, UseCaseAbstraction.Error>> {\n const { entries: input } = params;\n const maxDeletableEntries = 50;\n\n // Parse entry IDs to unique entry IDs\n const entryIdList = new Set<string>();\n for (const id of input) {\n const { id: entryId } = parseIdentifier(id);\n entryIdList.add(entryId);\n }\n const ids = Array.from(entryIdList);\n\n // Validate max entries limit\n if (ids.length > maxDeletableEntries) {\n return Result.fail(\n new WebinyError(\n \"Cannot delete more than 50 entries at once.\",\n \"DELETE_ENTRIES_MAX\",\n {\n entries: ids\n }\n ) as any\n );\n }\n\n // Check access control\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"d\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n // Fetch entries using ListEntries use case\n const listResult = await this.listEntries.execute(model, {\n where: {\n latest: true,\n entryId_in: ids\n },\n limit: maxDeletableEntries + 1\n });\n\n if (listResult.isFail()) {\n return Result.fail(listResult.error);\n }\n\n const { entries } = listResult.value;\n\n // Filter entries by access control (only delete entries user can access)\n const accessibleEntries = await filterAsync(entries, async entry => {\n return this.accessControl.canAccessEntry({ model, entry });\n });\n\n const items = accessibleEntries.map(entry => entry.id);\n\n try {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeDeleteMultipleEvent({\n entries,\n ids,\n model\n })\n );\n\n // Delegate to repository\n const result = await this.repository.execute(model, items);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryDeleteMultipleErrorEvent({\n entries,\n ids,\n model,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterDeleteMultipleEvent({\n entries,\n ids,\n model\n })\n );\n\n return Result.ok(\n items.map(id => {\n return { id };\n })\n );\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryDeleteMultipleErrorEvent({\n entries,\n ids,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const DeleteMultipleEntriesUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: DeleteMultipleEntriesUseCaseImpl,\n dependencies: [\n DeleteMultipleEntriesRepository,\n AccessControl,\n ListEntriesUseCase,\n EntryEventPublisher\n ]\n});\n"],"names":["DeleteMultipleEntriesUseCaseImpl","repository","accessControl","listEntries","eventPublisher","model","params","input","maxDeletableEntries","entryIdList","Set","id","entryId","parseIdentifier","ids","Array","Result","WebinyError","canAccess","EntryNotAuthorizedError","listResult","entries","accessibleEntries","filterAsync","entry","items","EntryBeforeDeleteMultipleEvent","result","EntryDeleteMultipleErrorEvent","EntryAfterDeleteMultipleEvent","error","DeleteMultipleEntriesUseCase","createImplementation","UseCaseAbstraction","DeleteMultipleEntriesRepository","AccessControl","ListEntriesUseCase","EntryEventPublisher"],"mappings":";;;;;;;;;;AA8BA,MAAMA;IACF,YACYC,UAAqD,EACrDC,aAAsC,EACtCC,WAAyC,EACzCC,cAA6C,CACvD;aAJUH,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,MAA6B,EACmC;QAChE,MAAM,EAAE,SAASC,KAAK,EAAE,GAAGD;QAC3B,MAAME,sBAAsB;QAG5B,MAAMC,cAAc,IAAIC;QACxB,KAAK,MAAMC,MAAMJ,MAAO;YACpB,MAAM,EAAE,IAAIK,OAAO,EAAE,GAAGC,gBAAgBF;YACxCF,YAAY,GAAG,CAACG;QACpB;QACA,MAAME,MAAMC,MAAM,IAAI,CAACN;QAGvB,IAAIK,IAAI,MAAM,GAAGN,qBACb,OAAOQ,OAAO,IAAI,CACd,IAAIC,cACA,+CACA,sBACA;YACI,SAASH;QACb;QAMZ,MAAMI,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEb;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACa,WACD,OAAOF,OAAO,IAAI,CAACG,wBAAwB,SAAS,CAACd;QAIzD,MAAMe,aAAa,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACf,OAAO;YACrD,OAAO;gBACH,QAAQ;gBACR,YAAYS;YAChB;YACA,OAAON,sBAAsB;QACjC;QAEA,IAAIY,WAAW,MAAM,IACjB,OAAOJ,OAAO,IAAI,CAACI,WAAW,KAAK;QAGvC,MAAM,EAAEC,OAAO,EAAE,GAAGD,WAAW,KAAK;QAGpC,MAAME,oBAAoB,MAAMC,YAAYF,SAAS,OAAMG,QAChD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAAEnB;gBAAOmB;YAAM;QAG5D,MAAMC,QAAQH,kBAAkB,GAAG,CAACE,CAAAA,QAASA,MAAM,EAAE;QAErD,IAAI;YAEA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,+BAA+B;gBAC/BL;gBACAP;gBACAT;YACJ;YAIJ,MAAMsB,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACtB,OAAOoB;YAEpD,IAAIE,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9BP;oBACAP;oBACAT;oBACA,OAAOsB,OAAO,KAAK;gBACvB;gBAEJ,OAAOX,OAAO,IAAI,CAACW,OAAO,KAAK;YACnC;YAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,8BAA8B;gBAC9BR;gBACAP;gBACAT;YACJ;YAGJ,OAAOW,OAAO,EAAE,CACZS,MAAM,GAAG,CAACd,CAAAA,KACC;oBAAEA;gBAAG;QAGxB,EAAE,OAAOmB,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIF,8BAA8B;gBAC9BP;gBACAP;gBACAT;gBACA,OAAOyB;YACX;YAEJ,OAAOd,OAAO,IAAI,CAACc;QACvB;IACJ;AACJ;AAEO,MAAMC,4DAA+BC,qBAAqB;IAC7D,aAAaC;IACb,gBAAgBjC;IAChB,cAAc;QACVkC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -0,0 +1,17 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { EntryEventPublisher } from "../../../features/contentEntry/EntryEventPublisher/index.js";
3
+ import { DuplicateEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
4
+ import { AccessControl } from "../../../features/shared/abstractions.js";
5
+ import { GetRevisionByIdUseCase } from "../../../features/contentEntry/GetRevisionById/index.js";
6
+ import { CreateEntryUseCase } from "../../../features/contentEntry/CreateEntry/index.js";
7
+ import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../types/index.js";
8
+ declare class DuplicateEntryUseCaseImpl implements UseCaseAbstraction.Interface {
9
+ private accessControl;
10
+ private getRevisionById;
11
+ private createEntry;
12
+ private eventPublisher;
13
+ constructor(accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, createEntry: CreateEntryUseCase.Interface, eventPublisher: EntryEventPublisher.Interface);
14
+ execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, sourceId: string): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>>;
15
+ }
16
+ export declare const DuplicateEntryUseCase: import("@webiny/di").Implementation<typeof DuplicateEntryUseCaseImpl>;
17
+ export {};