@webiny/api-headless-cms 0.0.0-unstable.9f53ea597d → 0.0.0-unstable.a4f3e4ea8b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/crud/contentEntry.crud.js +12 -39
  2. package/crud/contentEntry.crud.js.map +1 -1
  3. package/features/contentEntry/ContentEntriesFeature.js +4 -0
  4. package/features/contentEntry/ContentEntriesFeature.js.map +1 -1
  5. package/features/contentEntry/CreateEntry/CreateEntryRepository.d.ts +4 -2
  6. package/features/contentEntry/CreateEntry/CreateEntryRepository.js +8 -3
  7. package/features/contentEntry/CreateEntry/CreateEntryRepository.js.map +1 -1
  8. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js +1 -2
  9. package/features/contentEntry/CreateEntry/CreateEntryUseCase.js.map +1 -1
  10. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.d.ts +4 -2
  11. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.js +8 -3
  12. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromRepository.js.map +1 -1
  13. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  14. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.d.ts +4 -2
  15. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.js +8 -3
  16. package/features/contentEntry/DeleteEntry/DeleteEntryRepository.js.map +1 -1
  17. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.d.ts +3 -1
  18. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.js +8 -3
  19. package/features/contentEntry/DeleteEntry/MoveEntryToBinRepository.js.map +1 -1
  20. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.d.ts +3 -1
  21. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js +9 -3
  22. package/features/contentEntry/DeleteEntryRevision/DeleteEntryRevisionRepository.js.map +1 -1
  23. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.d.ts +4 -2
  24. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.js +7 -3
  25. package/features/contentEntry/DeleteMultipleEntries/DeleteMultipleEntriesRepository.js.map +1 -1
  26. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.d.ts +4 -4
  27. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.js +8 -11
  28. package/features/contentEntry/GetEntriesByIds/GetEntriesByIdsRepository.js.map +1 -1
  29. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.d.ts +4 -2
  30. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.js +7 -3
  31. package/features/contentEntry/GetLatestEntriesByIds/GetLatestEntriesByIdsRepository.js.map +1 -1
  32. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.d.ts +4 -2
  33. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.js +7 -3
  34. package/features/contentEntry/GetLatestRevisionByEntryId/GetLatestRevisionByEntryIdRepository.js.map +1 -1
  35. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.d.ts +4 -2
  36. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.js +7 -3
  37. package/features/contentEntry/GetPreviousRevisionByEntryId/GetPreviousRevisionByEntryIdRepository.js.map +1 -1
  38. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.d.ts +4 -2
  39. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.js +7 -3
  40. package/features/contentEntry/GetPublishedEntriesByIds/GetPublishedEntriesByIdsRepository.js.map +1 -1
  41. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.d.ts +4 -2
  42. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.js +7 -3
  43. package/features/contentEntry/GetPublishedRevisionByEntryId/GetPublishedRevisionByEntryIdRepository.js.map +1 -1
  44. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.d.ts +4 -2
  45. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.js +7 -3
  46. package/features/contentEntry/GetRevisionById/GetRevisionByIdRepository.js.map +1 -1
  47. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.d.ts +4 -2
  48. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.js +7 -3
  49. package/features/contentEntry/GetRevisionsByEntryId/GetRevisionsByEntryIdRepository.js.map +1 -1
  50. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.d.ts +4 -2
  51. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.js +7 -3
  52. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesRepository.js.map +1 -1
  53. package/features/contentEntry/ListEntries/ListEntriesRepository.d.ts +4 -2
  54. package/features/contentEntry/ListEntries/ListEntriesRepository.js +7 -3
  55. package/features/contentEntry/ListEntries/ListEntriesRepository.js.map +1 -1
  56. package/features/contentEntry/MoveEntry/MoveEntryRepository.d.ts +4 -2
  57. package/features/contentEntry/MoveEntry/MoveEntryRepository.js +7 -3
  58. package/features/contentEntry/MoveEntry/MoveEntryRepository.js.map +1 -1
  59. package/features/contentEntry/PublishEntry/PublishEntryRepository.d.ts +4 -2
  60. package/features/contentEntry/PublishEntry/PublishEntryRepository.js +8 -3
  61. package/features/contentEntry/PublishEntry/PublishEntryRepository.js.map +1 -1
  62. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  63. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.d.ts +4 -2
  64. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.js +8 -3
  65. package/features/contentEntry/RepublishEntry/RepublishEntryRepository.js.map +1 -1
  66. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.d.ts +4 -2
  67. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js +8 -3
  68. package/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js.map +1 -1
  69. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.d.ts +4 -2
  70. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js +8 -3
  71. package/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js.map +1 -1
  72. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.d.ts +4 -2
  73. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.js +8 -3
  74. package/features/contentEntry/UpdateEntry/UpdateEntryRepository.js.map +1 -1
  75. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.d.ts +14 -0
  76. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js +34 -0
  77. package/features/contentEntry/UpdateRevision/UpdateRevisionRepository.js.map +1 -0
  78. package/features/contentEntry/UpdateRevision/abstractions.d.ts +10 -0
  79. package/features/contentEntry/UpdateRevision/abstractions.js +5 -0
  80. package/features/contentEntry/UpdateRevision/abstractions.js.map +1 -0
  81. package/features/contentEntry/UpdateRevision/feature.d.ts +4 -0
  82. package/features/contentEntry/UpdateRevision/feature.js +11 -0
  83. package/features/contentEntry/UpdateRevision/feature.js.map +1 -0
  84. package/features/contentEntry/UpdateRevision/index.d.ts +1 -0
  85. package/features/contentEntry/UpdateRevision/index.js +1 -0
  86. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.d.ts +2 -2
  87. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js +2 -2
  88. package/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js.map +1 -1
  89. package/features/contentEntry/ensureItemIds.d.ts +13 -0
  90. package/features/contentEntry/ensureItemIds.js +22 -0
  91. package/features/contentEntry/ensureItemIds.js.map +1 -0
  92. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.d.ts +3 -1
  93. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js +8 -2
  94. package/features/contentEntry/entryDataFactories/CreateEntryDataFactory/CreateEntryDataFactory.js.map +1 -1
  95. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.d.ts +3 -1
  96. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +8 -2
  97. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
  98. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +3 -1
  99. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +8 -2
  100. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
  101. package/features/contentModel/CreateModel/CreateModelRepository.d.ts +4 -2
  102. package/features/contentModel/CreateModel/CreateModelRepository.js +8 -4
  103. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  104. package/features/contentModel/CreateModel/CreateModelUseCase.js +2 -2
  105. package/features/contentModel/CreateModel/CreateModelUseCase.js.map +1 -1
  106. package/features/contentModel/CreateModel/abstractions.d.ts +1 -1
  107. package/features/contentModel/CreateModel/abstractions.js.map +1 -1
  108. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.d.ts +4 -2
  109. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +8 -4
  110. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  111. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js +2 -2
  112. package/features/contentModel/CreateModelFrom/CreateModelFromUseCase.js.map +1 -1
  113. package/features/contentModel/CreateModelFrom/abstractions.d.ts +1 -1
  114. package/features/contentModel/CreateModelFrom/abstractions.js.map +1 -1
  115. package/features/contentModel/DeleteModel/DeleteModelRepository.d.ts +4 -2
  116. package/features/contentModel/DeleteModel/DeleteModelRepository.js +7 -3
  117. package/features/contentModel/DeleteModel/DeleteModelRepository.js.map +1 -1
  118. package/features/contentModel/UpdateModel/UpdateModelRepository.d.ts +4 -2
  119. package/features/contentModel/UpdateModel/UpdateModelRepository.js +8 -4
  120. package/features/contentModel/UpdateModel/UpdateModelRepository.js.map +1 -1
  121. package/features/contentModel/UpdateModel/UpdateModelUseCase.js +2 -2
  122. package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
  123. package/features/contentModel/UpdateModel/abstractions.d.ts +1 -1
  124. package/features/contentModel/UpdateModel/abstractions.js.map +1 -1
  125. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js +3 -2
  126. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js.map +1 -1
  127. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.d.ts +4 -2
  128. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js +8 -4
  129. package/features/contentModelGroup/CreateGroup/CreateGroupRepository.js.map +1 -1
  130. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.d.ts +1 -3
  131. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js +5 -7
  132. package/features/contentModelGroup/CreateGroup/CreateGroupUseCase.js.map +1 -1
  133. package/features/contentModelGroup/CreateGroup/abstractions.d.ts +1 -1
  134. package/features/contentModelGroup/CreateGroup/abstractions.js.map +1 -1
  135. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.d.ts +4 -2
  136. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.js +7 -3
  137. package/features/contentModelGroup/DeleteGroup/DeleteGroupRepository.js.map +1 -1
  138. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.d.ts +4 -2
  139. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.js +8 -4
  140. package/features/contentModelGroup/UpdateGroup/UpdateGroupRepository.js.map +1 -1
  141. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js +2 -2
  142. package/features/contentModelGroup/UpdateGroup/UpdateGroupUseCase.js.map +1 -1
  143. package/features/contentModelGroup/UpdateGroup/abstractions.d.ts +1 -1
  144. package/features/contentModelGroup/UpdateGroup/abstractions.js.map +1 -1
  145. package/features/graphql/fields/base/DynamicZoneToGraphQL.js +7 -1
  146. package/features/graphql/fields/base/DynamicZoneToGraphQL.js.map +1 -1
  147. package/features/graphql/fields/base/ObjectToGraphQL.js +6 -3
  148. package/features/graphql/fields/base/ObjectToGraphQL.js.map +1 -1
  149. package/features/graphql/fields/base/RefToGraphQL.js +17 -7
  150. package/features/graphql/fields/base/RefToGraphQL.js.map +1 -1
  151. package/features/modelBuilder/abstractions.d.ts +1 -2
  152. package/features/modelBuilder/abstractions.js.map +1 -1
  153. package/features/runtimeTenant/RuntimeTenant.d.ts +13 -0
  154. package/features/runtimeTenant/RuntimeTenant.js +22 -0
  155. package/features/runtimeTenant/RuntimeTenant.js.map +1 -0
  156. package/features/runtimeTenant/abstractions.d.ts +11 -0
  157. package/features/runtimeTenant/abstractions.js +5 -0
  158. package/features/runtimeTenant/abstractions.js.map +1 -0
  159. package/features/runtimeTenant/index.d.ts +2 -0
  160. package/features/runtimeTenant/index.js +2 -0
  161. package/features/sortMapper/SortMapper.js +2 -5
  162. package/features/sortMapper/SortMapper.js.map +1 -1
  163. package/features/storage/fields/ObjectStorageTransform.js +27 -7
  164. package/features/storage/fields/ObjectStorageTransform.js.map +1 -1
  165. package/features/validation/validators/PatternValidator.js +1 -1
  166. package/features/validation/validators/PatternValidator.js.map +1 -1
  167. package/features/whereMapper/WhereMapper.js +7 -5
  168. package/features/whereMapper/WhereMapper.js.map +1 -1
  169. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js +15 -5
  170. package/fieldConverters/CmsModelDynamicZoneFieldConverterPlugin.js.map +1 -1
  171. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js +8 -2
  172. package/fieldConverters/CmsModelObjectFieldConverterPlugin.js.map +1 -1
  173. package/package.json +18 -18
  174. package/types/types.d.ts +4 -0
  175. package/types/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/PublishEntry/PublishEntryUseCase.js","sources":["../../../../src/features/contentEntry/PublishEntry/PublishEntryUseCase.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 { PublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { PublishEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforePublishEvent,\n EntryAfterPublishEvent,\n EntryPublishErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { CreatePublishEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/index.js\";\n\nclass PublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: PublishEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private createPublishEntryDataFactory: CreatePublishEntryDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const result = await this.getRevisionById.execute<T>(model, id);\n\n if (result.isFail()) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n const originalEntry = result.value;\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n pw: \"p\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const latestResult = await this.getLatestRevision.execute<T>(model, {\n id: originalEntry.entryId\n });\n\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n\n const latestEntry = latestResult.value;\n\n const { entry } = await this.createPublishEntryDataFactory.create<T>(\n model,\n originalEntry,\n latestEntry\n );\n\n try {\n await this.eventPublisher.publish(\n new EntryBeforePublishEvent({\n entry,\n original: originalEntry,\n model\n })\n );\n\n const repositoryResult = await this.repository.execute(model, entry);\n\n if (repositoryResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryPublishErrorEvent({\n entry,\n original: originalEntry,\n model,\n error: repositoryResult.error\n })\n );\n return Result.fail(repositoryResult.error);\n }\n\n const publishedEntry = repositoryResult.value;\n\n await this.eventPublisher.publish(\n new EntryAfterPublishEvent({\n entry: publishedEntry,\n original: originalEntry,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryPublishErrorEvent({\n entry,\n original: originalEntry,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const PublishEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: PublishEntryUseCaseImpl,\n dependencies: [\n PublishEntryRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdUseCase,\n EventPublisher,\n CreatePublishEntryDataFactory\n ]\n});\n"],"names":["PublishEntryUseCaseImpl","repository","accessControl","getRevisionById","getLatestRevision","eventPublisher","createPublishEntryDataFactory","model","id","canAccess","Result","EntryNotAuthorizedError","result","EntryNotFoundError","originalEntry","canAccessEntry","latestResult","latestEntry","entry","EntryBeforePublishEvent","repositoryResult","EntryPublishErrorEvent","publishedEntry","EntryAfterPublishEvent","error","PublishEntryUseCase","createImplementation","UseCaseAbstraction","PublishEntryRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdUseCase","EventPublisher","CreatePublishEntryDataFactory"],"mappings":";;;;;;;;;AAkBA,MAAMA;IACF,YACYC,UAA4C,EAC5CC,aAAsC,EACtCC,eAAiD,EACjDC,iBAA8D,EAC9DC,cAAwC,EACxCC,6BAAsE,CAChF;aANUL,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;aACAC,cAAc,GAAdA;aACAC,6BAA6B,GAA7BA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,EAAU,EAC4C;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,IAAI;QAAI;QAC3E,IAAI,CAACE,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAMK,SAAS,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAIL,OAAOC;QAE5D,IAAII,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAAC,IAAIG,mBAAmBL;QAG9C,MAAMM,gBAAgBF,OAAO,KAAK;QAElC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DR;YACA,OAAOO;YACP,IAAI;QACR;QAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAMS,eAAe,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAIT,OAAO;YAChE,IAAIO,cAAc,OAAO;QAC7B;QAEA,IAAIE,aAAa,MAAM,IACnB,OAAON,OAAO,IAAI,CAACM,aAAa,KAAK;QAGzC,MAAMC,cAAcD,aAAa,KAAK;QAEtC,MAAM,EAAEE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAC7DX,OACAO,eACAG;QAGJ,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,wBAAwB;gBACxBD;gBACA,UAAUJ;gBACVP;YACJ;YAGJ,MAAMa,mBAAmB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACb,OAAOW;YAE9D,IAAIE,iBAAiB,MAAM,IAAI;gBAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,uBAAuB;oBACvBH;oBACA,UAAUJ;oBACVP;oBACA,OAAOa,iBAAiB,KAAK;gBACjC;gBAEJ,OAAOV,OAAO,IAAI,CAACU,iBAAiB,KAAK;YAC7C;YAEA,MAAME,iBAAiBF,iBAAiB,KAAK;YAE7C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,uBAAuB;gBACvB,OAAOD;gBACP,UAAUR;gBACVP;YACJ;YAGJ,OAAOG,OAAO,EAAE,CAACQ;QACrB,EAAE,OAAOM,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,uBAAuB;gBACvBH;gBACA,UAAUJ;gBACVP;gBACA,OAAOiB;YACX;YAEJ,OAAOd,OAAO,IAAI,CAACc;QACvB;IACJ;AACJ;AAEO,MAAMC,0CAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgB3B;IAChB,cAAc;QACV4B;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/PublishEntry/PublishEntryUseCase.js","sources":["../../../../src/features/contentEntry/PublishEntry/PublishEntryUseCase.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 { PublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { PublishEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforePublishEvent,\n EntryAfterPublishEvent,\n EntryPublishErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError, EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { CreatePublishEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/index.js\";\n\nclass PublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: PublishEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private createPublishEntryDataFactory: CreatePublishEntryDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const result = await this.getRevisionById.execute<T>(model, id);\n\n if (result.isFail()) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n const originalEntry = result.value;\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n pw: \"p\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const latestResult = await this.getLatestRevision.execute<T>(model, {\n id: originalEntry.entryId\n });\n\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n\n const latestEntry = latestResult.value;\n\n const { entry } = await this.createPublishEntryDataFactory.create<T>(\n model,\n originalEntry,\n latestEntry\n );\n\n try {\n await this.eventPublisher.publish(\n new EntryBeforePublishEvent({\n entry,\n original: originalEntry,\n model\n })\n );\n\n const repositoryResult = await this.repository.execute(model, entry);\n\n if (repositoryResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryPublishErrorEvent({\n entry,\n original: originalEntry,\n model,\n error: repositoryResult.error\n })\n );\n return Result.fail(repositoryResult.error);\n }\n\n const publishedEntry = repositoryResult.value;\n\n await this.eventPublisher.publish(\n new EntryAfterPublishEvent({\n entry: publishedEntry,\n original: originalEntry,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryPublishErrorEvent({\n entry,\n original: originalEntry,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const PublishEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: PublishEntryUseCaseImpl,\n dependencies: [\n PublishEntryRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdUseCase,\n EventPublisher,\n CreatePublishEntryDataFactory\n ]\n});\n"],"names":["PublishEntryUseCaseImpl","repository","accessControl","getRevisionById","getLatestRevision","eventPublisher","createPublishEntryDataFactory","model","id","canAccess","Result","EntryNotAuthorizedError","result","EntryNotFoundError","originalEntry","canAccessEntry","latestResult","latestEntry","entry","EntryBeforePublishEvent","repositoryResult","EntryPublishErrorEvent","publishedEntry","EntryAfterPublishEvent","error","PublishEntryUseCase","createImplementation","UseCaseAbstraction","PublishEntryRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdUseCase","EventPublisher","CreatePublishEntryDataFactory"],"mappings":";;;;;;;;;AAiBA,MAAMA;IACF,YACYC,UAA4C,EAC5CC,aAAsC,EACtCC,eAAiD,EACjDC,iBAA8D,EAC9DC,cAAwC,EACxCC,6BAAsE,CAChF;aANUL,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;aACAC,cAAc,GAAdA;aACAC,6BAA6B,GAA7BA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,EAAU,EAC4C;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,IAAI;QAAI;QAC3E,IAAI,CAACE,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAMK,SAAS,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAIL,OAAOC;QAE5D,IAAII,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAAC,IAAIG,mBAAmBL;QAG9C,MAAMM,gBAAgBF,OAAO,KAAK;QAElC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DR;YACA,OAAOO;YACP,IAAI;QACR;QAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAMS,eAAe,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAIT,OAAO;YAChE,IAAIO,cAAc,OAAO;QAC7B;QAEA,IAAIE,aAAa,MAAM,IACnB,OAAON,OAAO,IAAI,CAACM,aAAa,KAAK;QAGzC,MAAMC,cAAcD,aAAa,KAAK;QAEtC,MAAM,EAAEE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAC7DX,OACAO,eACAG;QAGJ,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,wBAAwB;gBACxBD;gBACA,UAAUJ;gBACVP;YACJ;YAGJ,MAAMa,mBAAmB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACb,OAAOW;YAE9D,IAAIE,iBAAiB,MAAM,IAAI;gBAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,uBAAuB;oBACvBH;oBACA,UAAUJ;oBACVP;oBACA,OAAOa,iBAAiB,KAAK;gBACjC;gBAEJ,OAAOV,OAAO,IAAI,CAACU,iBAAiB,KAAK;YAC7C;YAEA,MAAME,iBAAiBF,iBAAiB,KAAK;YAE7C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,uBAAuB;gBACvB,OAAOD;gBACP,UAAUR;gBACVP;YACJ;YAGJ,OAAOG,OAAO,EAAE,CAACQ;QACrB,EAAE,OAAOM,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,uBAAuB;gBACvBH;gBACA,UAAUJ;gBACVP;gBACA,OAAOiB;YACX;YAEJ,OAAOd,OAAO,IAAI,CAACc;QACvB;IACJ;AACJ;AAEO,MAAMC,0CAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgB3B;IAChB,cAAc;QACV4B;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -4,6 +4,7 @@ import { StorageOperations } from "../../../features/shared/abstractions.js";
4
4
  import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
5
5
  import { EntryFromStorageTransform } from "../../../legacy/abstractions.js";
6
6
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../types/index.js";
7
+ import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
7
8
  /**
8
9
  * RepublishEntryRepository - Handles storage operations for republishing entries.
9
10
  *
@@ -18,8 +19,9 @@ declare class RepublishEntryRepositoryImpl implements RepositoryAbstraction.Inte
18
19
  private entryToStorageTransform;
19
20
  private entryFromStorageTransform;
20
21
  private storageOperations;
21
- constructor(entryToStorageTransform: EntryToStorageTransform.Interface, entryFromStorageTransform: EntryFromStorageTransform.Interface, storageOperations: StorageOperations.Interface);
22
- execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, entry: CmsEntry<T>): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>>;
22
+ private runtimeTenant;
23
+ constructor(entryToStorageTransform: EntryToStorageTransform.Interface, entryFromStorageTransform: EntryFromStorageTransform.Interface, storageOperations: StorageOperations.Interface, runtimeTenant: RuntimeTenant.Interface);
24
+ execute<T extends CmsEntryValues = CmsEntryValues>(initialModel: CmsModel, initialEntry: CmsEntry<T>): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>>;
23
25
  }
24
26
  export declare const RepublishEntryRepository: import("@webiny/di").Implementation<typeof RepublishEntryRepositoryImpl>;
25
27
  export {};
@@ -3,13 +3,17 @@ import { RepublishEntryRepository } from "./abstractions.js";
3
3
  import { StorageOperations } from "../../shared/abstractions.js";
4
4
  import { EntryFromStorageTransform, EntryToStorageTransform } from "../../../legacy/abstractions.js";
5
5
  import { EntryPersistenceError } from "../../../domain/contentEntry/errors.js";
6
+ import { RuntimeTenant } from "../../runtimeTenant/abstractions.js";
6
7
  class RepublishEntryRepositoryImpl {
7
- constructor(entryToStorageTransform, entryFromStorageTransform, storageOperations){
8
+ constructor(entryToStorageTransform, entryFromStorageTransform, storageOperations, runtimeTenant){
8
9
  this.entryToStorageTransform = entryToStorageTransform;
9
10
  this.entryFromStorageTransform = entryFromStorageTransform;
10
11
  this.storageOperations = storageOperations;
12
+ this.runtimeTenant = runtimeTenant;
11
13
  }
12
- async execute(model, entry) {
14
+ async execute(initialModel, initialEntry) {
15
+ const model = this.runtimeTenant.assign(initialModel);
16
+ const entry = this.runtimeTenant.assign(initialEntry);
13
17
  try {
14
18
  const storageEntry = await this.entryToStorageTransform(model, entry);
15
19
  await this.storageOperations.entries.update(model, {
@@ -33,7 +37,8 @@ const RepublishEntryRepository_RepublishEntryRepository = createImplementation({
33
37
  dependencies: [
34
38
  EntryToStorageTransform,
35
39
  EntryFromStorageTransform,
36
- StorageOperations
40
+ StorageOperations,
41
+ RuntimeTenant
37
42
  ]
38
43
  });
39
44
  export { RepublishEntryRepository_RepublishEntryRepository as RepublishEntryRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/RepublishEntry/RepublishEntryRepository.js","sources":["../../../../src/features/contentEntry/RepublishEntry/RepublishEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { RepublishEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryToStorageTransform } from \"~/legacy/abstractions.js\";\nimport { EntryFromStorageTransform } from \"~/legacy/abstractions.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * RepublishEntryRepository - Handles storage operations for republishing entries.\n *\n * Responsibilities:\n * - Transform entry to storage format\n * - Update the entry in storage\n * - Publish the entry in storage\n * - Transform result back from storage format\n * - Handle storage errors\n */\nclass RepublishEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private entryFromStorageTransform: EntryFromStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>> {\n try {\n // Transform entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // First update the entry\n await this.storageOperations.entries.update(model, {\n entry,\n storageEntry\n });\n\n // Then publish it\n const result = await this.storageOperations.entries.publish<T>(model, {\n entry,\n storageEntry\n });\n\n // Transform result back from storage format\n const transformedEntry = await this.entryFromStorageTransform<T>(model, result);\n\n return Result.ok(transformedEntry);\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const RepublishEntryRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: RepublishEntryRepositoryImpl,\n dependencies: [EntryToStorageTransform, EntryFromStorageTransform, StorageOperations]\n});\n"],"names":["RepublishEntryRepositoryImpl","entryToStorageTransform","entryFromStorageTransform","storageOperations","model","entry","storageEntry","result","transformedEntry","Result","error","EntryPersistenceError","RepublishEntryRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","EntryFromStorageTransform","StorageOperations"],"mappings":";;;;;AAmBA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,yBAA8D,EAC9DC,iBAA8C,CACxD;aAHUF,uBAAuB,GAAvBA;aACAC,yBAAyB,GAAzBA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAa,QACTC,KAAe,EACfC,KAAkB,EACuC;QACzD,IAAI;YAEA,MAAMC,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAACD,OAAO;gBAC/CC;gBACAC;YACJ;YAGA,MAAMC,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAIH,OAAO;gBAClEC;gBACAC;YACJ;YAGA,MAAME,mBAAmB,MAAM,IAAI,CAAC,yBAAyB,CAAIJ,OAAOG;YAExE,OAAOE,OAAO,EAAE,CAACD;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,oDAA2BC,qBAAqB;IACzD,aAAaC;IACb,gBAAgBd;IAChB,cAAc;QAACe;QAAyBC;QAA2BC;KAAkB;AACzF"}
1
+ {"version":3,"file":"features/contentEntry/RepublishEntry/RepublishEntryRepository.js","sources":["../../../../src/features/contentEntry/RepublishEntry/RepublishEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { RepublishEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryToStorageTransform } from \"~/legacy/abstractions.js\";\nimport { EntryFromStorageTransform } from \"~/legacy/abstractions.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\nimport { RuntimeTenant } from \"~/features/runtimeTenant/abstractions.js\";\n\n/**\n * RepublishEntryRepository - Handles storage operations for republishing entries.\n *\n * Responsibilities:\n * - Transform entry to storage format\n * - Update the entry in storage\n * - Publish the entry in storage\n * - Transform result back from storage format\n * - Handle storage errors\n */\nclass RepublishEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private entryFromStorageTransform: EntryFromStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface,\n private runtimeTenant: RuntimeTenant.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n initialModel: CmsModel,\n initialEntry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>> {\n const model = this.runtimeTenant.assign(initialModel);\n const entry = this.runtimeTenant.assign(initialEntry);\n\n try {\n // Transform entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // First update the entry\n await this.storageOperations.entries.update(model, {\n entry,\n storageEntry\n });\n\n // Then publish it\n const result = await this.storageOperations.entries.publish<T>(model, {\n entry,\n storageEntry\n });\n\n // Transform result back from storage format\n const transformedEntry = await this.entryFromStorageTransform<T>(model, result);\n\n return Result.ok(transformedEntry);\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const RepublishEntryRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: RepublishEntryRepositoryImpl,\n dependencies: [\n EntryToStorageTransform,\n EntryFromStorageTransform,\n StorageOperations,\n RuntimeTenant\n ]\n});\n"],"names":["RepublishEntryRepositoryImpl","entryToStorageTransform","entryFromStorageTransform","storageOperations","runtimeTenant","initialModel","initialEntry","model","entry","storageEntry","result","transformedEntry","Result","error","EntryPersistenceError","RepublishEntryRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","EntryFromStorageTransform","StorageOperations","RuntimeTenant"],"mappings":";;;;;;AAoBA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,yBAA8D,EAC9DC,iBAA8C,EAC9CC,aAAsC,CAChD;aAJUH,uBAAuB,GAAvBA;aACAC,yBAAyB,GAAzBA;aACAC,iBAAiB,GAAjBA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAa,QACTC,YAAsB,EACtBC,YAAyB,EACgC;QACzD,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QACxC,MAAMG,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QAExC,IAAI;YAEA,MAAMG,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAACD,OAAO;gBAC/CC;gBACAC;YACJ;YAGA,MAAMC,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAIH,OAAO;gBAClEC;gBACAC;YACJ;YAGA,MAAME,mBAAmB,MAAM,IAAI,CAAC,yBAAyB,CAAIJ,OAAOG;YAExE,OAAOE,OAAO,EAAE,CAACD;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,oDAA2BC,qBAAqB;IACzD,aAAaC;IACb,gBAAgBjB;IAChB,cAAc;QACVkB;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -3,6 +3,7 @@ import { RestoreEntryFromBinRepository as RepositoryAbstraction } from "./abstra
3
3
  import { StorageOperations } from "../../../features/shared/abstractions.js";
4
4
  import { EntryFromStorageTransform, EntryToStorageTransform } from "../../../legacy/abstractions.js";
5
5
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../types/index.js";
6
+ import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
6
7
  /**
7
8
  * RestoreEntryFromBinRepository - Handles storage operations for restoring entries from bin.
8
9
  *
@@ -16,8 +17,9 @@ declare class RestoreEntryFromBinRepositoryImpl implements RepositoryAbstraction
16
17
  private entryToStorageTransform;
17
18
  private entryFromStorageTransform;
18
19
  private storageOperations;
19
- constructor(entryToStorageTransform: EntryToStorageTransform.Interface, entryFromStorageTransform: EntryFromStorageTransform.Interface, storageOperations: StorageOperations.Interface);
20
- execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, entry: CmsEntry<T>): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>>;
20
+ private runtimeTenant;
21
+ constructor(entryToStorageTransform: EntryToStorageTransform.Interface, entryFromStorageTransform: EntryFromStorageTransform.Interface, storageOperations: StorageOperations.Interface, runtimeTenant: RuntimeTenant.Interface);
22
+ execute<T extends CmsEntryValues = CmsEntryValues>(initialModel: CmsModel, initialEntry: CmsEntry<T>): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>>;
21
23
  }
22
24
  export declare const RestoreEntryFromBinRepository: import("@webiny/di").Implementation<typeof RestoreEntryFromBinRepositoryImpl>;
23
25
  export {};
@@ -3,13 +3,17 @@ import { RestoreEntryFromBinRepository } from "./abstractions.js";
3
3
  import { StorageOperations } from "../../shared/abstractions.js";
4
4
  import { EntryFromStorageTransform, EntryToStorageTransform } from "../../../legacy/abstractions.js";
5
5
  import { EntryPersistenceError } from "../../../domain/contentEntry/errors.js";
6
+ import { RuntimeTenant } from "../../runtimeTenant/abstractions.js";
6
7
  class RestoreEntryFromBinRepositoryImpl {
7
- constructor(entryToStorageTransform, entryFromStorageTransform, storageOperations){
8
+ constructor(entryToStorageTransform, entryFromStorageTransform, storageOperations, runtimeTenant){
8
9
  this.entryToStorageTransform = entryToStorageTransform;
9
10
  this.entryFromStorageTransform = entryFromStorageTransform;
10
11
  this.storageOperations = storageOperations;
12
+ this.runtimeTenant = runtimeTenant;
11
13
  }
12
- async execute(model, entry) {
14
+ async execute(initialModel, initialEntry) {
15
+ const model = this.runtimeTenant.assign(initialModel);
16
+ const entry = this.runtimeTenant.assign(initialEntry);
13
17
  try {
14
18
  const storageEntry = await this.entryToStorageTransform(model, entry);
15
19
  const result = await this.storageOperations.entries.restoreFromBin(model, {
@@ -29,7 +33,8 @@ const RestoreEntryFromBinRepository_RestoreEntryFromBinRepository = createImplem
29
33
  dependencies: [
30
34
  EntryToStorageTransform,
31
35
  EntryFromStorageTransform,
32
- StorageOperations
36
+ StorageOperations,
37
+ RuntimeTenant
33
38
  ]
34
39
  });
35
40
  export { RestoreEntryFromBinRepository_RestoreEntryFromBinRepository as RestoreEntryFromBinRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js","sources":["../../../../src/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { RestoreEntryFromBinRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryFromStorageTransform, EntryToStorageTransform } from \"~/legacy/abstractions.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\n\n/**\n * RestoreEntryFromBinRepository - Handles storage operations for restoring entries from bin.\n *\n * Responsibilities:\n * - Transform entry to storage format\n * - Call storage operation to restore entry\n * - Transform result back from storage format\n * - Handle storage errors\n */\nclass RestoreEntryFromBinRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private entryFromStorageTransform: EntryFromStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>> {\n try {\n // Transform entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // Call storage operation\n const result = await this.storageOperations.entries.restoreFromBin<T>(model, {\n entry,\n storageEntry\n });\n\n // Transform result back from storage format\n const transformedEntry = await this.entryFromStorageTransform<T>(model, result);\n\n return Result.ok(transformedEntry);\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const RestoreEntryFromBinRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: RestoreEntryFromBinRepositoryImpl,\n dependencies: [EntryToStorageTransform, EntryFromStorageTransform, StorageOperations]\n});\n"],"names":["RestoreEntryFromBinRepositoryImpl","entryToStorageTransform","entryFromStorageTransform","storageOperations","model","entry","storageEntry","result","transformedEntry","Result","error","EntryPersistenceError","RestoreEntryFromBinRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","EntryFromStorageTransform","StorageOperations"],"mappings":";;;;;AAgBA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,yBAA8D,EAC9DC,iBAA8C,CACxD;aAHUF,uBAAuB,GAAvBA;aACAC,yBAAyB,GAAzBA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAa,QACTC,KAAe,EACfC,KAAkB,EACuC;QACzD,IAAI;YAEA,MAAMC,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAME,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAIH,OAAO;gBACzEC;gBACAC;YACJ;YAGA,MAAME,mBAAmB,MAAM,IAAI,CAAC,yBAAyB,CAAIJ,OAAOG;YAExE,OAAOE,OAAO,EAAE,CAACD;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,8DAAgCC,qBAAqB;IAC9D,aAAaC;IACb,gBAAgBd;IAChB,cAAc;QAACe;QAAyBC;QAA2BC;KAAkB;AACzF"}
1
+ {"version":3,"file":"features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.js","sources":["../../../../src/features/contentEntry/RestoreEntryFromBin/RestoreEntryFromBinRepository.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { RestoreEntryFromBinRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryFromStorageTransform, EntryToStorageTransform } from \"~/legacy/abstractions.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\nimport { RuntimeTenant } from \"~/features/runtimeTenant/abstractions.js\";\n\n/**\n * RestoreEntryFromBinRepository - Handles storage operations for restoring entries from bin.\n *\n * Responsibilities:\n * - Transform entry to storage format\n * - Call storage operation to restore entry\n * - Transform result back from storage format\n * - Handle storage errors\n */\nclass RestoreEntryFromBinRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private entryFromStorageTransform: EntryFromStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface,\n private runtimeTenant: RuntimeTenant.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n initialModel: CmsModel,\n initialEntry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>> {\n const model = this.runtimeTenant.assign(initialModel);\n const entry = this.runtimeTenant.assign(initialEntry);\n\n try {\n // Transform entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // Call storage operation\n const result = await this.storageOperations.entries.restoreFromBin<T>(model, {\n entry,\n storageEntry\n });\n\n // Transform result back from storage format\n const transformedEntry = await this.entryFromStorageTransform<T>(model, result);\n\n return Result.ok(transformedEntry);\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const RestoreEntryFromBinRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: RestoreEntryFromBinRepositoryImpl,\n dependencies: [\n EntryToStorageTransform,\n EntryFromStorageTransform,\n StorageOperations,\n RuntimeTenant\n ]\n});\n"],"names":["RestoreEntryFromBinRepositoryImpl","entryToStorageTransform","entryFromStorageTransform","storageOperations","runtimeTenant","initialModel","initialEntry","model","entry","storageEntry","result","transformedEntry","Result","error","EntryPersistenceError","RestoreEntryFromBinRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","EntryFromStorageTransform","StorageOperations","RuntimeTenant"],"mappings":";;;;;;AAiBA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,yBAA8D,EAC9DC,iBAA8C,EAC9CC,aAAsC,CAChD;aAJUH,uBAAuB,GAAvBA;aACAC,yBAAyB,GAAzBA;aACAC,iBAAiB,GAAjBA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAa,QACTC,YAAsB,EACtBC,YAAyB,EACgC;QACzD,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QACxC,MAAMG,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QAExC,IAAI;YAEA,MAAMG,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAME,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAIH,OAAO;gBACzEC;gBACAC;YACJ;YAGA,MAAME,mBAAmB,MAAM,IAAI,CAAC,yBAAyB,CAAIJ,OAAOG;YAExE,OAAOE,OAAO,EAAE,CAACD;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,8DAAgCC,qBAAqB;IAC9D,aAAaC;IACb,gBAAgBjB;IAChB,cAAc;QACVkB;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -4,6 +4,7 @@ import type { CmsEntry, CmsEntryValues } from "../../../types/index.js";
4
4
  import type { CmsModel } from "../../../types/index.js";
5
5
  import { StorageOperations } from "../../../features/shared/abstractions.js";
6
6
  import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
7
+ import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
7
8
  /**
8
9
  * UnpublishEntryRepository - Handles persistence of entry unpublish.
9
10
  * Transforms domain entry to storage format and persists unpublish operation.
@@ -11,8 +12,9 @@ import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
11
12
  declare class UnpublishEntryRepositoryImpl implements RepositoryAbstraction.Interface {
12
13
  private entryToStorageTransform;
13
14
  private storageOperations;
14
- constructor(entryToStorageTransform: EntryToStorageTransform.Interface, storageOperations: StorageOperations.Interface);
15
- execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, entry: CmsEntry<T>): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>>;
15
+ private runtimeTenant;
16
+ constructor(entryToStorageTransform: EntryToStorageTransform.Interface, storageOperations: StorageOperations.Interface, runtimeTenant: RuntimeTenant.Interface);
17
+ execute<T extends CmsEntryValues = CmsEntryValues>(initialModel: CmsModel, initialEntry: CmsEntry<T>): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>>;
16
18
  }
17
19
  export declare const UnpublishEntryRepository: import("@webiny/di").Implementation<typeof UnpublishEntryRepositoryImpl>;
18
20
  export {};
@@ -3,12 +3,16 @@ import { UnpublishEntryRepository } from "./abstractions.js";
3
3
  import { EntryPersistenceError } from "../../../domain/contentEntry/errors.js";
4
4
  import { StorageOperations } from "../../shared/abstractions.js";
5
5
  import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
6
+ import { RuntimeTenant } from "../../runtimeTenant/abstractions.js";
6
7
  class UnpublishEntryRepositoryImpl {
7
- constructor(entryToStorageTransform, storageOperations){
8
+ constructor(entryToStorageTransform, storageOperations, runtimeTenant){
8
9
  this.entryToStorageTransform = entryToStorageTransform;
9
10
  this.storageOperations = storageOperations;
11
+ this.runtimeTenant = runtimeTenant;
10
12
  }
11
- async execute(model, entry) {
13
+ async execute(initialModel, initialEntry) {
14
+ const model = this.runtimeTenant.assign(initialModel);
15
+ const entry = this.runtimeTenant.assign(initialEntry);
12
16
  try {
13
17
  const storageEntry = await this.entryToStorageTransform(model, entry);
14
18
  const result = await this.storageOperations.entries.unpublish(model, {
@@ -26,7 +30,8 @@ const UnpublishEntryRepository_UnpublishEntryRepository = createImplementation({
26
30
  implementation: UnpublishEntryRepositoryImpl,
27
31
  dependencies: [
28
32
  EntryToStorageTransform,
29
- StorageOperations
33
+ StorageOperations,
34
+ RuntimeTenant
30
35
  ]
31
36
  });
32
37
  export { UnpublishEntryRepository_UnpublishEntryRepository as UnpublishEntryRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js","sources":["../../../../src/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { UnpublishEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\nimport type { CmsEntry, CmsEntryValues } from \"~/types/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryToStorageTransform } from \"~/legacy/abstractions.js\";\n\n/**\n * UnpublishEntryRepository - Handles persistence of entry unpublish.\n * Transforms domain entry to storage format and persists unpublish operation.\n */\nclass UnpublishEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>> {\n try {\n // Transform domain entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // Persist unpublish to storage\n const result = await this.storageOperations.entries.unpublish<T>(model, {\n entry,\n storageEntry\n });\n\n return Result.ok(result);\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const UnpublishEntryRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: UnpublishEntryRepositoryImpl,\n dependencies: [EntryToStorageTransform, StorageOperations]\n});\n"],"names":["UnpublishEntryRepositoryImpl","entryToStorageTransform","storageOperations","model","entry","storageEntry","result","Result","error","EntryPersistenceError","UnpublishEntryRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","StorageOperations"],"mappings":";;;;;AAaA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,iBAA8C,CACxD;aAFUD,uBAAuB,GAAvBA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAa,QACTC,KAAe,EACfC,KAAkB,EACuC;QACzD,IAAI;YAEA,MAAMC,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAME,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAIH,OAAO;gBACpEC;gBACAC;YACJ;YAEA,OAAOE,OAAO,EAAE,CAACD;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,oDAA2BC,qBAAqB;IACzD,aAAaC;IACb,gBAAgBZ;IAChB,cAAc;QAACa;QAAyBC;KAAkB;AAC9D"}
1
+ {"version":3,"file":"features/contentEntry/UnpublishEntry/UnpublishEntryRepository.js","sources":["../../../../src/features/contentEntry/UnpublishEntry/UnpublishEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { UnpublishEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\nimport type { CmsEntry, CmsEntryValues } from \"~/types/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryToStorageTransform } from \"~/legacy/abstractions.js\";\nimport { RuntimeTenant } from \"~/features/runtimeTenant/abstractions.js\";\n\n/**\n * UnpublishEntryRepository - Handles persistence of entry unpublish.\n * Transforms domain entry to storage format and persists unpublish operation.\n */\nclass UnpublishEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface,\n private runtimeTenant: RuntimeTenant.Interface\n ) {}\n\n public async execute<T extends CmsEntryValues = CmsEntryValues>(\n initialModel: CmsModel,\n initialEntry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryAbstraction.Error>> {\n const model = this.runtimeTenant.assign(initialModel);\n const entry = this.runtimeTenant.assign(initialEntry);\n\n try {\n // Transform domain entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // Persist unpublish to storage\n const result = await this.storageOperations.entries.unpublish<T>(model, {\n entry,\n storageEntry\n });\n\n return Result.ok(result);\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const UnpublishEntryRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: UnpublishEntryRepositoryImpl,\n dependencies: [EntryToStorageTransform, StorageOperations, RuntimeTenant]\n});\n"],"names":["UnpublishEntryRepositoryImpl","entryToStorageTransform","storageOperations","runtimeTenant","initialModel","initialEntry","model","entry","storageEntry","result","Result","error","EntryPersistenceError","UnpublishEntryRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","StorageOperations","RuntimeTenant"],"mappings":";;;;;;AAcA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,iBAA8C,EAC9CC,aAAsC,CAChD;aAHUF,uBAAuB,GAAvBA;aACAC,iBAAiB,GAAjBA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAa,QACTC,YAAsB,EACtBC,YAAyB,EACgC;QACzD,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QACxC,MAAMG,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QAExC,IAAI;YAEA,MAAMG,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAME,SAAS,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAIH,OAAO;gBACpEC;gBACAC;YACJ;YAEA,OAAOE,OAAO,EAAE,CAACD;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,oDAA2BC,qBAAqB;IACzD,aAAaC;IACb,gBAAgBf;IAChB,cAAc;QAACgB;QAAyBC;QAAmBC;KAAc;AAC7E"}
@@ -3,6 +3,7 @@ import { UpdateEntryRepository as RepositoryAbstraction } from "./abstractions.j
3
3
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../types/index.js";
4
4
  import { StorageOperations } from "../../../features/shared/abstractions.js";
5
5
  import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
6
+ import { RuntimeTenant } from "../../../features/runtimeTenant/abstractions.js";
6
7
  /**
7
8
  * UpdateEntryRepository - Handles persistence of entry updates.
8
9
  * Transforms domain entry to storage format and persists changes.
@@ -10,8 +11,9 @@ import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
10
11
  declare class UpdateEntryRepositoryImpl implements RepositoryAbstraction.Interface {
11
12
  private entryToStorageTransform;
12
13
  private storageOperations;
13
- constructor(entryToStorageTransform: EntryToStorageTransform.Interface, storageOperations: StorageOperations.Interface);
14
- execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, entry: CmsEntry<T>): Promise<Result<void, RepositoryAbstraction.Error>>;
14
+ private readonly runtimeTenant;
15
+ constructor(entryToStorageTransform: EntryToStorageTransform.Interface, storageOperations: StorageOperations.Interface, runtimeTenant: RuntimeTenant.Interface);
16
+ execute<T extends CmsEntryValues = CmsEntryValues>(initialModel: CmsModel, initialEntry: CmsEntry<T>): Promise<Result<void, RepositoryAbstraction.Error>>;
15
17
  }
16
18
  export declare const UpdateEntryRepository: import("@webiny/di").Implementation<typeof UpdateEntryRepositoryImpl>;
17
19
  export {};
@@ -3,12 +3,16 @@ import { UpdateEntryRepository } from "./abstractions.js";
3
3
  import { EntryPersistenceError } from "../../../domain/contentEntry/errors.js";
4
4
  import { StorageOperations } from "../../shared/abstractions.js";
5
5
  import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
6
+ import { RuntimeTenant } from "../../runtimeTenant/abstractions.js";
6
7
  class UpdateEntryRepositoryImpl {
7
- constructor(entryToStorageTransform, storageOperations){
8
+ constructor(entryToStorageTransform, storageOperations, runtimeTenant){
8
9
  this.entryToStorageTransform = entryToStorageTransform;
9
10
  this.storageOperations = storageOperations;
11
+ this.runtimeTenant = runtimeTenant;
10
12
  }
11
- async execute(model, entry) {
13
+ async execute(initialModel, initialEntry) {
14
+ const model = this.runtimeTenant.assign(initialModel);
15
+ const entry = this.runtimeTenant.assign(initialEntry);
12
16
  try {
13
17
  const storageEntry = await this.entryToStorageTransform(model, entry);
14
18
  await this.storageOperations.entries.update(model, {
@@ -26,7 +30,8 @@ const UpdateEntryRepository_UpdateEntryRepository = createImplementation({
26
30
  implementation: UpdateEntryRepositoryImpl,
27
31
  dependencies: [
28
32
  EntryToStorageTransform,
29
- StorageOperations
33
+ StorageOperations,
34
+ RuntimeTenant
30
35
  ]
31
36
  });
32
37
  export { UpdateEntryRepository_UpdateEntryRepository as UpdateEntryRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/UpdateEntry/UpdateEntryRepository.js","sources":["../../../../src/features/contentEntry/UpdateEntry/UpdateEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { UpdateEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryToStorageTransform } from \"~/legacy/abstractions.js\";\n\n/**\n * UpdateEntryRepository - Handles persistence of entry updates.\n * Transforms domain entry to storage format and persists changes.\n */\nclass UpdateEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entry: CmsEntry<T>\n ): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n // Transform domain entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // Persist to storage\n await this.storageOperations.entries.update<T>(model, {\n entry,\n storageEntry\n });\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const UpdateEntryRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: UpdateEntryRepositoryImpl,\n dependencies: [EntryToStorageTransform, StorageOperations]\n});\n"],"names":["UpdateEntryRepositoryImpl","entryToStorageTransform","storageOperations","model","entry","storageEntry","Result","error","EntryPersistenceError","UpdateEntryRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","StorageOperations"],"mappings":";;;;;AAYA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,iBAA8C,CACxD;aAFUD,uBAAuB,GAAvBA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,KAAkB,EACgC;QAClD,IAAI;YAEA,MAAMC,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAID,OAAO;gBAClDC;gBACAC;YACJ;YAEA,OAAOC,OAAO,EAAE;QACpB,EAAE,OAAOC,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgBX;IAChB,cAAc;QAACY;QAAyBC;KAAkB;AAC9D"}
1
+ {"version":3,"file":"features/contentEntry/UpdateEntry/UpdateEntryRepository.js","sources":["../../../../src/features/contentEntry/UpdateEntry/UpdateEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { UpdateEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryToStorageTransform } from \"~/legacy/abstractions.js\";\nimport { RuntimeTenant } from \"~/features/runtimeTenant/abstractions.js\";\n\n/**\n * UpdateEntryRepository - Handles persistence of entry updates.\n * Transforms domain entry to storage format and persists changes.\n */\nclass UpdateEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface,\n private readonly runtimeTenant: RuntimeTenant.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n initialModel: CmsModel,\n initialEntry: CmsEntry<T>\n ): Promise<Result<void, RepositoryAbstraction.Error>> {\n const model = this.runtimeTenant.assign(initialModel);\n const entry = this.runtimeTenant.assign(initialEntry);\n\n try {\n // Transform domain entry to storage format\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n // Persist to storage\n await this.storageOperations.entries.update<T>(model, {\n entry,\n storageEntry\n });\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const UpdateEntryRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: UpdateEntryRepositoryImpl,\n dependencies: [EntryToStorageTransform, StorageOperations, RuntimeTenant]\n});\n"],"names":["UpdateEntryRepositoryImpl","entryToStorageTransform","storageOperations","runtimeTenant","initialModel","initialEntry","model","entry","storageEntry","Result","error","EntryPersistenceError","UpdateEntryRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","StorageOperations","RuntimeTenant"],"mappings":";;;;;;AAaA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,iBAA8C,EACrCC,aAAsC,CACzD;aAHUF,uBAAuB,GAAvBA;aACAC,iBAAiB,GAAjBA;aACSC,aAAa,GAAbA;IAClB;IAEH,MAAM,QACFC,YAAsB,EACtBC,YAAyB,EACyB;QAClD,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QACxC,MAAMG,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAACF;QAExC,IAAI;YAEA,MAAMG,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAGlE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAID,OAAO;gBAClDC;gBACAC;YACJ;YAEA,OAAOC,OAAO,EAAE;QACpB,EAAE,OAAOC,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgBd;IAChB,cAAc;QAACe;QAAyBC;QAAmBC;KAAc;AAC7E"}
@@ -0,0 +1,14 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { UpdateRevisionRepository as RepositoryAbstraction } from "./abstractions.js";
3
+ import { EntryPersistenceError } from "../../../domain/contentEntry/errors.js";
4
+ import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../types/index.js";
5
+ import { StorageOperations } from "../../../features/shared/abstractions.js";
6
+ import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
7
+ declare class UpdateRevisionRepositoryImpl implements RepositoryAbstraction.Interface {
8
+ private entryToStorageTransform;
9
+ private storageOperations;
10
+ constructor(entryToStorageTransform: EntryToStorageTransform.Interface, storageOperations: StorageOperations.Interface);
11
+ execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, entry: CmsEntry<T>): Promise<Result<void, EntryPersistenceError>>;
12
+ }
13
+ export declare const UpdateRevisionRepository: import("@webiny/di").Implementation<typeof UpdateRevisionRepositoryImpl>;
14
+ export {};
@@ -0,0 +1,34 @@
1
+ import { Result, createImplementation } from "@webiny/feature/api";
2
+ import { UpdateRevisionRepository } from "./abstractions.js";
3
+ import { EntryPersistenceError } from "../../../domain/contentEntry/errors.js";
4
+ import { StorageOperations } from "../../shared/abstractions.js";
5
+ import { EntryToStorageTransform } from "../../../legacy/abstractions.js";
6
+ class UpdateRevisionRepositoryImpl {
7
+ constructor(entryToStorageTransform, storageOperations){
8
+ this.entryToStorageTransform = entryToStorageTransform;
9
+ this.storageOperations = storageOperations;
10
+ }
11
+ async execute(model, entry) {
12
+ try {
13
+ const storageEntry = await this.entryToStorageTransform(model, entry);
14
+ await this.storageOperations.entries.updateRevision(model, {
15
+ entry,
16
+ storageEntry
17
+ });
18
+ return Result.ok();
19
+ } catch (error) {
20
+ return Result.fail(new EntryPersistenceError(error));
21
+ }
22
+ }
23
+ }
24
+ const UpdateRevisionRepository_UpdateRevisionRepository = createImplementation({
25
+ abstraction: UpdateRevisionRepository,
26
+ implementation: UpdateRevisionRepositoryImpl,
27
+ dependencies: [
28
+ EntryToStorageTransform,
29
+ StorageOperations
30
+ ]
31
+ });
32
+ export { UpdateRevisionRepository_UpdateRevisionRepository as UpdateRevisionRepository };
33
+
34
+ //# sourceMappingURL=UpdateRevisionRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentEntry/UpdateRevision/UpdateRevisionRepository.js","sources":["../../../../src/features/contentEntry/UpdateRevision/UpdateRevisionRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { UpdateRevisionRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { StorageOperations } from \"~/features/shared/abstractions.js\";\nimport { EntryToStorageTransform } from \"~/legacy/abstractions.js\";\n\nclass UpdateRevisionRepositoryImpl implements RepositoryAbstraction.Interface {\n public constructor(\n private entryToStorageTransform: EntryToStorageTransform.Interface,\n private storageOperations: StorageOperations.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entry: CmsEntry<T>\n ): Promise<Result<void, EntryPersistenceError>> {\n try {\n const storageEntry = await this.entryToStorageTransform<T>(model, entry);\n\n await this.storageOperations.entries.updateRevision<T>(model, {\n entry,\n storageEntry\n });\n\n return Result.ok();\n } catch (error) {\n return Result.fail(new EntryPersistenceError(error as Error));\n }\n }\n}\n\nexport const UpdateRevisionRepository = createImplementation({\n abstraction: RepositoryAbstraction,\n implementation: UpdateRevisionRepositoryImpl,\n dependencies: [EntryToStorageTransform, StorageOperations]\n});\n"],"names":["UpdateRevisionRepositoryImpl","entryToStorageTransform","storageOperations","model","entry","storageEntry","Result","error","EntryPersistenceError","UpdateRevisionRepository","createImplementation","RepositoryAbstraction","EntryToStorageTransform","StorageOperations"],"mappings":";;;;;AAQA,MAAMA;IACF,YACYC,uBAA0D,EAC1DC,iBAA8C,CACxD;aAFUD,uBAAuB,GAAvBA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,KAAkB,EAC0B;QAC5C,IAAI;YACA,MAAMC,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAIF,OAAOC;YAElE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,CAAID,OAAO;gBAC1DC;gBACAC;YACJ;YAEA,OAAOC,OAAO,EAAE;QACpB,EAAE,OAAOC,OAAO;YACZ,OAAOD,OAAO,IAAI,CAAC,IAAIE,sBAAsBD;QACjD;IACJ;AACJ;AAEO,MAAME,oDAA2BC,qBAAqB;IACzD,aAAaC;IACb,gBAAgBX;IAChB,cAAc;QAACY;QAAyBC;KAAkB;AAC9D"}
@@ -0,0 +1,10 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import type { CmsEntry, CmsModel } from "../../../types/index.js";
3
+ import type { EntryPersistenceError } from "../../../domain/contentEntry/errors.js";
4
+ export interface IUpdateRevisionRepository {
5
+ execute(model: CmsModel, entry: CmsEntry): Promise<Result<void, EntryPersistenceError>>;
6
+ }
7
+ export declare const UpdateRevisionRepository: import("@webiny/di").Abstraction<IUpdateRevisionRepository>;
8
+ export declare namespace UpdateRevisionRepository {
9
+ type Interface = IUpdateRevisionRepository;
10
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const UpdateRevisionRepository = createAbstraction("UpdateRevisionRepository");
3
+ export { UpdateRevisionRepository };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentEntry/UpdateRevision/abstractions.js","sources":["../../../../src/features/contentEntry/UpdateRevision/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { CmsEntry, CmsModel } from \"~/types/index.js\";\nimport type { EntryPersistenceError } from \"~/domain/contentEntry/errors.js\";\n\nexport interface IUpdateRevisionRepository {\n execute(model: CmsModel, entry: CmsEntry): Promise<Result<void, EntryPersistenceError>>;\n}\n\nexport const UpdateRevisionRepository = createAbstraction<IUpdateRevisionRepository>(\n \"UpdateRevisionRepository\"\n);\n\nexport namespace UpdateRevisionRepository {\n export type Interface = IUpdateRevisionRepository;\n}\n"],"names":["UpdateRevisionRepository","createAbstraction"],"mappings":";AAQO,MAAMA,2BAA2BC,kBACpC"}
@@ -0,0 +1,4 @@
1
+ export declare const UpdateRevisionFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { UpdateRevisionRepository } from "./UpdateRevisionRepository.js";
3
+ const UpdateRevisionFeature = createFeature({
4
+ name: "UpdateRevision",
5
+ register (container) {
6
+ container.register(UpdateRevisionRepository);
7
+ }
8
+ });
9
+ export { UpdateRevisionFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentEntry/UpdateRevision/feature.js","sources":["../../../../src/features/contentEntry/UpdateRevision/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { UpdateRevisionRepository } from \"./UpdateRevisionRepository.js\";\n\nexport const UpdateRevisionFeature = createFeature({\n name: \"UpdateRevision\",\n register(container) {\n container.register(UpdateRevisionRepository);\n }\n});\n"],"names":["UpdateRevisionFeature","createFeature","container","UpdateRevisionRepository"],"mappings":";;AAGO,MAAMA,wBAAwBC,cAAc;IAC/C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -0,0 +1 @@
1
+ export { UpdateRevisionRepository } from "./abstractions.js";
@@ -0,0 +1 @@
1
+ export { UpdateRevisionRepository } from "./abstractions.js";
@@ -3,14 +3,14 @@ import { UpdateRevisionDescriptionUseCase as UseCaseAbstraction } from "./abstra
3
3
  import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
4
4
  import { AccessControl } from "../../../features/shared/abstractions.js";
5
5
  import { GetRevisionByIdUseCase } from "../../../features/contentEntry/GetRevisionById/abstractions.js";
6
+ import { UpdateRevisionRepository } from "../../../features/contentEntry/UpdateRevision/abstractions.js";
6
7
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../types/index.js";
7
- import { UpdateEntryRepository } from "../UpdateEntry/index.js";
8
8
  declare class UpdateRevisionDescriptionUseCaseImpl implements UseCaseAbstraction.Interface {
9
9
  private eventPublisher;
10
10
  private repository;
11
11
  private accessControl;
12
12
  private getRevisionByIdUseCase;
13
- constructor(eventPublisher: EventPublisher.Interface, repository: UpdateEntryRepository.Interface, accessControl: AccessControl.Interface, getRevisionByIdUseCase: GetRevisionByIdUseCase.Interface);
13
+ constructor(eventPublisher: EventPublisher.Interface, repository: UpdateRevisionRepository.Interface, accessControl: AccessControl.Interface, getRevisionByIdUseCase: GetRevisionByIdUseCase.Interface);
14
14
  execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string, revisionDescription: string | undefined): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>>;
15
15
  }
16
16
  export declare const UpdateRevisionDescriptionUseCase: import("@webiny/di").Implementation<typeof UpdateRevisionDescriptionUseCaseImpl>;
@@ -4,8 +4,8 @@ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.j
4
4
  import { EntryAfterUpdateRevisionDescriptionEvent, EntryBeforeUpdateRevisionDescriptionEvent } from "./events.js";
5
5
  import { AccessControl } from "../../shared/abstractions.js";
6
6
  import { GetRevisionByIdUseCase } from "../GetRevisionById/abstractions.js";
7
+ import { UpdateRevisionRepository } from "../UpdateRevision/abstractions.js";
7
8
  import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
8
- import { UpdateEntryRepository } from "../UpdateEntry/index.js";
9
9
  class UpdateRevisionDescriptionUseCaseImpl {
10
10
  constructor(eventPublisher, repository, accessControl, getRevisionByIdUseCase){
11
11
  this.eventPublisher = eventPublisher;
@@ -58,7 +58,7 @@ const UpdateRevisionDescriptionUseCase_UpdateRevisionDescriptionUseCase = create
58
58
  implementation: UpdateRevisionDescriptionUseCaseImpl,
59
59
  dependencies: [
60
60
  EventPublisher,
61
- UpdateEntryRepository,
61
+ UpdateRevisionRepository,
62
62
  AccessControl,
63
63
  GetRevisionByIdUseCase
64
64
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js","sources":["../../../../src/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { UpdateRevisionDescriptionUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n EntryAfterUpdateRevisionDescriptionEvent,\n EntryBeforeUpdateRevisionDescriptionEvent\n} from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/abstractions.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { UpdateEntryRepository } from \"../UpdateEntry/index.js\";\n\nclass UpdateRevisionDescriptionUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: UpdateEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionByIdUseCase: GetRevisionByIdUseCase.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n revisionDescription: string | undefined\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n // Check initial access control\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 result = await this.getRevisionByIdUseCase.execute<T>(model, id);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n const originalEntry = result.value;\n\n const entry = {\n ...originalEntry,\n revisionDescription\n };\n\n // Apply access control on the updated entry\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 // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeUpdateRevisionDescriptionEvent({\n entry,\n original: originalEntry,\n revisionDescription,\n model\n })\n );\n\n // Persist updated entry\n const updateResult = await this.repository.execute(model, entry);\n if (updateResult.isFail()) {\n return Result.fail(updateResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterUpdateRevisionDescriptionEvent({\n entry,\n original: originalEntry,\n revisionDescription,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n // Handle errors from createUpdateEntryData or other operations\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const UpdateRevisionDescriptionUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UpdateRevisionDescriptionUseCaseImpl,\n dependencies: [EventPublisher, UpdateEntryRepository, AccessControl, GetRevisionByIdUseCase]\n});\n"],"names":["UpdateRevisionDescriptionUseCaseImpl","eventPublisher","repository","accessControl","getRevisionByIdUseCase","model","id","revisionDescription","canAccess","Result","EntryNotAuthorizedError","result","originalEntry","entry","canAccessEntry","EntryBeforeUpdateRevisionDescriptionEvent","updateResult","EntryAfterUpdateRevisionDescriptionEvent","error","UpdateRevisionDescriptionUseCase","createImplementation","UseCaseAbstraction","EventPublisher","UpdateEntryRepository","AccessControl","GetRevisionByIdUseCase"],"mappings":";;;;;;;;AAaA,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,MAAM,QACFC,KAAe,EACfC,EAAU,EACVC,mBAAuC,EACe;QAEtD,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,MAAMM,SAAS,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAIN,OAAOC;YAEnE,IAAIK,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAACE,OAAO,KAAK;YAGnC,MAAMC,gBAAgBD,OAAO,KAAK;YAElC,MAAME,QAAQ;gBACV,GAAGD,aAAa;gBAChBL;YACJ;YAGA,MAAMO,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC3DT;gBACAQ;gBACA,KAAK;YACT;YAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACL;YAIzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIU,0CAA0C;gBAC1CF;gBACA,UAAUD;gBACVL;gBACAF;YACJ;YAIJ,MAAMW,eAAe,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACX,OAAOQ;YAC1D,IAAIG,aAAa,MAAM,IACnB,OAAOP,OAAO,IAAI,CAACO,aAAa,KAAK;YAIzC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,yCAAyC;gBACzCJ;gBACA,UAAUD;gBACVL;gBACAF;YACJ;YAGJ,OAAOI,OAAO,EAAE,CAACI;QACrB,EAAE,OAAOK,OAAO;YAEZ,OAAOT,OAAO,IAAI,CAACS;QACvB;IACJ;AACJ;AAEO,MAAMC,oEAAmCC,qBAAqB;IACjE,aAAaC;IACb,gBAAgBrB;IAChB,cAAc;QAACsB;QAAgBC;QAAuBC;QAAeC;KAAuB;AAChG"}
1
+ {"version":3,"file":"features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.js","sources":["../../../../src/features/contentEntry/UpdateRevisionDescription/UpdateRevisionDescriptionUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { UpdateRevisionDescriptionUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n EntryAfterUpdateRevisionDescriptionEvent,\n EntryBeforeUpdateRevisionDescriptionEvent\n} from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/abstractions.js\";\nimport { UpdateRevisionRepository } from \"~/features/contentEntry/UpdateRevision/abstractions.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\n\nclass UpdateRevisionDescriptionUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: UpdateRevisionRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionByIdUseCase: GetRevisionByIdUseCase.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n revisionDescription: string | undefined\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 result = await this.getRevisionByIdUseCase.execute<T>(model, id);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n const originalEntry = result.value;\n\n const entry = {\n ...originalEntry,\n revisionDescription\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.fromModel(model));\n }\n\n await this.eventPublisher.publish(\n new EntryBeforeUpdateRevisionDescriptionEvent({\n entry,\n original: originalEntry,\n revisionDescription,\n model\n })\n );\n\n const updateResult = await this.repository.execute(model, entry);\n if (updateResult.isFail()) {\n return Result.fail(updateResult.error);\n }\n\n await this.eventPublisher.publish(\n new EntryAfterUpdateRevisionDescriptionEvent({\n entry,\n original: originalEntry,\n revisionDescription,\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 UpdateRevisionDescriptionUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UpdateRevisionDescriptionUseCaseImpl,\n dependencies: [EventPublisher, UpdateRevisionRepository, AccessControl, GetRevisionByIdUseCase]\n});\n"],"names":["UpdateRevisionDescriptionUseCaseImpl","eventPublisher","repository","accessControl","getRevisionByIdUseCase","model","id","revisionDescription","canAccess","Result","EntryNotAuthorizedError","result","originalEntry","entry","canAccessEntry","EntryBeforeUpdateRevisionDescriptionEvent","updateResult","EntryAfterUpdateRevisionDescriptionEvent","error","UpdateRevisionDescriptionUseCase","createImplementation","UseCaseAbstraction","EventPublisher","UpdateRevisionRepository","AccessControl","GetRevisionByIdUseCase"],"mappings":";;;;;;;;AAaA,MAAMA;IACF,YACYC,cAAwC,EACxCC,UAA8C,EAC9CC,aAAsC,EACtCC,sBAAwD,CAClE;aAJUH,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,sBAAsB,GAAtBA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,EAAU,EACVC,mBAAuC,EACe;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,MAAMM,SAAS,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAIN,OAAOC;YAEnE,IAAIK,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAACE,OAAO,KAAK;YAGnC,MAAMC,gBAAgBD,OAAO,KAAK;YAElC,MAAME,QAAQ;gBACV,GAAGD,aAAa;gBAChBL;YACJ;YAEA,MAAMO,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC3DT;gBACAQ;gBACA,KAAK;YACT;YAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACL;YAGzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIU,0CAA0C;gBAC1CF;gBACA,UAAUD;gBACVL;gBACAF;YACJ;YAGJ,MAAMW,eAAe,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACX,OAAOQ;YAC1D,IAAIG,aAAa,MAAM,IACnB,OAAOP,OAAO,IAAI,CAACO,aAAa,KAAK;YAGzC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,yCAAyC;gBACzCJ;gBACA,UAAUD;gBACVL;gBACAF;YACJ;YAGJ,OAAOI,OAAO,EAAE,CAACI;QACrB,EAAE,OAAOK,OAAO;YACZ,OAAOT,OAAO,IAAI,CAACS;QACvB;IACJ;AACJ;AAEO,MAAMC,oEAAmCC,qBAAqB;IACjE,aAAaC;IACb,gBAAgBrB;IAChB,cAAc;QAACsB;QAAgBC;QAA0BC;QAAeC;KAAuB;AACnG"}
@@ -0,0 +1,13 @@
1
+ import type { CmsModelAst, CmsEntryValues } from "../../types/index.js";
2
+ /**
3
+ * Walk entry values using the model AST and assign a stable `_id` to every
4
+ * object and dynamic-zone value — both list items and single values.
5
+ *
6
+ * - Values that already carry an `_id` keep it.
7
+ * - Values without `_id` get a newly generated one.
8
+ * - Duplicate `_id` values within a list array are silently regenerated.
9
+ *
10
+ * Uses `ContentEntryTraverser` so nested objects / dynamic zones are handled
11
+ * automatically — no manual recursion needed.
12
+ */
13
+ export declare function ensureItemIds(modelAst: CmsModelAst, values: CmsEntryValues): Promise<void>;
@@ -0,0 +1,22 @@
1
+ import { generateAlphaNumericLowerCaseId } from "@webiny/utils";
2
+ import { ContentEntryTraverser } from "./ContentEntryTraverser/ContentEntryTraverser.js";
3
+ async function ensureItemIds(modelAst, values) {
4
+ const traverser = new ContentEntryTraverser(modelAst);
5
+ await traverser.traverse(values, async ({ field, value })=>{
6
+ if ("object" !== field.type && "dynamicZone" !== field.type) return;
7
+ if (field.list && Array.isArray(value)) {
8
+ const seen = new Set();
9
+ for (const item of value)if (null != item && "object" == typeof item) {
10
+ if (!item._id || seen.has(item._id)) item._id = generateAlphaNumericLowerCaseId(12);
11
+ seen.add(item._id);
12
+ }
13
+ return;
14
+ }
15
+ if (!field.list && null != value && "object" == typeof value && !Array.isArray(value)) {
16
+ if (!value._id) value._id = generateAlphaNumericLowerCaseId(12);
17
+ }
18
+ });
19
+ }
20
+ export { ensureItemIds };
21
+
22
+ //# sourceMappingURL=ensureItemIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/contentEntry/ensureItemIds.js","sources":["../../../src/features/contentEntry/ensureItemIds.ts"],"sourcesContent":["import { generateAlphaNumericLowerCaseId } from \"@webiny/utils\";\nimport type { CmsModelAst, CmsEntryValues } from \"~/types/index.js\";\nimport { ContentEntryTraverser } from \"./ContentEntryTraverser/ContentEntryTraverser.js\";\n\n/**\n * Walk entry values using the model AST and assign a stable `_id` to every\n * object and dynamic-zone value — both list items and single values.\n *\n * - Values that already carry an `_id` keep it.\n * - Values without `_id` get a newly generated one.\n * - Duplicate `_id` values within a list array are silently regenerated.\n *\n * Uses `ContentEntryTraverser` so nested objects / dynamic zones are handled\n * automatically — no manual recursion needed.\n */\nexport async function ensureItemIds(modelAst: CmsModelAst, values: CmsEntryValues): Promise<void> {\n const traverser = new ContentEntryTraverser(modelAst);\n\n await traverser.traverse(values, async ({ field, value }) => {\n if (field.type !== \"object\" && field.type !== \"dynamicZone\") {\n return;\n }\n\n // List fields: assign _id to every array item.\n if (field.list && Array.isArray(value)) {\n const seen = new Set<string>();\n\n for (const item of value) {\n if (item == null || typeof item !== \"object\") {\n continue;\n }\n\n if (!item._id || seen.has(item._id)) {\n item._id = generateAlphaNumericLowerCaseId(12);\n }\n\n seen.add(item._id);\n }\n return;\n }\n\n // Single-value: assign _id to the value object.\n if (!field.list && value != null && typeof value === \"object\" && !Array.isArray(value)) {\n if (!value._id) {\n value._id = generateAlphaNumericLowerCaseId(12);\n }\n }\n });\n}\n"],"names":["ensureItemIds","modelAst","values","traverser","ContentEntryTraverser","field","value","Array","seen","Set","item","generateAlphaNumericLowerCaseId"],"mappings":";;AAeO,eAAeA,cAAcC,QAAqB,EAAEC,MAAsB;IAC7E,MAAMC,YAAY,IAAIC,sBAAsBH;IAE5C,MAAME,UAAU,QAAQ,CAACD,QAAQ,OAAO,EAAEG,KAAK,EAAEC,KAAK,EAAE;QACpD,IAAID,AAAe,aAAfA,MAAM,IAAI,IAAiBA,AAAe,kBAAfA,MAAM,IAAI,EACrC;QAIJ,IAAIA,MAAM,IAAI,IAAIE,MAAM,OAAO,CAACD,QAAQ;YACpC,MAAME,OAAO,IAAIC;YAEjB,KAAK,MAAMC,QAAQJ,MACf,IAAII,AAAQ,QAARA,QAAgB,AAAgB,YAAhB,OAAOA;gBAI3B,IAAI,CAACA,KAAK,GAAG,IAAIF,KAAK,GAAG,CAACE,KAAK,GAAG,GAC9BA,KAAK,GAAG,GAAGC,gCAAgC;gBAG/CH,KAAK,GAAG,CAACE,KAAK,GAAG;;YAErB;QACJ;QAGA,IAAI,CAACL,MAAM,IAAI,IAAIC,AAAS,QAATA,SAAiB,AAAiB,YAAjB,OAAOA,SAAsB,CAACC,MAAM,OAAO,CAACD,QAC5E;YAAA,IAAI,CAACA,MAAM,GAAG,EACVA,MAAM,GAAG,GAAGK,gCAAgC;QAChD;IAER;AACJ"}
@@ -3,12 +3,14 @@ import { AccessControl, CmsContext } from "../../../../features/shared/abstracti
3
3
  import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
4
4
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
5
  import type { CmsEntryValues, CmsModel, CreateCmsEntryInput, CreateCmsEntryOptionsInput } from "../../../../types/index.js";
6
+ import { ModelToAstConverter } from "../../../../features/contentModel/ModelToAstConverter/abstractions.js";
6
7
  declare class CreateEntryDataFactoryImpl implements ICreateEntryDataFactory {
7
8
  private readonly cmsContext;
8
9
  private readonly identityContext;
9
10
  private readonly tenantContext;
10
11
  private readonly accessControl;
11
- constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface, tenantContext: TenantContext.Interface, accessControl: AccessControl.Interface);
12
+ private readonly modelToAstConverter;
13
+ constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface, tenantContext: TenantContext.Interface, accessControl: AccessControl.Interface, modelToAstConverter: ModelToAstConverter.Interface);
12
14
  create<TValues extends CmsEntryValues = CmsEntryValues>(model: CmsModel, rawInput: CreateCmsEntryInput<TValues>, options?: CreateCmsEntryOptionsInput): Promise<ICreateEntryDataResponse<TValues>>;
13
15
  }
14
16
  export declare const CreateEntryDataFactory: import("@webiny/di").Implementation<typeof CreateEntryDataFactoryImpl>;