@webiny/api-headless-cms 6.5.0-beta.0 → 6.5.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.d.ts +1 -3
  2. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js +4 -12
  3. package/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js.map +1 -1
  4. package/features/contentEntry/CreateEntryRevisionFrom/abstractions.d.ts +2 -0
  5. package/features/contentEntry/CreateEntryRevisionFrom/abstractions.js.map +1 -1
  6. package/features/contentEntry/PublishEntry/PublishEntryUseCase.d.ts +1 -3
  7. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js +4 -10
  8. package/features/contentEntry/PublishEntry/PublishEntryUseCase.js.map +1 -1
  9. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js +3 -1
  10. package/features/contentEntry/RepublishEntry/RepublishEntryUseCase.js.map +1 -1
  11. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js +3 -1
  12. package/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js.map +1 -1
  13. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js +3 -1
  14. package/features/contentEntry/UpdateEntry/UpdateEntryUseCase.js.map +1 -1
  15. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.d.ts +5 -3
  16. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js +40 -14
  17. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/CreateEntryRevisionFromDataFactory.js.map +1 -1
  18. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.d.ts +17 -1
  19. package/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/abstractions.js.map +1 -1
  20. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.d.ts +5 -3
  21. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js +22 -16
  22. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/CreatePublishEntryDataFactory.js.map +1 -1
  23. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.d.ts +15 -1
  24. package/features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/abstractions.js.map +1 -1
  25. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.d.ts +5 -3
  26. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js +17 -13
  27. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/CreateRepublishEntryDataFactory.js.map +1 -1
  28. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.d.ts +13 -1
  29. package/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/abstractions.js.map +1 -1
  30. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.d.ts +6 -6
  31. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js +17 -18
  32. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/CreateUnpublishEntryDataFactory.js.map +1 -1
  33. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.d.ts +14 -2
  34. package/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/abstractions.js.map +1 -1
  35. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.d.ts +5 -3
  36. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js +66 -29
  37. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/UpdateEntryDataFactory.js.map +1 -1
  38. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.d.ts +15 -1
  39. package/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/abstractions.js.map +1 -1
  40. package/features/contentEntry/entryDataFactories/hasEntryContentChanged.d.ts +24 -0
  41. package/features/contentEntry/entryDataFactories/hasEntryContentChanged.js +13 -0
  42. package/features/contentEntry/entryDataFactories/hasEntryContentChanged.js.map +1 -0
  43. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js +1 -1
  44. package/features/contentModel/ValuesSelectionGenerator/ValuesSelectionGenerator.js.map +1 -1
  45. package/features/graphql/fields/base/AssetToGraphQL.js +7 -2
  46. package/features/graphql/fields/base/AssetToGraphQL.js.map +1 -1
  47. package/package.json +18 -18
@@ -3,17 +3,15 @@ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.j
3
3
  import { CreateEntryRevisionFromRepository, CreateEntryRevisionFromUseCase as UseCaseAbstraction } from "./abstractions.js";
4
4
  import { AccessControl } from "../../../features/shared/abstractions.js";
5
5
  import { GetRevisionByIdUseCase } from "../../../features/contentEntry/GetRevisionById/index.js";
6
- import { GetLatestRevisionByEntryIdUseCase } from "../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
7
6
  import type { CmsEntry, CmsEntryValues, CmsModel, CreateCmsEntryInput, CreateCmsEntryOptionsInput } from "../../../types/index.js";
8
7
  import { CreateEntryRevisionFromDataFactory } from "../../../features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/index.js";
9
8
  declare class CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {
10
9
  private repository;
11
10
  private accessControl;
12
11
  private getRevisionById;
13
- private getLatestRevision;
14
12
  private eventPublisher;
15
13
  private createEntryRevisionFromDataFactory;
16
- constructor(repository: CreateEntryRevisionFromRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface, eventPublisher: EventPublisher.Interface, createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface);
14
+ constructor(repository: CreateEntryRevisionFromRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, eventPublisher: EventPublisher.Interface, createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface);
17
15
  execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, sourceId: string, rawInput: CreateCmsEntryInput<T>, options?: CreateCmsEntryOptionsInput): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>>;
18
16
  }
19
17
  export declare const CreateEntryRevisionFromUseCase: import("@webiny/di").Implementation<typeof CreateEntryRevisionFromUseCaseImpl>;
@@ -3,17 +3,14 @@ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.j
3
3
  import { CreateEntryRevisionFromRepository, CreateEntryRevisionFromUseCase } from "./abstractions.js";
4
4
  import { AccessControl } from "../../shared/abstractions.js";
5
5
  import { GetRevisionByIdUseCase } from "../GetRevisionById/index.js";
6
- import { GetLatestRevisionByEntryIdUseCase } from "../GetLatestRevisionByEntryId/index.js";
7
6
  import { EntryRevisionAfterCreateEvent, EntryRevisionBeforeCreateEvent, EntryRevisionCreateErrorEvent } from "./events.js";
8
7
  import { EntryNotAuthorizedError } from "../../../domain/contentEntry/errors.js";
9
- import { parseIdentifier } from "@webiny/utils";
10
8
  import { CreateEntryRevisionFromDataFactory } from "../entryDataFactories/CreateEntryRevisionFromDataFactory/index.js";
11
9
  class CreateEntryRevisionFromUseCaseImpl {
12
- constructor(repository, accessControl, getRevisionById, getLatestRevision, eventPublisher, createEntryRevisionFromDataFactory){
10
+ constructor(repository, accessControl, getRevisionById, eventPublisher, createEntryRevisionFromDataFactory){
13
11
  this.repository = repository;
14
12
  this.accessControl = accessControl;
15
13
  this.getRevisionById = getRevisionById;
16
- this.getLatestRevision = getLatestRevision;
17
14
  this.eventPublisher = eventPublisher;
18
15
  this.createEntryRevisionFromDataFactory = createEntryRevisionFromDataFactory;
19
16
  }
@@ -23,16 +20,12 @@ class CreateEntryRevisionFromUseCaseImpl {
23
20
  rwd: "w"
24
21
  });
25
22
  if (!canAccess) return Result.fail(EntryNotAuthorizedError.fromModel(model));
26
- const { id: uniqueId } = parseIdentifier(sourceId);
27
23
  const originalResult = await this.getRevisionById.execute(model, sourceId);
28
24
  if (originalResult.isFail()) return Result.fail(originalResult.error);
29
25
  const originalEntry = originalResult.value;
30
- const latestResult = await this.getLatestRevision.execute(model, {
31
- id: uniqueId
32
- });
33
- if (latestResult.isFail()) return Result.fail(latestResult.error);
34
- const latestStorageEntry = latestResult.value;
35
- const { entry, input } = await this.createEntryRevisionFromDataFactory.create(sourceId, model, rawInput, originalEntry, latestStorageEntry, options);
26
+ const dataResult = await this.createEntryRevisionFromDataFactory.create(sourceId, model, rawInput, originalEntry, options);
27
+ if (dataResult.isFail()) return Result.fail(dataResult.error);
28
+ const { entry, input } = dataResult.value;
36
29
  const canAccessEntry = await this.accessControl.canAccessEntry({
37
30
  model,
38
31
  entry,
@@ -84,7 +77,6 @@ const CreateEntryRevisionFromUseCase_CreateEntryRevisionFromUseCase = createImpl
84
77
  CreateEntryRevisionFromRepository,
85
78
  AccessControl,
86
79
  GetRevisionByIdUseCase,
87
- GetLatestRevisionByEntryIdUseCase,
88
80
  EventPublisher,
89
81
  CreateEntryRevisionFromDataFactory
90
82
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js","sources":["../../../../src/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n CreateEntryRevisionFromRepository,\n CreateEntryRevisionFromUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport { GetLatestRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetLatestRevisionByEntryId/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport {\n EntryRevisionAfterCreateEvent,\n EntryRevisionBeforeCreateEvent,\n EntryRevisionCreateErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { CreateEntryRevisionFromDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/index.js\";\n\nclass CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: CreateEntryRevisionFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { id: uniqueId } = parseIdentifier(sourceId);\n const originalResult = await this.getRevisionById.execute<T>(model, sourceId);\n\n if (originalResult.isFail()) {\n return Result.fail(originalResult.error);\n }\n\n const originalEntry = originalResult.value;\n\n const latestResult = await this.getLatestRevision.execute<T>(model, { id: uniqueId });\n\n if (latestResult.isFail()) {\n return Result.fail(latestResult.error);\n }\n\n const latestStorageEntry = latestResult.value;\n\n const { entry, input } = await this.createEntryRevisionFromDataFactory.create<T>(\n sourceId,\n model,\n rawInput,\n originalEntry,\n latestStorageEntry,\n options\n );\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n await this.eventPublisher.publish(\n new EntryRevisionBeforeCreateEvent({\n entry,\n model,\n input,\n original: originalEntry\n })\n );\n\n const result = await this.repository.execute<T>(model, entry);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n const createdEntry = result.value;\n\n await this.eventPublisher.publish(\n new EntryRevisionAfterCreateEvent({\n entry: createdEntry,\n model,\n input,\n original: originalEntry\n })\n );\n\n return Result.ok(createdEntry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: error as Error\n })\n );\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const CreateEntryRevisionFromUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryRevisionFromUseCaseImpl,\n dependencies: [\n CreateEntryRevisionFromRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n GetLatestRevisionByEntryIdUseCase,\n EventPublisher,\n CreateEntryRevisionFromDataFactory\n ]\n});\n"],"names":["CreateEntryRevisionFromUseCaseImpl","repository","accessControl","getRevisionById","getLatestRevision","eventPublisher","createEntryRevisionFromDataFactory","model","sourceId","rawInput","options","canAccess","Result","EntryNotAuthorizedError","uniqueId","parseIdentifier","originalResult","originalEntry","latestResult","latestStorageEntry","entry","input","canAccessEntry","EntryRevisionBeforeCreateEvent","result","EntryRevisionCreateErrorEvent","createdEntry","EntryRevisionAfterCreateEvent","error","CreateEntryRevisionFromUseCase","createImplementation","UseCaseAbstraction","CreateEntryRevisionFromRepository","AccessControl","GetRevisionByIdUseCase","GetLatestRevisionByEntryIdUseCase","EventPublisher","CreateEntryRevisionFromDataFactory"],"mappings":";;;;;;;;;;AAyBA,MAAMA;IACF,YACYC,UAAuD,EACvDC,aAAsC,EACtCC,eAAiD,EACjDC,iBAA8D,EAC9DC,cAAwC,EACxCC,kCAAgF,CAC1F;aANUL,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,iBAAiB,GAAjBA;aACAC,cAAc,GAAdA;aACAC,kCAAkC,GAAlCA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,QAAgB,EAChBC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,MAAM,EAAE,IAAIO,QAAQ,EAAE,GAAGC,gBAAgBP;QACzC,MAAMQ,iBAAiB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAIT,OAAOC;QAEpE,IAAIQ,eAAe,MAAM,IACrB,OAAOJ,OAAO,IAAI,CAACI,eAAe,KAAK;QAG3C,MAAMC,gBAAgBD,eAAe,KAAK;QAE1C,MAAME,eAAe,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAIX,OAAO;YAAE,IAAIO;QAAS;QAEnF,IAAII,aAAa,MAAM,IACnB,OAAON,OAAO,IAAI,CAACM,aAAa,KAAK;QAGzC,MAAMC,qBAAqBD,aAAa,KAAK;QAE7C,MAAM,EAAEE,KAAK,EAAEC,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,kCAAkC,CAAC,MAAM,CACzEb,UACAD,OACAE,UACAQ,eACAE,oBACAT;QAGJ,MAAMY,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3Df;YACAa;YACA,KAAK;QACT;QAEA,IAAI,CAACE,gBACD,OAAOV,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIgB,+BAA+B;gBAC/BH;gBACAb;gBACAc;gBACA,UAAUJ;YACd;YAGJ,MAAMO,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAIjB,OAAOa;YAEvD,IAAII,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9BL;oBACAb;oBACAc;oBACA,UAAUJ;oBACV,OAAOO,OAAO,KAAK;gBACvB;gBAEJ,OAAOZ,OAAO,IAAI,CAACY,OAAO,KAAK;YACnC;YAEA,MAAME,eAAeF,OAAO,KAAK;YAEjC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,8BAA8B;gBAC9B,OAAOD;gBACPnB;gBACAc;gBACA,UAAUJ;YACd;YAGJ,OAAOL,OAAO,EAAE,CAACc;QACrB,EAAE,OAAOE,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,8BAA8B;gBAC9BL;gBACAb;gBACAc;gBACA,UAAUJ;gBACV,OAAOW;YACX;YAEJ,OAAOhB,OAAO,IAAI,CAACgB;QACvB;IACJ;AACJ;AAEO,MAAMC,gEAAiCC,qBAAqB;IAC/D,aAAaC;IACb,gBAAgB/B;IAChB,cAAc;QACVgC;QACAC;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.js","sources":["../../../../src/features/contentEntry/CreateEntryRevisionFrom/CreateEntryRevisionFromUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n CreateEntryRevisionFromRepository,\n CreateEntryRevisionFromUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport {\n EntryRevisionAfterCreateEvent,\n EntryRevisionBeforeCreateEvent,\n EntryRevisionCreateErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateEntryRevisionFromDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateEntryRevisionFromDataFactory/index.js\";\n\nclass CreateEntryRevisionFromUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: CreateEntryRevisionFromRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private createEntryRevisionFromDataFactory: CreateEntryRevisionFromDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n rawInput: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>> {\n const canAccess = await this.accessControl.canAccessEntry({ model, rwd: \"w\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const originalResult = await this.getRevisionById.execute<T>(model, sourceId);\n\n if (originalResult.isFail()) {\n return Result.fail(originalResult.error);\n }\n\n const originalEntry = originalResult.value;\n\n const dataResult = await this.createEntryRevisionFromDataFactory.create<T>(\n sourceId,\n model,\n rawInput,\n originalEntry,\n options\n );\n if (dataResult.isFail()) {\n return Result.fail(dataResult.error);\n }\n const { entry, input } = dataResult.value;\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n try {\n await this.eventPublisher.publish(\n new EntryRevisionBeforeCreateEvent({\n entry,\n model,\n input,\n original: originalEntry\n })\n );\n\n const result = await this.repository.execute<T>(model, entry);\n\n if (result.isFail()) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: result.error\n })\n );\n return Result.fail(result.error);\n }\n\n const createdEntry = result.value;\n\n await this.eventPublisher.publish(\n new EntryRevisionAfterCreateEvent({\n entry: createdEntry,\n model,\n input,\n original: originalEntry\n })\n );\n\n return Result.ok(createdEntry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRevisionCreateErrorEvent({\n entry,\n model,\n input,\n original: originalEntry,\n error: error as Error\n })\n );\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const CreateEntryRevisionFromUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateEntryRevisionFromUseCaseImpl,\n dependencies: [\n CreateEntryRevisionFromRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n EventPublisher,\n CreateEntryRevisionFromDataFactory\n ]\n});\n"],"names":["CreateEntryRevisionFromUseCaseImpl","repository","accessControl","getRevisionById","eventPublisher","createEntryRevisionFromDataFactory","model","sourceId","rawInput","options","canAccess","Result","EntryNotAuthorizedError","originalResult","originalEntry","dataResult","entry","input","canAccessEntry","EntryRevisionBeforeCreateEvent","result","EntryRevisionCreateErrorEvent","createdEntry","EntryRevisionAfterCreateEvent","error","CreateEntryRevisionFromUseCase","createImplementation","UseCaseAbstraction","CreateEntryRevisionFromRepository","AccessControl","GetRevisionByIdUseCase","EventPublisher","CreateEntryRevisionFromDataFactory"],"mappings":";;;;;;;;AAuBA,MAAMA;IACF,YACYC,UAAuD,EACvDC,aAAsC,EACtCC,eAAiD,EACjDC,cAAwC,EACxCC,kCAAgF,CAC1F;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,kCAAkC,GAAlCA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,QAAgB,EAChBC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,MAAMO,iBAAiB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAIP,OAAOC;QAEpE,IAAIM,eAAe,MAAM,IACrB,OAAOF,OAAO,IAAI,CAACE,eAAe,KAAK;QAG3C,MAAMC,gBAAgBD,eAAe,KAAK;QAE1C,MAAME,aAAa,MAAM,IAAI,CAAC,kCAAkC,CAAC,MAAM,CACnER,UACAD,OACAE,UACAM,eACAL;QAEJ,IAAIM,WAAW,MAAM,IACjB,OAAOJ,OAAO,IAAI,CAACI,WAAW,KAAK;QAEvC,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,WAAW,KAAK;QAEzC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DZ;YACAU;YACA,KAAK;QACT;QAEA,IAAI,CAACE,gBACD,OAAOP,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIa,+BAA+B;gBAC/BH;gBACAV;gBACAW;gBACA,UAAUH;YACd;YAGJ,MAAMM,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAId,OAAOU;YAEvD,IAAII,OAAO,MAAM,IAAI;gBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,8BAA8B;oBAC9BL;oBACAV;oBACAW;oBACA,UAAUH;oBACV,OAAOM,OAAO,KAAK;gBACvB;gBAEJ,OAAOT,OAAO,IAAI,CAACS,OAAO,KAAK;YACnC;YAEA,MAAME,eAAeF,OAAO,KAAK;YAEjC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,8BAA8B;gBAC9B,OAAOD;gBACPhB;gBACAW;gBACA,UAAUH;YACd;YAGJ,OAAOH,OAAO,EAAE,CAACW;QACrB,EAAE,OAAOE,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,8BAA8B;gBAC9BL;gBACAV;gBACAW;gBACA,UAAUH;gBACV,OAAOU;YACX;YAEJ,OAAOb,OAAO,IAAI,CAACa;QACvB;IACJ;AACJ;AAEO,MAAMC,gEAAiCC,qBAAqB;IAC/D,aAAaC;IACb,gBAAgB3B;IAChB,cAAc;QACV4B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -1,3 +1,4 @@
1
+ import type { NotAuthorizedError } from "../../../utils/errors.js";
1
2
  import { Result } from "@webiny/feature/api";
2
3
  import type { CmsEntry, CmsEntryValues, CmsModel, CreateCmsEntryInput, CreateCmsEntryOptionsInput } from "../../../types/index.js";
3
4
  import type { EntryNotAuthorizedError, EntryNotFoundError, EntryPersistenceError, EntryValidationError } from "../../../domain/contentEntry/errors.js";
@@ -12,6 +13,7 @@ export interface ICreateEntryRevisionFromUseCaseErrors {
12
13
  notFound: EntryNotFoundError;
13
14
  validation: EntryValidationError;
14
15
  storage: EntryPersistenceError;
16
+ notAuthorizedStatus: NotAuthorizedError;
15
17
  }
16
18
  type UseCaseError = ICreateEntryRevisionFromUseCaseErrors[keyof ICreateEntryRevisionFromUseCaseErrors];
17
19
  /** Create a new entry revision from an existing one. */
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/CreateEntryRevisionFrom/abstractions.js","sources":["../../../../src/features/contentEntry/CreateEntryRevisionFrom/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport type {\n EntryNotAuthorizedError,\n EntryNotFoundError,\n EntryPersistenceError,\n EntryValidationError\n} from \"~/domain/contentEntry/errors.js\";\n\n/**\n * CreateEntryRevisionFrom Use Case - Creates a new revision from an existing entry.\n */\nexport interface ICreateEntryRevisionFromUseCase {\n execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n input: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseError>>;\n}\n\nexport interface ICreateEntryRevisionFromUseCaseErrors {\n notAuthorized: EntryNotAuthorizedError;\n notFound: EntryNotFoundError;\n validation: EntryValidationError;\n storage: EntryPersistenceError;\n}\n\ntype UseCaseError =\n ICreateEntryRevisionFromUseCaseErrors[keyof ICreateEntryRevisionFromUseCaseErrors];\n\n/** Create a new entry revision from an existing one. */\nexport const CreateEntryRevisionFromUseCase = createAbstraction<ICreateEntryRevisionFromUseCase>(\n \"CreateEntryRevisionFromUseCase\"\n);\n\nexport namespace CreateEntryRevisionFromUseCase {\n export type Interface = ICreateEntryRevisionFromUseCase;\n export type Input<T extends CmsEntryValues = CmsEntryValues> = CreateCmsEntryInput<T>;\n export type Options = CreateCmsEntryOptionsInput;\n\n export type Return<T extends CmsEntryValues = CmsEntryValues> = Promise<\n Result<CmsEntry<T>, UseCaseError>\n >;\n export type Error = UseCaseError;\n}\n\n/**\n * Payload for before create revision event\n */\nexport interface EntryRevisionBeforeCreateEventPayload {\n entry: CmsEntry;\n model: CmsModel;\n input: CreateCmsEntryInput;\n original: CmsEntry;\n}\n\n/**\n * Payload for after create revision event\n */\nexport interface EntryRevisionAfterCreateEventPayload {\n entry: CmsEntry;\n model: CmsModel;\n input: CreateCmsEntryInput;\n original: CmsEntry;\n}\n\n/**\n * Payload for create revision error event\n */\nexport interface EntryRevisionCreateErrorEventPayload {\n entry: CmsEntry;\n model: CmsModel;\n input: CreateCmsEntryInput;\n original: CmsEntry;\n error: Error;\n}\n\n/**\n * CreateEntryRevisionFromRepository - Handles storage operations for creating entry revisions.\n */\nexport interface ICreateEntryRevisionFromRepository {\n execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryError>>;\n}\n\nexport interface ICreateEntryRevisionFromRepositoryErrors {\n storage: EntryPersistenceError;\n}\n\ntype RepositoryError =\n ICreateEntryRevisionFromRepositoryErrors[keyof ICreateEntryRevisionFromRepositoryErrors];\n\nexport const CreateEntryRevisionFromRepository =\n createAbstraction<ICreateEntryRevisionFromRepository>(\"CreateEntryRevisionFromRepository\");\n\nexport namespace CreateEntryRevisionFromRepository {\n export type Interface = ICreateEntryRevisionFromRepository;\n export type Error = RepositoryError;\n}\n"],"names":["CreateEntryRevisionFromUseCase","createAbstraction","CreateEntryRevisionFromRepository"],"mappings":";AAsCO,MAAMA,iCAAiCC,kBAC1C;AA8DG,MAAMC,oCACTD,kBAAsD"}
1
+ {"version":3,"file":"features/contentEntry/CreateEntryRevisionFrom/abstractions.js","sources":["../../../../src/features/contentEntry/CreateEntryRevisionFrom/abstractions.ts"],"sourcesContent":["import type { NotAuthorizedError } from \"~/utils/errors.js\";\nimport { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n CreateCmsEntryInput,\n CreateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport type {\n EntryNotAuthorizedError,\n EntryNotFoundError,\n EntryPersistenceError,\n EntryValidationError\n} from \"~/domain/contentEntry/errors.js\";\n\n/**\n * CreateEntryRevisionFrom Use Case - Creates a new revision from an existing entry.\n */\nexport interface ICreateEntryRevisionFromUseCase {\n execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n sourceId: string,\n input: CreateCmsEntryInput<T>,\n options?: CreateCmsEntryOptionsInput\n ): Promise<Result<CmsEntry<T>, UseCaseError>>;\n}\n\nexport interface ICreateEntryRevisionFromUseCaseErrors {\n notAuthorized: EntryNotAuthorizedError;\n notFound: EntryNotFoundError;\n validation: EntryValidationError;\n storage: EntryPersistenceError;\n notAuthorizedStatus: NotAuthorizedError;\n}\n\ntype UseCaseError =\n ICreateEntryRevisionFromUseCaseErrors[keyof ICreateEntryRevisionFromUseCaseErrors];\n\n/** Create a new entry revision from an existing one. */\nexport const CreateEntryRevisionFromUseCase = createAbstraction<ICreateEntryRevisionFromUseCase>(\n \"CreateEntryRevisionFromUseCase\"\n);\n\nexport namespace CreateEntryRevisionFromUseCase {\n export type Interface = ICreateEntryRevisionFromUseCase;\n export type Input<T extends CmsEntryValues = CmsEntryValues> = CreateCmsEntryInput<T>;\n export type Options = CreateCmsEntryOptionsInput;\n\n export type Return<T extends CmsEntryValues = CmsEntryValues> = Promise<\n Result<CmsEntry<T>, UseCaseError>\n >;\n export type Error = UseCaseError;\n}\n\n/**\n * Payload for before create revision event\n */\nexport interface EntryRevisionBeforeCreateEventPayload {\n entry: CmsEntry;\n model: CmsModel;\n input: CreateCmsEntryInput;\n original: CmsEntry;\n}\n\n/**\n * Payload for after create revision event\n */\nexport interface EntryRevisionAfterCreateEventPayload {\n entry: CmsEntry;\n model: CmsModel;\n input: CreateCmsEntryInput;\n original: CmsEntry;\n}\n\n/**\n * Payload for create revision error event\n */\nexport interface EntryRevisionCreateErrorEventPayload {\n entry: CmsEntry;\n model: CmsModel;\n input: CreateCmsEntryInput;\n original: CmsEntry;\n error: Error;\n}\n\n/**\n * CreateEntryRevisionFromRepository - Handles storage operations for creating entry revisions.\n */\nexport interface ICreateEntryRevisionFromRepository {\n execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n entry: CmsEntry<T>\n ): Promise<Result<CmsEntry<T>, RepositoryError>>;\n}\n\nexport interface ICreateEntryRevisionFromRepositoryErrors {\n storage: EntryPersistenceError;\n}\n\ntype RepositoryError =\n ICreateEntryRevisionFromRepositoryErrors[keyof ICreateEntryRevisionFromRepositoryErrors];\n\nexport const CreateEntryRevisionFromRepository =\n createAbstraction<ICreateEntryRevisionFromRepository>(\"CreateEntryRevisionFromRepository\");\n\nexport namespace CreateEntryRevisionFromRepository {\n export type Interface = ICreateEntryRevisionFromRepository;\n export type Error = RepositoryError;\n}\n"],"names":["CreateEntryRevisionFromUseCase","createAbstraction","CreateEntryRevisionFromRepository"],"mappings":";AAwCO,MAAMA,iCAAiCC,kBAC1C;AA8DG,MAAMC,oCACTD,kBAAsD"}
@@ -4,17 +4,15 @@ import { PublishEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
4
4
  import { PublishEntryRepository } from "./abstractions.js";
5
5
  import { AccessControl } from "../../../features/shared/abstractions.js";
6
6
  import { GetRevisionByIdUseCase } from "../../../features/contentEntry/GetRevisionById/index.js";
7
- import { GetLatestRevisionByEntryIdUseCase } from "../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
8
7
  import type { CmsEntry, CmsEntryValues, CmsModel } from "../../../types/index.js";
9
8
  import { CreatePublishEntryDataFactory } from "../../../features/contentEntry/entryDataFactories/CreatePublishEntryDataFactory/index.js";
10
9
  declare class PublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {
11
10
  private repository;
12
11
  private accessControl;
13
12
  private getRevisionById;
14
- private getLatestRevision;
15
13
  private eventPublisher;
16
14
  private createPublishEntryDataFactory;
17
- constructor(repository: PublishEntryRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface, eventPublisher: EventPublisher.Interface, createPublishEntryDataFactory: CreatePublishEntryDataFactory.Interface);
15
+ constructor(repository: PublishEntryRepository.Interface, accessControl: AccessControl.Interface, getRevisionById: GetRevisionByIdUseCase.Interface, eventPublisher: EventPublisher.Interface, createPublishEntryDataFactory: CreatePublishEntryDataFactory.Interface);
18
16
  execute<T extends CmsEntryValues = CmsEntryValues>(model: CmsModel, id: string): Promise<Result<CmsEntry<T>, UseCaseAbstraction.Error>>;
19
17
  }
20
18
  export declare const PublishEntryUseCase: import("@webiny/di").Implementation<typeof PublishEntryUseCaseImpl>;
@@ -3,16 +3,14 @@ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.j
3
3
  import { PublishEntryRepository, PublishEntryUseCase } from "./abstractions.js";
4
4
  import { AccessControl } from "../../shared/abstractions.js";
5
5
  import { GetRevisionByIdUseCase } from "../GetRevisionById/index.js";
6
- import { GetLatestRevisionByEntryIdUseCase } from "../GetLatestRevisionByEntryId/index.js";
7
6
  import { EntryAfterPublishEvent, EntryBeforePublishEvent, EntryPublishErrorEvent } from "./events.js";
8
7
  import { EntryNotAuthorizedError, EntryNotFoundError } from "../../../domain/contentEntry/errors.js";
9
8
  import { CreatePublishEntryDataFactory } from "../entryDataFactories/CreatePublishEntryDataFactory/index.js";
10
9
  class PublishEntryUseCaseImpl {
11
- constructor(repository, accessControl, getRevisionById, getLatestRevision, eventPublisher, createPublishEntryDataFactory){
10
+ constructor(repository, accessControl, getRevisionById, eventPublisher, createPublishEntryDataFactory){
12
11
  this.repository = repository;
13
12
  this.accessControl = accessControl;
14
13
  this.getRevisionById = getRevisionById;
15
- this.getLatestRevision = getLatestRevision;
16
14
  this.eventPublisher = eventPublisher;
17
15
  this.createPublishEntryDataFactory = createPublishEntryDataFactory;
18
16
  }
@@ -31,12 +29,9 @@ class PublishEntryUseCaseImpl {
31
29
  pw: "p"
32
30
  });
33
31
  if (!canAccessEntry) return Result.fail(EntryNotAuthorizedError.fromModel(model));
34
- const latestResult = await this.getLatestRevision.execute(model, {
35
- id: originalEntry.entryId
36
- });
37
- if (latestResult.isFail()) return Result.fail(latestResult.error);
38
- const latestEntry = latestResult.value;
39
- const { entry } = await this.createPublishEntryDataFactory.create(model, originalEntry, latestEntry);
32
+ const dataResult = await this.createPublishEntryDataFactory.create(model, originalEntry);
33
+ if (dataResult.isFail()) return Result.fail(dataResult.error);
34
+ const { entry } = dataResult.value;
40
35
  try {
41
36
  await this.eventPublisher.publish(new EntryBeforePublishEvent({
42
37
  entry,
@@ -78,7 +73,6 @@ const PublishEntryUseCase_PublishEntryUseCase = createImplementation({
78
73
  PublishEntryRepository,
79
74
  AccessControl,
80
75
  GetRevisionByIdUseCase,
81
- GetLatestRevisionByEntryIdUseCase,
82
76
  EventPublisher,
83
77
  CreatePublishEntryDataFactory
84
78
  ]
@@ -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, 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"}
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 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 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 dataResult = await this.createPublishEntryDataFactory.create<T>(model, originalEntry);\n if (dataResult.isFail()) {\n return Result.fail(dataResult.error);\n }\n const { entry } = dataResult.value;\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 EventPublisher,\n CreatePublishEntryDataFactory\n ]\n});\n"],"names":["PublishEntryUseCaseImpl","repository","accessControl","getRevisionById","eventPublisher","createPublishEntryDataFactory","model","id","canAccess","Result","EntryNotAuthorizedError","result","EntryNotFoundError","originalEntry","canAccessEntry","dataResult","entry","EntryBeforePublishEvent","repositoryResult","EntryPublishErrorEvent","publishedEntry","EntryAfterPublishEvent","error","PublishEntryUseCase","createImplementation","UseCaseAbstraction","PublishEntryRepository","AccessControl","GetRevisionByIdUseCase","EventPublisher","CreatePublishEntryDataFactory"],"mappings":";;;;;;;;AAgBA,MAAMA;IACF,YACYC,UAA4C,EAC5CC,aAAsC,EACtCC,eAAiD,EACjDC,cAAwC,EACxCC,6BAAsE,CAChF;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;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,aAAa,MAAM,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAIT,OAAOO;QAC7E,IAAIE,WAAW,MAAM,IACjB,OAAON,OAAO,IAAI,CAACM,WAAW,KAAK;QAEvC,MAAM,EAAEC,KAAK,EAAE,GAAGD,WAAW,KAAK;QAElC,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,wBAAwB;gBACxBD;gBACA,UAAUH;gBACVP;YACJ;YAGJ,MAAMY,mBAAmB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACZ,OAAOU;YAE9D,IAAIE,iBAAiB,MAAM,IAAI;gBAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,uBAAuB;oBACvBH;oBACA,UAAUH;oBACVP;oBACA,OAAOY,iBAAiB,KAAK;gBACjC;gBAEJ,OAAOT,OAAO,IAAI,CAACS,iBAAiB,KAAK;YAC7C;YAEA,MAAME,iBAAiBF,iBAAiB,KAAK;YAE7C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,uBAAuB;gBACvB,OAAOD;gBACP,UAAUP;gBACVP;YACJ;YAGJ,OAAOG,OAAO,EAAE,CAACO;QACrB,EAAE,OAAOM,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,uBAAuB;gBACvBH;gBACA,UAAUH;gBACVP;gBACA,OAAOgB;YACX;YAEJ,OAAOb,OAAO,IAAI,CAACa;QACvB;IACJ;AACJ;AAEO,MAAMC,0CAAsBC,qBAAqB;IACpD,aAAaC;IACb,gBAAgBzB;IAChB,cAAc;QACV0B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -31,7 +31,9 @@ class RepublishEntryUseCaseImpl {
31
31
  pw: "p"
32
32
  });
33
33
  if (!canAccessEntry) return Result.fail(EntryNotAuthorizedError.fromModel(model));
34
- const { entry } = await this.createRepublishEntryDataFactory.create(model, originalEntry);
34
+ const dataResult = await this.createRepublishEntryDataFactory.create(model, originalEntry);
35
+ if (dataResult.isFail()) return Result.fail(dataResult.error);
36
+ const { entry } = dataResult.value;
35
37
  try {
36
38
  await this.eventPublisher.publish(new EntryBeforeRepublishEvent({
37
39
  entry,
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/RepublishEntry/RepublishEntryUseCase.js","sources":["../../../../src/features/contentEntry/RepublishEntry/RepublishEntryUseCase.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 { RepublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { RepublishEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforeRepublishEvent,\n EntryAfterRepublishEvent,\n EntryRepublishErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateRepublishEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/index.js\";\n\nclass RepublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: RepublishEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private createRepublishEntryDataFactory: CreateRepublishEntryDataFactory.Interface\n ) {}\n\n public 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, rwd: \"w\", 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 rwd: \"w\",\n pw: \"p\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { entry } = await this.createRepublishEntryDataFactory.create<T>(\n model,\n originalEntry\n );\n\n try {\n await this.eventPublisher.publish(\n new EntryBeforeRepublishEvent({\n entry,\n model\n })\n );\n\n const repositoryResult = await this.repository.execute<T>(model, entry);\n\n if (repositoryResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryRepublishErrorEvent({\n entry,\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 EntryAfterRepublishEvent({\n entry: publishedEntry,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRepublishErrorEvent({\n entry,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const RepublishEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: RepublishEntryUseCaseImpl,\n dependencies: [\n RepublishEntryRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n EventPublisher,\n CreateRepublishEntryDataFactory\n ]\n});\n"],"names":["RepublishEntryUseCaseImpl","repository","accessControl","getRevisionById","eventPublisher","createRepublishEntryDataFactory","model","id","canAccess","Result","EntryNotAuthorizedError","result","EntryNotFoundError","originalEntry","canAccessEntry","entry","EntryBeforeRepublishEvent","repositoryResult","EntryRepublishErrorEvent","publishedEntry","EntryAfterRepublishEvent","error","RepublishEntryUseCase","createImplementation","UseCaseAbstraction","RepublishEntryRepository","AccessControl","GetRevisionByIdUseCase","EventPublisher","CreateRepublishEntryDataFactory"],"mappings":";;;;;;;;AAiBA,MAAMA;IACF,YACYC,UAA8C,EAC9CC,aAAsC,EACtCC,eAAiD,EACjDC,cAAwC,EACxCC,+BAA0E,CACpF;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,+BAA+B,GAA/BA;IACT;IAEH,MAAa,QACTC,KAAe,EACfC,EAAU,EAC4C;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,KAAK;YAAK,IAAI;QAAI;QACrF,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,KAAK;YACL,IAAI;QACR;QAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAM,EAAES,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAC/DT,OACAO;QAGJ,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,0BAA0B;gBAC1BD;gBACAT;YACJ;YAGJ,MAAMW,mBAAmB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAIX,OAAOS;YAEjE,IAAIE,iBAAiB,MAAM,IAAI;gBAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,yBAAyB;oBACzBH;oBACAT;oBACA,OAAOW,iBAAiB,KAAK;gBACjC;gBAEJ,OAAOR,OAAO,IAAI,CAACQ,iBAAiB,KAAK;YAC7C;YAEA,MAAME,iBAAiBF,iBAAiB,KAAK;YAE7C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,yBAAyB;gBACzB,OAAOD;gBACPb;YACJ;YAGJ,OAAOG,OAAO,EAAE,CAACM;QACrB,EAAE,OAAOM,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,yBAAyB;gBACzBH;gBACAT;gBACA,OAAOe;YACX;YAEJ,OAAOZ,OAAO,IAAI,CAACY;QACvB;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgBxB;IAChB,cAAc;QACVyB;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/RepublishEntry/RepublishEntryUseCase.js","sources":["../../../../src/features/contentEntry/RepublishEntry/RepublishEntryUseCase.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 { RepublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { RepublishEntryRepository } from \"./abstractions.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/index.js\";\nimport type { CmsEntry, CmsEntryValues, CmsModel } from \"~/types/index.js\";\nimport {\n EntryBeforeRepublishEvent,\n EntryAfterRepublishEvent,\n EntryRepublishErrorEvent\n} from \"./events.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateRepublishEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateRepublishEntryDataFactory/index.js\";\n\nclass RepublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private repository: RepublishEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getRevisionById: GetRevisionByIdUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private createRepublishEntryDataFactory: CreateRepublishEntryDataFactory.Interface\n ) {}\n\n public 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, rwd: \"w\", 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 rwd: \"w\",\n pw: \"p\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const dataResult = await this.createRepublishEntryDataFactory.create<T>(\n model,\n originalEntry\n );\n if (dataResult.isFail()) {\n return Result.fail(dataResult.error);\n }\n const { entry } = dataResult.value;\n\n try {\n await this.eventPublisher.publish(\n new EntryBeforeRepublishEvent({\n entry,\n model\n })\n );\n\n const repositoryResult = await this.repository.execute<T>(model, entry);\n\n if (repositoryResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryRepublishErrorEvent({\n entry,\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 EntryAfterRepublishEvent({\n entry: publishedEntry,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryRepublishErrorEvent({\n entry,\n model,\n error: error as Error\n })\n );\n return Result.fail(error as any);\n }\n }\n}\n\nexport const RepublishEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: RepublishEntryUseCaseImpl,\n dependencies: [\n RepublishEntryRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n EventPublisher,\n CreateRepublishEntryDataFactory\n ]\n});\n"],"names":["RepublishEntryUseCaseImpl","repository","accessControl","getRevisionById","eventPublisher","createRepublishEntryDataFactory","model","id","canAccess","Result","EntryNotAuthorizedError","result","EntryNotFoundError","originalEntry","canAccessEntry","dataResult","entry","EntryBeforeRepublishEvent","repositoryResult","EntryRepublishErrorEvent","publishedEntry","EntryAfterRepublishEvent","error","RepublishEntryUseCase","createImplementation","UseCaseAbstraction","RepublishEntryRepository","AccessControl","GetRevisionByIdUseCase","EventPublisher","CreateRepublishEntryDataFactory"],"mappings":";;;;;;;;AAiBA,MAAMA;IACF,YACYC,UAA8C,EAC9CC,aAAsC,EACtCC,eAAiD,EACjDC,cAAwC,EACxCC,+BAA0E,CACpF;aALUJ,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,+BAA+B,GAA/BA;IACT;IAEH,MAAa,QACTC,KAAe,EACfC,EAAU,EAC4C;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEF;YAAO,KAAK;YAAK,IAAI;QAAI;QACrF,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,KAAK;YACL,IAAI;QACR;QAEA,IAAI,CAACC,gBACD,OAAOL,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAMS,aAAa,MAAM,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAChET,OACAO;QAEJ,IAAIE,WAAW,MAAM,IACjB,OAAON,OAAO,IAAI,CAACM,WAAW,KAAK;QAEvC,MAAM,EAAEC,KAAK,EAAE,GAAGD,WAAW,KAAK;QAElC,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,0BAA0B;gBAC1BD;gBACAV;YACJ;YAGJ,MAAMY,mBAAmB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAIZ,OAAOU;YAEjE,IAAIE,iBAAiB,MAAM,IAAI;gBAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,yBAAyB;oBACzBH;oBACAV;oBACA,OAAOY,iBAAiB,KAAK;gBACjC;gBAEJ,OAAOT,OAAO,IAAI,CAACS,iBAAiB,KAAK;YAC7C;YAEA,MAAME,iBAAiBF,iBAAiB,KAAK;YAE7C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,yBAAyB;gBACzB,OAAOD;gBACPd;YACJ;YAGJ,OAAOG,OAAO,EAAE,CAACO;QACrB,EAAE,OAAOM,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,yBAAyB;gBACzBH;gBACAV;gBACA,OAAOgB;YACX;YAEJ,OAAOb,OAAO,IAAI,CAACa;QACvB;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgBzB;IAChB,cAAc;QACV0B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -33,7 +33,9 @@ class UnpublishEntryUseCaseImpl {
33
33
  pw: "u"
34
34
  });
35
35
  if (!canAccessEntry) return Result.fail(EntryNotAuthorizedError.fromModel(model));
36
- const { entry } = await this.createUnpublishEntryDataFactory.create(originalEntry);
36
+ const dataResult = await this.createUnpublishEntryDataFactory.create(model, originalEntry);
37
+ if (dataResult.isFail()) return Result.fail(dataResult.error);
38
+ const { entry } = dataResult.value;
37
39
  try {
38
40
  await this.eventPublisher.publish(new EntryBeforeUnpublishEvent({
39
41
  entry,
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js","sources":["../../../../src/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.ts"],"sourcesContent":["import { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { UnpublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { UnpublishEntryRepository } from \"./abstractions.js\";\nimport { EntryBeforeUnpublishEvent } from \"./events.js\";\nimport { EntryAfterUnpublishEvent } from \"./events.js\";\nimport { EntryUnpublishErrorEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetPublishedRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetPublishedRevisionByEntryId/index.js\";\nimport type { CmsEntry, CmsEntryValues } from \"~/types/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateUnpublishEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/index.js\";\n\nclass UnpublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: UnpublishEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getPublishedRevisionByEntryId: GetPublishedRevisionByEntryIdUseCase.Interface,\n private createUnpublishEntryDataFactory: CreateUnpublishEntryDataFactory.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: \"u\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { id: entryId } = parseIdentifier(id);\n\n const publishedResult = await this.getPublishedRevisionByEntryId.execute<T>(model, entryId);\n\n if (publishedResult.isFail()) {\n return Result.fail(publishedResult.error);\n }\n\n const originalEntry = publishedResult.value;\n\n if (!originalEntry) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n if (originalEntry.id !== id) {\n return Result.fail(new EntryValidationError(`Entry is not published!`));\n }\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n pw: \"u\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { entry } = await this.createUnpublishEntryDataFactory.create<T>(originalEntry);\n\n try {\n await this.eventPublisher.publish(new EntryBeforeUnpublishEvent({ entry, model }));\n\n const unpublishResult = await this.repository.execute<T>(model, entry);\n if (unpublishResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryUnpublishErrorEvent({ entry, model, error: unpublishResult.error })\n );\n return Result.fail(unpublishResult.error);\n }\n\n const storageEntry = unpublishResult.value;\n\n await this.eventPublisher.publish(\n new EntryAfterUnpublishEvent({\n entry,\n storageEntry,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryUnpublishErrorEvent({ entry, model, error: error as Error })\n );\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const UnpublishEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UnpublishEntryUseCaseImpl,\n dependencies: [\n EventPublisher,\n UnpublishEntryRepository,\n AccessControl,\n GetPublishedRevisionByEntryIdUseCase,\n CreateUnpublishEntryDataFactory\n ]\n});\n"],"names":["UnpublishEntryUseCaseImpl","eventPublisher","repository","accessControl","getPublishedRevisionByEntryId","createUnpublishEntryDataFactory","model","id","canAccess","Result","EntryNotAuthorizedError","entryId","parseIdentifier","publishedResult","originalEntry","EntryNotFoundError","EntryValidationError","canAccessEntry","entry","EntryBeforeUnpublishEvent","unpublishResult","EntryUnpublishErrorEvent","storageEntry","EntryAfterUnpublishEvent","error","UnpublishEntryUseCase","createImplementation","UseCaseAbstraction","EventPublisher","UnpublishEntryRepository","AccessControl","GetPublishedRevisionByEntryIdUseCase","CreateUnpublishEntryDataFactory"],"mappings":";;;;;;;;;AAkBA,MAAMA;IACF,YACYC,cAAwC,EACxCC,UAA8C,EAC9CC,aAAsC,EACtCC,6BAA6E,EAC7EC,+BAA0E,CACpF;aALUJ,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,6BAA6B,GAA7BA;aACAC,+BAA+B,GAA/BA;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,MAAM,EAAE,IAAIK,OAAO,EAAE,GAAGC,gBAAgBL;QAExC,MAAMM,kBAAkB,MAAM,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAIP,OAAOK;QAEnF,IAAIE,gBAAgB,MAAM,IACtB,OAAOJ,OAAO,IAAI,CAACI,gBAAgB,KAAK;QAG5C,MAAMC,gBAAgBD,gBAAgB,KAAK;QAE3C,IAAI,CAACC,eACD,OAAOL,OAAO,IAAI,CAAC,IAAIM,mBAAmBR;QAG9C,IAAIO,cAAc,EAAE,KAAKP,IACrB,OAAOE,OAAO,IAAI,CAAC,IAAIO,qBAAqB;QAGhD,MAAMC,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DX;YACA,OAAOQ;YACP,IAAI;QACR;QAEA,IAAI,CAACG,gBACD,OAAOR,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAM,EAAEY,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAIJ;QAEvE,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIK,0BAA0B;gBAAED;gBAAOZ;YAAM;YAE/E,MAAMc,kBAAkB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAId,OAAOY;YAChE,IAAIE,gBAAgB,MAAM,IAAI;gBAC1B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,yBAAyB;oBAAEH;oBAAOZ;oBAAO,OAAOc,gBAAgB,KAAK;gBAAC;gBAE9E,OAAOX,OAAO,IAAI,CAACW,gBAAgB,KAAK;YAC5C;YAEA,MAAME,eAAeF,gBAAgB,KAAK;YAE1C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,yBAAyB;gBACzBL;gBACAI;gBACAhB;YACJ;YAGJ,OAAOG,OAAO,EAAE,CAACS;QACrB,EAAE,OAAOM,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,yBAAyB;gBAAEH;gBAAOZ;gBAAO,OAAOkB;YAAe;YAEvE,OAAOf,OAAO,IAAI,CAACe;QACvB;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgB3B;IAChB,cAAc;QACV4B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.js","sources":["../../../../src/features/contentEntry/UnpublishEntry/UnpublishEntryUseCase.ts"],"sourcesContent":["import { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { UnpublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { UnpublishEntryRepository } from \"./abstractions.js\";\nimport { EntryBeforeUnpublishEvent } from \"./events.js\";\nimport { EntryAfterUnpublishEvent } from \"./events.js\";\nimport { EntryUnpublishErrorEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetPublishedRevisionByEntryIdUseCase } from \"~/features/contentEntry/GetPublishedRevisionByEntryId/index.js\";\nimport type { CmsEntry, CmsEntryValues } from \"~/types/index.js\";\nimport type { CmsModel } from \"~/types/index.js\";\nimport { EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryNotFoundError } from \"~/domain/contentEntry/errors.js\";\nimport { EntryValidationError } from \"~/domain/contentEntry/errors.js\";\nimport { CreateUnpublishEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/CreateUnpublishEntryDataFactory/index.js\";\n\nclass UnpublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private eventPublisher: EventPublisher.Interface,\n private repository: UnpublishEntryRepository.Interface,\n private accessControl: AccessControl.Interface,\n private getPublishedRevisionByEntryId: GetPublishedRevisionByEntryIdUseCase.Interface,\n private createUnpublishEntryDataFactory: CreateUnpublishEntryDataFactory.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: \"u\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const { id: entryId } = parseIdentifier(id);\n\n const publishedResult = await this.getPublishedRevisionByEntryId.execute<T>(model, entryId);\n\n if (publishedResult.isFail()) {\n return Result.fail(publishedResult.error);\n }\n\n const originalEntry = publishedResult.value;\n\n if (!originalEntry) {\n return Result.fail(new EntryNotFoundError(id));\n }\n\n if (originalEntry.id !== id) {\n return Result.fail(new EntryValidationError(`Entry is not published!`));\n }\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry: originalEntry,\n pw: \"u\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n const dataResult = await this.createUnpublishEntryDataFactory.create<T>(\n model,\n originalEntry\n );\n if (dataResult.isFail()) {\n return Result.fail(dataResult.error);\n }\n const { entry } = dataResult.value;\n\n try {\n await this.eventPublisher.publish(new EntryBeforeUnpublishEvent({ entry, model }));\n\n const unpublishResult = await this.repository.execute<T>(model, entry);\n if (unpublishResult.isFail()) {\n await this.eventPublisher.publish(\n new EntryUnpublishErrorEvent({ entry, model, error: unpublishResult.error })\n );\n return Result.fail(unpublishResult.error);\n }\n\n const storageEntry = unpublishResult.value;\n\n await this.eventPublisher.publish(\n new EntryAfterUnpublishEvent({\n entry,\n storageEntry,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n await this.eventPublisher.publish(\n new EntryUnpublishErrorEvent({ entry, model, error: error as Error })\n );\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const UnpublishEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UnpublishEntryUseCaseImpl,\n dependencies: [\n EventPublisher,\n UnpublishEntryRepository,\n AccessControl,\n GetPublishedRevisionByEntryIdUseCase,\n CreateUnpublishEntryDataFactory\n ]\n});\n"],"names":["UnpublishEntryUseCaseImpl","eventPublisher","repository","accessControl","getPublishedRevisionByEntryId","createUnpublishEntryDataFactory","model","id","canAccess","Result","EntryNotAuthorizedError","entryId","parseIdentifier","publishedResult","originalEntry","EntryNotFoundError","EntryValidationError","canAccessEntry","dataResult","entry","EntryBeforeUnpublishEvent","unpublishResult","EntryUnpublishErrorEvent","storageEntry","EntryAfterUnpublishEvent","error","UnpublishEntryUseCase","createImplementation","UseCaseAbstraction","EventPublisher","UnpublishEntryRepository","AccessControl","GetPublishedRevisionByEntryIdUseCase","CreateUnpublishEntryDataFactory"],"mappings":";;;;;;;;;AAkBA,MAAMA;IACF,YACYC,cAAwC,EACxCC,UAA8C,EAC9CC,aAAsC,EACtCC,6BAA6E,EAC7EC,+BAA0E,CACpF;aALUJ,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,6BAA6B,GAA7BA;aACAC,+BAA+B,GAA/BA;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,MAAM,EAAE,IAAIK,OAAO,EAAE,GAAGC,gBAAgBL;QAExC,MAAMM,kBAAkB,MAAM,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAIP,OAAOK;QAEnF,IAAIE,gBAAgB,MAAM,IACtB,OAAOJ,OAAO,IAAI,CAACI,gBAAgB,KAAK;QAG5C,MAAMC,gBAAgBD,gBAAgB,KAAK;QAE3C,IAAI,CAACC,eACD,OAAOL,OAAO,IAAI,CAAC,IAAIM,mBAAmBR;QAG9C,IAAIO,cAAc,EAAE,KAAKP,IACrB,OAAOE,OAAO,IAAI,CAAC,IAAIO,qBAAqB;QAGhD,MAAMC,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3DX;YACA,OAAOQ;YACP,IAAI;QACR;QAEA,IAAI,CAACG,gBACD,OAAOR,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACJ;QAGzD,MAAMY,aAAa,MAAM,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAChEZ,OACAQ;QAEJ,IAAII,WAAW,MAAM,IACjB,OAAOT,OAAO,IAAI,CAACS,WAAW,KAAK;QAEvC,MAAM,EAAEC,KAAK,EAAE,GAAGD,WAAW,KAAK;QAElC,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIE,0BAA0B;gBAAED;gBAAOb;YAAM;YAE/E,MAAMe,kBAAkB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAIf,OAAOa;YAChE,IAAIE,gBAAgB,MAAM,IAAI;gBAC1B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,yBAAyB;oBAAEH;oBAAOb;oBAAO,OAAOe,gBAAgB,KAAK;gBAAC;gBAE9E,OAAOZ,OAAO,IAAI,CAACY,gBAAgB,KAAK;YAC5C;YAEA,MAAME,eAAeF,gBAAgB,KAAK;YAE1C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,yBAAyB;gBACzBL;gBACAI;gBACAjB;YACJ;YAGJ,OAAOG,OAAO,EAAE,CAACU;QACrB,EAAE,OAAOM,OAAO;YACZ,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIH,yBAAyB;gBAAEH;gBAAOb;gBAAO,OAAOmB;YAAe;YAEvE,OAAOhB,OAAO,IAAI,CAACgB;QACvB;IACJ;AACJ;AAEO,MAAMC,8CAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgB5B;IAChB,cAAc;QACV6B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -25,7 +25,9 @@ class UpdateEntryUseCaseImpl {
25
25
  if (result.isFail()) return Result.fail(result.error);
26
26
  const originalEntry = result.value;
27
27
  if (originalEntry.locked) return Result.fail(new EntryLockedError());
28
- const { entry, input } = await this.updateEntryDataFactory.create(model, rawInput, originalEntry, options);
28
+ const dataResult = await this.updateEntryDataFactory.create(model, rawInput, originalEntry, options);
29
+ if (dataResult.isFail()) return Result.fail(dataResult.error);
30
+ const { entry, input } = dataResult.value;
29
31
  const canAccessEntry = await this.accessControl.canAccessEntry({
30
32
  model,
31
33
  entry,
@@ -1 +1 @@
1
- {"version":3,"file":"features/contentEntry/UpdateEntry/UpdateEntryUseCase.js","sources":["../../../../src/features/contentEntry/UpdateEntry/UpdateEntryUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { UpdateEntryRepository, UpdateEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryAfterUpdateEvent, EntryBeforeUpdateEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/abstractions.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { EntryLockedError, EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { UpdateEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/index.js\";\n\nclass UpdateEntryUseCaseImpl 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 private updateEntryDataFactory: UpdateEntryDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n rawInput: UpdateCmsEntryInput<T>,\n options?: UpdateCmsEntryOptionsInput\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 if (originalEntry.locked) {\n return Result.fail(new EntryLockedError());\n }\n\n const { entry, input } = await this.updateEntryDataFactory.create<T>(\n model,\n rawInput,\n originalEntry,\n options\n );\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n await this.eventPublisher.publish(\n new EntryBeforeUpdateEvent({ entry, original: originalEntry, input, model })\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 EntryAfterUpdateEvent({\n entry,\n original: originalEntry,\n input,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const UpdateEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UpdateEntryUseCaseImpl,\n dependencies: [\n EventPublisher,\n UpdateEntryRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n UpdateEntryDataFactory\n ]\n});\n"],"names":["UpdateEntryUseCaseImpl","eventPublisher","repository","accessControl","getRevisionByIdUseCase","updateEntryDataFactory","model","id","rawInput","options","canAccess","Result","EntryNotAuthorizedError","result","originalEntry","EntryLockedError","entry","input","canAccessEntry","EntryBeforeUpdateEvent","updateResult","EntryAfterUpdateEvent","error","UpdateEntryUseCase","createImplementation","UseCaseAbstraction","EventPublisher","UpdateEntryRepository","AccessControl","GetRevisionByIdUseCase","UpdateEntryDataFactory"],"mappings":";;;;;;;;AAgBA,MAAMA;IACF,YACYC,cAAwC,EACxCC,UAA2C,EAC3CC,aAAsC,EACtCC,sBAAwD,EACxDC,sBAAwD,CAClE;aALUJ,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,sBAAsB,GAAtBA;aACAC,sBAAsB,GAAtBA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,EAAU,EACVC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,IAAI;YACA,MAAMO,SAAS,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAIP,OAAOC;YAEnE,IAAIM,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAACE,OAAO,KAAK;YAGnC,MAAMC,gBAAgBD,OAAO,KAAK;YAElC,IAAIC,cAAc,MAAM,EACpB,OAAOH,OAAO,IAAI,CAAC,IAAII;YAG3B,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAC7DX,OACAE,UACAM,eACAL;YAGJ,MAAMS,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC3DZ;gBACAU;gBACA,KAAK;YACT;YAEA,IAAI,CAACE,gBACD,OAAOP,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;YAGzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIa,uBAAuB;gBAAEH;gBAAO,UAAUF;gBAAeG;gBAAOX;YAAM;YAG9E,MAAMc,eAAe,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACd,OAAOU;YAC1D,IAAII,aAAa,MAAM,IACnB,OAAOT,OAAO,IAAI,CAACS,aAAa,KAAK;YAGzC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;gBACtBL;gBACA,UAAUF;gBACVG;gBACAX;YACJ;YAGJ,OAAOK,OAAO,EAAE,CAACK;QACrB,EAAE,OAAOM,OAAO;YACZ,OAAOX,OAAO,IAAI,CAACW;QACvB;IACJ;AACJ;AAEO,MAAMC,wCAAqBC,qBAAqB;IACnD,aAAaC;IACb,gBAAgBzB;IAChB,cAAc;QACV0B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
1
+ {"version":3,"file":"features/contentEntry/UpdateEntry/UpdateEntryUseCase.js","sources":["../../../../src/features/contentEntry/UpdateEntry/UpdateEntryUseCase.ts"],"sourcesContent":["import { createImplementation, Result } from \"@webiny/feature/api\";\nimport { UpdateEntryRepository, UpdateEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { EntryAfterUpdateEvent, EntryBeforeUpdateEvent } from \"./events.js\";\nimport { AccessControl } from \"~/features/shared/abstractions.js\";\nimport { GetRevisionByIdUseCase } from \"~/features/contentEntry/GetRevisionById/abstractions.js\";\nimport type {\n CmsEntry,\n CmsEntryValues,\n CmsModel,\n UpdateCmsEntryInput,\n UpdateCmsEntryOptionsInput\n} from \"~/types/index.js\";\nimport { EntryLockedError, EntryNotAuthorizedError } from \"~/domain/contentEntry/errors.js\";\nimport { UpdateEntryDataFactory } from \"~/features/contentEntry/entryDataFactories/UpdateEntryDataFactory/index.js\";\n\nclass UpdateEntryUseCaseImpl 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 private updateEntryDataFactory: UpdateEntryDataFactory.Interface\n ) {}\n\n async execute<T extends CmsEntryValues = CmsEntryValues>(\n model: CmsModel,\n id: string,\n rawInput: UpdateCmsEntryInput<T>,\n options?: UpdateCmsEntryOptionsInput\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 if (originalEntry.locked) {\n return Result.fail(new EntryLockedError());\n }\n\n const dataResult = await this.updateEntryDataFactory.create<T>(\n model,\n rawInput,\n originalEntry,\n options\n );\n if (dataResult.isFail()) {\n return Result.fail(dataResult.error);\n }\n const { entry, input } = dataResult.value;\n\n const canAccessEntry = await this.accessControl.canAccessEntry({\n model,\n entry,\n rwd: \"w\"\n });\n\n if (!canAccessEntry) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model));\n }\n\n await this.eventPublisher.publish(\n new EntryBeforeUpdateEvent({ entry, original: originalEntry, input, model })\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 EntryAfterUpdateEvent({\n entry,\n original: originalEntry,\n input,\n model\n })\n );\n\n return Result.ok(entry);\n } catch (error) {\n return Result.fail(error as UseCaseAbstraction.Error);\n }\n }\n}\n\nexport const UpdateEntryUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: UpdateEntryUseCaseImpl,\n dependencies: [\n EventPublisher,\n UpdateEntryRepository,\n AccessControl,\n GetRevisionByIdUseCase,\n UpdateEntryDataFactory\n ]\n});\n"],"names":["UpdateEntryUseCaseImpl","eventPublisher","repository","accessControl","getRevisionByIdUseCase","updateEntryDataFactory","model","id","rawInput","options","canAccess","Result","EntryNotAuthorizedError","result","originalEntry","EntryLockedError","dataResult","entry","input","canAccessEntry","EntryBeforeUpdateEvent","updateResult","EntryAfterUpdateEvent","error","UpdateEntryUseCase","createImplementation","UseCaseAbstraction","EventPublisher","UpdateEntryRepository","AccessControl","GetRevisionByIdUseCase","UpdateEntryDataFactory"],"mappings":";;;;;;;;AAgBA,MAAMA;IACF,YACYC,cAAwC,EACxCC,UAA2C,EAC3CC,aAAsC,EACtCC,sBAAwD,EACxDC,sBAAwD,CAClE;aALUJ,cAAc,GAAdA;aACAC,UAAU,GAAVA;aACAC,aAAa,GAAbA;aACAC,sBAAsB,GAAtBA;aACAC,sBAAsB,GAAtBA;IACT;IAEH,MAAM,QACFC,KAAe,EACfC,EAAU,EACVC,QAAgC,EAChCC,OAAoC,EACkB;QACtD,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAEJ;YAAO,KAAK;QAAI;QAC5E,IAAI,CAACI,WACD,OAAOC,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;QAGzD,IAAI;YACA,MAAMO,SAAS,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAIP,OAAOC;YAEnE,IAAIM,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAACE,OAAO,KAAK;YAGnC,MAAMC,gBAAgBD,OAAO,KAAK;YAElC,IAAIC,cAAc,MAAM,EACpB,OAAOH,OAAO,IAAI,CAAC,IAAII;YAG3B,MAAMC,aAAa,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,CACvDV,OACAE,UACAM,eACAL;YAEJ,IAAIO,WAAW,MAAM,IACjB,OAAOL,OAAO,IAAI,CAACK,WAAW,KAAK;YAEvC,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,WAAW,KAAK;YAEzC,MAAMG,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBAC3Db;gBACAW;gBACA,KAAK;YACT;YAEA,IAAI,CAACE,gBACD,OAAOR,OAAO,IAAI,CAACC,wBAAwB,SAAS,CAACN;YAGzD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIc,uBAAuB;gBAAEH;gBAAO,UAAUH;gBAAeI;gBAAOZ;YAAM;YAG9E,MAAMe,eAAe,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACf,OAAOW;YAC1D,IAAII,aAAa,MAAM,IACnB,OAAOV,OAAO,IAAI,CAACU,aAAa,KAAK;YAGzC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,sBAAsB;gBACtBL;gBACA,UAAUH;gBACVI;gBACAZ;YACJ;YAGJ,OAAOK,OAAO,EAAE,CAACM;QACrB,EAAE,OAAOM,OAAO;YACZ,OAAOZ,OAAO,IAAI,CAACY;QACvB;IACJ;AACJ;AAEO,MAAMC,wCAAqBC,qBAAqB;IACnD,aAAaC;IACb,gBAAgB1B;IAChB,cAAc;QACV2B;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
@@ -1,15 +1,17 @@
1
- import { type ICreateEntryRevisionFromDataFactory, type ICreateEntryRevisionFromDataResponse } from "./abstractions.js";
1
+ import { CreateEntryRevisionFromDataFactory as FactoryAbstraction, type ICreateEntryRevisionFromDataFactory } from "./abstractions.js";
2
2
  import { AccessControl, CmsContext } from "../../../../features/shared/abstractions.js";
3
3
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
4
4
  import type { CmsEntry, CmsEntryValues, CmsModel, CreateCmsEntryInput, CreateCmsEntryOptionsInput } from "../../../../types/index.js";
5
5
  import { ModelToAstConverter } from "../../../../features/contentModel/ModelToAstConverter/abstractions.js";
6
+ import { GetLatestRevisionByEntryIdUseCase } from "../../../../features/contentEntry/GetLatestRevisionByEntryId/index.js";
6
7
  declare class CreateEntryRevisionFromDataFactoryImpl implements ICreateEntryRevisionFromDataFactory {
7
8
  private readonly cmsContext;
8
9
  private readonly identityContext;
9
10
  private readonly accessControl;
10
11
  private readonly modelToAstConverter;
11
- constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface, accessControl: AccessControl.Interface, modelToAstConverter: ModelToAstConverter.Interface);
12
- create<TValues extends CmsEntryValues = CmsEntryValues>(sourceId: string, model: CmsModel, rawInput: CreateCmsEntryInput<TValues>, originalEntry: CmsEntry<TValues>, latestStorageEntry: CmsEntry<TValues>, options?: CreateCmsEntryOptionsInput): Promise<ICreateEntryRevisionFromDataResponse<TValues>>;
12
+ private readonly getLatestRevision;
13
+ constructor(cmsContext: CmsContext.Interface, identityContext: IdentityContext.Interface, accessControl: AccessControl.Interface, modelToAstConverter: ModelToAstConverter.Interface, getLatestRevision: GetLatestRevisionByEntryIdUseCase.Interface);
14
+ create<TValues extends CmsEntryValues = CmsEntryValues>(sourceId: string, model: CmsModel, rawInput: CreateCmsEntryInput<TValues>, originalEntry: CmsEntry<TValues>, options?: CreateCmsEntryOptionsInput): Promise<FactoryAbstraction.Return<TValues>>;
13
15
  }
14
16
  export declare const CreateEntryRevisionFromDataFactory: import("@webiny/di").Implementation<typeof CreateEntryRevisionFromDataFactoryImpl>;
15
17
  export {};
@@ -1,11 +1,12 @@
1
- import { createImplementation } from "@webiny/feature/api";
1
+ import { Result, createImplementation } from "@webiny/feature/api";
2
2
  import { CreateEntryRevisionFromDataFactory } from "./abstractions.js";
3
3
  import { AccessControl, CmsContext } from "../../../shared/abstractions.js";
4
4
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
5
5
  import { getDate } from "../../../../utils/date.js";
6
6
  import { getIdentity } from "../../../../utils/identity.js";
7
7
  import { mapAndCleanUpdatedInputData } from "../mapAndCleanUpdatedInputData.js";
8
- import { validateModelEntryDataOrThrow } from "../../../../crud/contentEntry/entryDataValidation.js";
8
+ import { validateModelEntryData } from "../../../../crud/contentEntry/entryDataValidation.js";
9
+ import { EntryValidationError } from "../../../../domain/contentEntry/errors.js";
9
10
  import { referenceFieldsMapping } from "../../../../crud/contentEntry/referenceFieldsMapping.js";
10
11
  import { createIdentifier, parseIdentifier } from "@webiny/utils";
11
12
  import error from "@webiny/error";
@@ -14,6 +15,8 @@ import { NotAuthorizedError } from "../../../../utils/errors.js";
14
15
  import { getSystem } from "../system.js";
15
16
  import { ModelToAstConverter } from "../../../contentModel/ModelToAstConverter/abstractions.js";
16
17
  import { ensureItemIds } from "../../ensureItemIds.js";
18
+ import { hasEntryContentChanged } from "../hasEntryContentChanged.js";
19
+ import { GetLatestRevisionByEntryIdUseCase } from "../../GetLatestRevisionByEntryId/index.js";
17
20
  const increaseEntryIdVersion = (id)=>{
18
21
  const { id: entryId, version } = parseIdentifier(id);
19
22
  if (!version) throw new error("Cannot increase version on the ID without the version part.", "WRONG_ID", {
@@ -29,26 +32,33 @@ const increaseEntryIdVersion = (id)=>{
29
32
  };
30
33
  };
31
34
  class CreateEntryRevisionFromDataFactoryImpl {
32
- constructor(cmsContext, identityContext, accessControl, modelToAstConverter){
35
+ constructor(cmsContext, identityContext, accessControl, modelToAstConverter, getLatestRevision){
33
36
  this.cmsContext = cmsContext;
34
37
  this.identityContext = identityContext;
35
38
  this.accessControl = accessControl;
36
39
  this.modelToAstConverter = modelToAstConverter;
40
+ this.getLatestRevision = getLatestRevision;
37
41
  }
38
- async create(sourceId, model, rawInput, originalEntry, latestStorageEntry, options) {
42
+ async create(sourceId, model, rawInput, originalEntry, options) {
43
+ const latestResult = await this.getLatestRevision.execute(model, {
44
+ id: originalEntry.entryId
45
+ });
46
+ if (latestResult.isFail()) return Result.fail(latestResult.error);
47
+ const latestStorageEntry = latestResult.value;
39
48
  const initialValues = {
40
49
  ...originalEntry.values,
41
50
  ...mapAndCleanUpdatedInputData(model, rawInput.values)
42
51
  };
43
52
  const modelAst = this.modelToAstConverter.toAst(model);
44
53
  await ensureItemIds(modelAst, initialValues);
45
- await validateModelEntryDataOrThrow({
54
+ const invalidFields = await validateModelEntryData({
46
55
  context: this.cmsContext,
47
56
  model,
48
57
  values: initialValues,
49
58
  entry: originalEntry,
50
59
  skipValidation: options?.skipValidation
51
60
  });
61
+ if (invalidFields.length > 0) return Result.fail(new EntryValidationError("Validation failed.", invalidFields));
52
62
  const values = await referenceFieldsMapping({
53
63
  context: this.cmsContext,
54
64
  model,
@@ -66,13 +76,13 @@ class CreateEntryRevisionFromDataFactoryImpl {
66
76
  model,
67
77
  pw: "p"
68
78
  });
69
- if (!canPublish) throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
79
+ if (!canPublish) return Result.fail(new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`));
70
80
  } else if (status === STATUS_UNPUBLISHED) {
71
81
  const canUnpublish = await this.accessControl.canAccessEntry({
72
82
  model,
73
83
  pw: "u"
74
84
  });
75
- if (!canUnpublish) throw new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`);
85
+ if (!canUnpublish) return Result.fail(new NotAuthorizedError(`Not allowed to access "${model.modelId}" entries.`));
76
86
  }
77
87
  }
78
88
  const locked = status !== STATUS_DRAFT;
@@ -102,16 +112,31 @@ class CreateEntryRevisionFromDataFactoryImpl {
102
112
  lastPublishedBy: getIdentity(rawInput.lastPublishedBy, currentIdentity)
103
113
  };
104
114
  }
115
+ const contentChanged = hasEntryContentChanged({
116
+ values,
117
+ baselineValues: latestStorageEntry.values
118
+ });
119
+ const entryLevelSaved = contentChanged ? {
120
+ savedOn: currentDateTime,
121
+ modifiedOn: currentDateTime,
122
+ savedBy: currentIdentity,
123
+ modifiedBy: currentIdentity
124
+ } : {
125
+ savedOn: latestStorageEntry.savedOn,
126
+ modifiedOn: latestStorageEntry.modifiedOn,
127
+ savedBy: latestStorageEntry.savedBy,
128
+ modifiedBy: latestStorageEntry.modifiedBy
129
+ };
105
130
  const entry = {
106
131
  ...originalEntry,
107
132
  id,
108
133
  version: nextVersion,
109
134
  createdOn: getDate(rawInput.createdOn, latestStorageEntry.createdOn),
110
- savedOn: getDate(rawInput.savedOn, currentDateTime),
111
- modifiedOn: getDate(rawInput.modifiedOn, currentDateTime),
135
+ savedOn: getDate(rawInput.savedOn, entryLevelSaved.savedOn),
136
+ modifiedOn: getDate(rawInput.modifiedOn, entryLevelSaved.modifiedOn),
112
137
  createdBy: getIdentity(rawInput.createdBy, latestStorageEntry.createdBy),
113
- savedBy: getIdentity(rawInput.savedBy, currentIdentity),
114
- modifiedBy: getIdentity(rawInput.modifiedBy, currentIdentity),
138
+ savedBy: getIdentity(rawInput.savedBy, entryLevelSaved.savedBy),
139
+ modifiedBy: getIdentity(rawInput.modifiedBy, entryLevelSaved.modifiedBy),
115
140
  ...entryLevelPublishingMetaFields,
116
141
  revisionCreatedOn: getDate(rawInput.revisionCreatedOn, currentDateTime),
117
142
  revisionSavedOn: getDate(rawInput.revisionSavedOn, currentDateTime),
@@ -131,13 +156,13 @@ class CreateEntryRevisionFromDataFactoryImpl {
131
156
  live: originalEntry.live,
132
157
  expiresAt: null
133
158
  };
134
- return {
159
+ return Result.ok({
135
160
  entry,
136
161
  input: {
137
162
  ...rawInput,
138
163
  values: structuredClone(values)
139
164
  }
140
- };
165
+ });
141
166
  }
142
167
  }
143
168
  const CreateEntryRevisionFromDataFactory_CreateEntryRevisionFromDataFactory = createImplementation({
@@ -147,7 +172,8 @@ const CreateEntryRevisionFromDataFactory_CreateEntryRevisionFromDataFactory = cr
147
172
  CmsContext,
148
173
  IdentityContext,
149
174
  AccessControl,
150
- ModelToAstConverter
175
+ ModelToAstConverter,
176
+ GetLatestRevisionByEntryIdUseCase
151
177
  ]
152
178
  });
153
179
  export { CreateEntryRevisionFromDataFactory_CreateEntryRevisionFromDataFactory as CreateEntryRevisionFromDataFactory };