@webiny/api-record-locking 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.e9333b3f0b

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 (164) hide show
  1. package/RecordLockingAppFeature.d.ts +11 -0
  2. package/RecordLockingAppFeature.js +20 -0
  3. package/RecordLockingAppFeature.js.map +1 -0
  4. package/domain/LockRecord.js +63 -70
  5. package/domain/LockRecord.js.map +1 -1
  6. package/domain/RecordLockingModel.js +27 -23
  7. package/domain/RecordLockingModel.js.map +1 -1
  8. package/domain/abstractions.d.ts +9 -3
  9. package/domain/abstractions.js +3 -7
  10. package/domain/abstractions.js.map +1 -1
  11. package/domain/calculateExpiresOn.js +5 -6
  12. package/domain/calculateExpiresOn.js.map +1 -1
  13. package/domain/errors.js +71 -81
  14. package/domain/errors.js.map +1 -1
  15. package/domain/index.js +0 -2
  16. package/domain/types.js +6 -9
  17. package/domain/types.js.map +1 -1
  18. package/features/GetLockRecord/GetLockRecordRepository.d.ts +4 -3
  19. package/features/GetLockRecord/GetLockRecordRepository.js +33 -25
  20. package/features/GetLockRecord/GetLockRecordRepository.js.map +1 -1
  21. package/features/GetLockRecord/GetLockRecordUseCase.js +13 -10
  22. package/features/GetLockRecord/GetLockRecordUseCase.js.map +1 -1
  23. package/features/GetLockRecord/abstractions.js +3 -14
  24. package/features/GetLockRecord/abstractions.js.map +1 -1
  25. package/features/GetLockRecord/feature.js +7 -6
  26. package/features/GetLockRecord/feature.js.map +1 -1
  27. package/features/GetLockRecord/index.js +0 -2
  28. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +19 -28
  29. package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -1
  30. package/features/GetLockedEntryLockRecord/abstractions.js +2 -10
  31. package/features/GetLockedEntryLockRecord/abstractions.js.map +1 -1
  32. package/features/GetLockedEntryLockRecord/feature.js +6 -5
  33. package/features/GetLockedEntryLockRecord/feature.js.map +1 -1
  34. package/features/GetLockedEntryLockRecord/index.js +0 -2
  35. package/features/IsEntryLocked/IsEntryLockedUseCase.js +22 -28
  36. package/features/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -1
  37. package/features/IsEntryLocked/abstractions.js +2 -9
  38. package/features/IsEntryLocked/abstractions.js.map +1 -1
  39. package/features/IsEntryLocked/feature.js +6 -5
  40. package/features/IsEntryLocked/feature.js.map +1 -1
  41. package/features/IsEntryLocked/index.js +0 -2
  42. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +3 -3
  43. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js +27 -33
  44. package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -1
  45. package/features/KickOutCurrentUser/abstractions.js +2 -6
  46. package/features/KickOutCurrentUser/abstractions.js.map +1 -1
  47. package/features/KickOutCurrentUser/feature.js +6 -5
  48. package/features/KickOutCurrentUser/feature.js.map +1 -1
  49. package/features/KickOutCurrentUser/index.js +0 -2
  50. package/features/ListAllLockRecords/ListAllLockRecordsRepository.d.ts +5 -3
  51. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js +39 -32
  52. package/features/ListAllLockRecords/ListAllLockRecordsRepository.js.map +1 -1
  53. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js +13 -10
  54. package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js.map +1 -1
  55. package/features/ListAllLockRecords/abstractions.js +3 -14
  56. package/features/ListAllLockRecords/abstractions.js.map +1 -1
  57. package/features/ListAllLockRecords/feature.js +7 -6
  58. package/features/ListAllLockRecords/feature.js.map +1 -1
  59. package/features/ListAllLockRecords/index.js +0 -2
  60. package/features/ListLockRecords/ListLockRecordsRepository.d.ts +6 -3
  61. package/features/ListLockRecords/ListLockRecordsRepository.js +39 -32
  62. package/features/ListLockRecords/ListLockRecordsRepository.js.map +1 -1
  63. package/features/ListLockRecords/ListLockRecordsUseCase.js +26 -23
  64. package/features/ListLockRecords/ListLockRecordsUseCase.js.map +1 -1
  65. package/features/ListLockRecords/abstractions.js +3 -14
  66. package/features/ListLockRecords/abstractions.js.map +1 -1
  67. package/features/ListLockRecords/feature.js +7 -6
  68. package/features/ListLockRecords/feature.js.map +1 -1
  69. package/features/ListLockRecords/index.js +0 -2
  70. package/features/LockEntry/LockEntryEventsDecorator.js +31 -31
  71. package/features/LockEntry/LockEntryEventsDecorator.js.map +1 -1
  72. package/features/LockEntry/LockEntryRepository.d.ts +4 -3
  73. package/features/LockEntry/LockEntryRepository.js +35 -31
  74. package/features/LockEntry/LockEntryRepository.js.map +1 -1
  75. package/features/LockEntry/LockEntryUseCase.js +21 -26
  76. package/features/LockEntry/LockEntryUseCase.js.map +1 -1
  77. package/features/LockEntry/abstractions.js +3 -14
  78. package/features/LockEntry/abstractions.js.map +1 -1
  79. package/features/LockEntry/events.js +25 -33
  80. package/features/LockEntry/events.js.map +1 -1
  81. package/features/LockEntry/feature.js +8 -7
  82. package/features/LockEntry/feature.js.map +1 -1
  83. package/features/LockEntry/index.js +0 -2
  84. package/features/RecordLockingFeature.d.ts +0 -5
  85. package/features/RecordLockingFeature.js +21 -22
  86. package/features/RecordLockingFeature.js.map +1 -1
  87. package/features/RecordLockingModelProvider.d.ts +18 -0
  88. package/features/RecordLockingModelProvider.js +22 -0
  89. package/features/RecordLockingModelProvider.js.map +1 -0
  90. package/features/UnlockEntry/UnlockEntryEventsDecorator.js +32 -32
  91. package/features/UnlockEntry/UnlockEntryEventsDecorator.js.map +1 -1
  92. package/features/UnlockEntry/UnlockEntryRepository.d.ts +3 -3
  93. package/features/UnlockEntry/UnlockEntryRepository.js +31 -28
  94. package/features/UnlockEntry/UnlockEntryRepository.js.map +1 -1
  95. package/features/UnlockEntry/UnlockEntryUseCase.js +53 -69
  96. package/features/UnlockEntry/UnlockEntryUseCase.js.map +1 -1
  97. package/features/UnlockEntry/abstractions.js +3 -14
  98. package/features/UnlockEntry/abstractions.js.map +1 -1
  99. package/features/UnlockEntry/events.js +25 -33
  100. package/features/UnlockEntry/events.js.map +1 -1
  101. package/features/UnlockEntry/feature.js +8 -7
  102. package/features/UnlockEntry/feature.js.map +1 -1
  103. package/features/UnlockEntry/hasFullAccessPermission.js +6 -7
  104. package/features/UnlockEntry/hasFullAccessPermission.js.map +1 -1
  105. package/features/UnlockEntry/index.js +0 -2
  106. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js +31 -31
  107. package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js.map +1 -1
  108. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.d.ts +3 -3
  109. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js +33 -31
  110. package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js.map +1 -1
  111. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js +62 -79
  112. package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js.map +1 -1
  113. package/features/UnlockEntryRequest/abstractions.js +3 -14
  114. package/features/UnlockEntryRequest/abstractions.js.map +1 -1
  115. package/features/UnlockEntryRequest/events.js +25 -33
  116. package/features/UnlockEntryRequest/events.js.map +1 -1
  117. package/features/UnlockEntryRequest/feature.js +8 -7
  118. package/features/UnlockEntryRequest/feature.js.map +1 -1
  119. package/features/UnlockEntryRequest/index.js +0 -2
  120. package/features/UpdateEntryLock/UpdateEntryLockRepository.d.ts +4 -3
  121. package/features/UpdateEntryLock/UpdateEntryLockRepository.js +47 -49
  122. package/features/UpdateEntryLock/UpdateEntryLockRepository.js.map +1 -1
  123. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js +40 -51
  124. package/features/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -1
  125. package/features/UpdateEntryLock/abstractions.js +3 -14
  126. package/features/UpdateEntryLock/abstractions.js.map +1 -1
  127. package/features/UpdateEntryLock/feature.js +7 -6
  128. package/features/UpdateEntryLock/feature.js.map +1 -1
  129. package/features/UpdateEntryLock/index.js +0 -2
  130. package/graphql/RecordLockingGraphQLSchema.d.ts +25 -0
  131. package/graphql/RecordLockingGraphQLSchema.js +390 -0
  132. package/graphql/RecordLockingGraphQLSchema.js.map +1 -0
  133. package/graphql/checkPermissions.d.ts +3 -3
  134. package/graphql/checkPermissions.js +4 -10
  135. package/graphql/checkPermissions.js.map +1 -1
  136. package/graphql/resolve.d.ts +1 -1
  137. package/graphql/resolve.js +16 -18
  138. package/graphql/resolve.js.map +1 -1
  139. package/index.d.ts +2 -9
  140. package/index.js +1 -63
  141. package/package.json +23 -21
  142. package/types.js +6 -9
  143. package/types.js.map +1 -1
  144. package/utils/convertWhereCondition.js +20 -32
  145. package/utils/convertWhereCondition.js.map +1 -1
  146. package/utils/getTimeout.js +8 -15
  147. package/utils/getTimeout.js.map +1 -1
  148. package/utils/lockRecordDatabaseId.js +6 -11
  149. package/utils/lockRecordDatabaseId.js.map +1 -1
  150. package/domain/index.js.map +0 -1
  151. package/features/GetLockRecord/index.js.map +0 -1
  152. package/features/GetLockedEntryLockRecord/index.js.map +0 -1
  153. package/features/IsEntryLocked/index.js.map +0 -1
  154. package/features/KickOutCurrentUser/index.js.map +0 -1
  155. package/features/ListAllLockRecords/index.js.map +0 -1
  156. package/features/ListLockRecords/index.js.map +0 -1
  157. package/features/LockEntry/index.js.map +0 -1
  158. package/features/UnlockEntry/index.js.map +0 -1
  159. package/features/UnlockEntryRequest/index.js.map +0 -1
  160. package/features/UpdateEntryLock/index.js.map +0 -1
  161. package/graphql/schema.d.ts +0 -11
  162. package/graphql/schema.js +0 -315
  163. package/graphql/schema.js.map +0 -1
  164. package/index.js.map +0 -1
@@ -1,17 +1,6 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
-
3
- // Input/Output types
4
-
5
- /**
6
- * ListLockRecords Use Case - Lists active lock records (filters out expired, excludes current user)
7
- */
8
-
9
- export const ListLockRecordsUseCase = createAbstraction("ListLockRecordsUseCase");
10
-
11
- /**
12
- * ListLockRecordsRepository - Fetches lock records from storage with filtering
13
- */
14
-
15
- export const ListLockRecordsRepository = createAbstraction("ListLockRecordsRepository");
2
+ const ListLockRecordsUseCase = createAbstraction("ListLockRecordsUseCase");
3
+ const ListLockRecordsRepository = createAbstraction("ListLockRecordsRepository");
4
+ export { ListLockRecordsRepository, ListLockRecordsUseCase };
16
5
 
17
6
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","ListLockRecordsUseCase","ListLockRecordsRepository"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport type { CmsEntryListParams, CmsEntryMeta } from \"@webiny/api-headless-cms/types\";\nimport type {\n DateStringInterfaceGenerator,\n IdentityInterfaceGenerator,\n IdInterfaceGenerator\n} from \"@webiny/api\";\n\n// Input/Output types\nexport interface IListLockRecordsWhere\n extends\n IdInterfaceGenerator<\"id\">,\n IdentityInterfaceGenerator<\"lockedBy\">,\n IdentityInterfaceGenerator<\"createdBy\">,\n DateStringInterfaceGenerator<\"lockedOn\">,\n DateStringInterfaceGenerator<\"updatedOn\">,\n DateStringInterfaceGenerator<\"savedOn\">,\n DateStringInterfaceGenerator<\"expiresOn\"> {}\n\nexport interface ListLockRecordsInput extends Pick<CmsEntryListParams, \"limit\" | \"sort\" | \"after\"> {\n where?: IListLockRecordsWhere;\n}\n\nexport interface ListLockRecordsOutput {\n items: ILockRecord[];\n meta: CmsEntryMeta;\n}\n\n/**\n * ListLockRecords Use Case - Lists active lock records (filters out expired, excludes current user)\n */\nexport interface IListLockRecordsUseCase {\n execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, UseCaseError>>;\n}\n\nexport interface IListLockRecordsUseCaseErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype UseCaseError = IListLockRecordsUseCaseErrors[keyof IListLockRecordsUseCaseErrors];\n\nexport const ListLockRecordsUseCase =\n createAbstraction<IListLockRecordsUseCase>(\"ListLockRecordsUseCase\");\n\nexport namespace ListLockRecordsUseCase {\n export type Interface = IListLockRecordsUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * ListLockRecordsRepository - Fetches lock records from storage with filtering\n */\nexport interface IListLockRecordsRepository {\n execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, RepositoryError>>;\n}\n\nexport interface IListLockRecordsRepositoryErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype RepositoryError = IListLockRecordsRepositoryErrors[keyof IListLockRecordsRepositoryErrors];\n\nexport const ListLockRecordsRepository = createAbstraction<IListLockRecordsRepository>(\n \"ListLockRecordsRepository\"\n);\n\nexport namespace ListLockRecordsRepository {\n export type Interface = IListLockRecordsRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAU/D;;AAoBA;AACA;AACA;;AAWA,OAAO,MAAMC,sBAAsB,GAC/BD,iBAAiB,CAA0B,wBAAwB,CAAC;;AAOxE;AACA;AACA;;AAWA,OAAO,MAAME,yBAAyB,GAAGF,iBAAiB,CACtD,2BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/ListLockRecords/abstractions.js","sources":["../../../src/features/ListLockRecords/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport type { CmsEntryListParams, CmsEntryMeta } from \"@webiny/api-headless-cms/types\";\nimport type {\n DateStringInterfaceGenerator,\n IdentityInterfaceGenerator,\n IdInterfaceGenerator\n} from \"@webiny/api\";\n\n// Input/Output types\nexport interface IListLockRecordsWhere\n extends\n IdInterfaceGenerator<\"id\">,\n IdentityInterfaceGenerator<\"lockedBy\">,\n IdentityInterfaceGenerator<\"createdBy\">,\n DateStringInterfaceGenerator<\"lockedOn\">,\n DateStringInterfaceGenerator<\"updatedOn\">,\n DateStringInterfaceGenerator<\"savedOn\">,\n DateStringInterfaceGenerator<\"expiresOn\"> {}\n\nexport interface ListLockRecordsInput extends Pick<CmsEntryListParams, \"limit\" | \"sort\" | \"after\"> {\n where?: IListLockRecordsWhere;\n}\n\nexport interface ListLockRecordsOutput {\n items: ILockRecord[];\n meta: CmsEntryMeta;\n}\n\n/**\n * ListLockRecords Use Case - Lists active lock records (filters out expired, excludes current user)\n */\nexport interface IListLockRecordsUseCase {\n execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, UseCaseError>>;\n}\n\nexport interface IListLockRecordsUseCaseErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype UseCaseError = IListLockRecordsUseCaseErrors[keyof IListLockRecordsUseCaseErrors];\n\nexport const ListLockRecordsUseCase =\n createAbstraction<IListLockRecordsUseCase>(\"ListLockRecordsUseCase\");\n\nexport namespace ListLockRecordsUseCase {\n export type Interface = IListLockRecordsUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * ListLockRecordsRepository - Fetches lock records from storage with filtering\n */\nexport interface IListLockRecordsRepository {\n execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, RepositoryError>>;\n}\n\nexport interface IListLockRecordsRepositoryErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype RepositoryError = IListLockRecordsRepositoryErrors[keyof IListLockRecordsRepositoryErrors];\n\nexport const ListLockRecordsRepository = createAbstraction<IListLockRecordsRepository>(\n \"ListLockRecordsRepository\"\n);\n\nexport namespace ListLockRecordsRepository {\n export type Interface = IListLockRecordsRepository;\n export type Error = RepositoryError;\n}\n"],"names":["ListLockRecordsUseCase","createAbstraction","ListLockRecordsRepository"],"mappings":";AA2CO,MAAMA,yBACTC,kBAA2C;AAoBxC,MAAMC,4BAA4BD,kBACrC"}
@@ -1,12 +1,13 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { ListLockRecordsUseCase } from "./ListLockRecordsUseCase.js";
3
3
  import { ListLockRecordsRepository } from "./ListLockRecordsRepository.js";
4
- export const ListLockRecordsFeature = createFeature({
5
- name: "ListLockRecords",
6
- register(container) {
7
- container.register(ListLockRecordsUseCase);
8
- container.register(ListLockRecordsRepository).inSingletonScope();
9
- }
4
+ const ListLockRecordsFeature = createFeature({
5
+ name: "ListLockRecords",
6
+ register (container) {
7
+ container.register(ListLockRecordsUseCase);
8
+ container.register(ListLockRecordsRepository).inSingletonScope();
9
+ }
10
10
  });
11
+ export { ListLockRecordsFeature };
11
12
 
12
13
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","ListLockRecordsUseCase","ListLockRecordsRepository","ListLockRecordsFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListLockRecordsUseCase } from \"./ListLockRecordsUseCase.js\";\nimport { ListLockRecordsRepository } from \"./ListLockRecordsRepository.js\";\n\nexport const ListLockRecordsFeature = createFeature({\n name: \"ListLockRecords\",\n register(container) {\n container.register(ListLockRecordsUseCase);\n container.register(ListLockRecordsRepository).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,sBAAsB;AAC/B,SAASC,yBAAyB;AAElC,OAAO,MAAMC,sBAAsB,GAAGH,aAAa,CAAC;EAChDI,IAAI,EAAE,iBAAiB;EACvBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,sBAAsB,CAAC;IAC1CK,SAAS,CAACD,QAAQ,CAACH,yBAAyB,CAAC,CAACK,gBAAgB,CAAC,CAAC;EACpE;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/ListLockRecords/feature.js","sources":["../../../src/features/ListLockRecords/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListLockRecordsUseCase } from \"./ListLockRecordsUseCase.js\";\nimport { ListLockRecordsRepository } from \"./ListLockRecordsRepository.js\";\n\nexport const ListLockRecordsFeature = createFeature({\n name: \"ListLockRecords\",\n register(container) {\n container.register(ListLockRecordsUseCase);\n container.register(ListLockRecordsRepository).inSingletonScope();\n }\n});\n"],"names":["ListLockRecordsFeature","createFeature","container","ListLockRecordsUseCase","ListLockRecordsRepository"],"mappings":";;;AAIO,MAAMA,yBAAyBC,cAAc;IAChD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE,2BAA2B,gBAAgB;IAClE;AACJ"}
@@ -1,3 +1 @@
1
1
  export * from "./abstractions.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -2,39 +2,39 @@ import { LockEntryUseCase } from "./abstractions.js";
2
2
  import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
3
3
  import { EntryAfterLockEvent, EntryBeforeLockEvent, EntryLockErrorEvent } from "./events.js";
4
4
  class LockEntryErrorDecoratorImpl {
5
- constructor(eventPublisher, decoratee) {
6
- this.eventPublisher = eventPublisher;
7
- this.decoratee = decoratee;
8
- }
9
- async execute(input) {
10
- // Publish before event
11
- await this.eventPublisher.publish(new EntryBeforeLockEvent({
12
- id: input.id,
13
- type: input.type
14
- }));
15
- const result = await this.decoratee.execute(input);
16
- if (result.isFail()) {
17
- const error = result.error;
18
- await this.eventPublisher.publish(new EntryLockErrorEvent({
19
- id: input.id,
20
- type: input.type,
21
- error
22
- }));
23
- return result;
5
+ constructor(eventPublisher, decoratee){
6
+ this.eventPublisher = eventPublisher;
7
+ this.decoratee = decoratee;
8
+ }
9
+ async execute(input) {
10
+ await this.eventPublisher.publish(new EntryBeforeLockEvent({
11
+ id: input.id,
12
+ type: input.type
13
+ }));
14
+ const result = await this.decoratee.execute(input);
15
+ if (result.isFail()) {
16
+ const error = result.error;
17
+ await this.eventPublisher.publish(new EntryLockErrorEvent({
18
+ id: input.id,
19
+ type: input.type,
20
+ error
21
+ }));
22
+ return result;
23
+ }
24
+ await this.eventPublisher.publish(new EntryAfterLockEvent({
25
+ id: input.id,
26
+ type: input.type,
27
+ record: result.value
28
+ }));
29
+ return result;
24
30
  }
25
-
26
- // Publish after event
27
- await this.eventPublisher.publish(new EntryAfterLockEvent({
28
- id: input.id,
29
- type: input.type,
30
- record: result.value
31
- }));
32
- return result;
33
- }
34
31
  }
35
- export const LockEntryEventsDecorator = LockEntryUseCase.createDecorator({
36
- decorator: LockEntryErrorDecoratorImpl,
37
- dependencies: [EventPublisher]
32
+ const LockEntryEventsDecorator = LockEntryUseCase.createDecorator({
33
+ decorator: LockEntryErrorDecoratorImpl,
34
+ dependencies: [
35
+ EventPublisher
36
+ ]
38
37
  });
38
+ export { LockEntryEventsDecorator };
39
39
 
40
40
  //# sourceMappingURL=LockEntryEventsDecorator.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["LockEntryUseCase","EventPublisher","EntryAfterLockEvent","EntryBeforeLockEvent","EntryLockErrorEvent","LockEntryErrorDecoratorImpl","constructor","eventPublisher","decoratee","execute","input","publish","id","type","result","isFail","error","record","value","LockEntryEventsDecorator","createDecorator","decorator","dependencies"],"sources":["LockEntryEventsDecorator.ts"],"sourcesContent":["import {\n type LockEntryInput,\n LockEntryUseCase as UseCaseAbstraction,\n LockEntryUseCase\n} from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { ILockRecord } from \"~/domain/index.js\";\nimport { Result } from \"@webiny/feature/api/index.js\";\nimport { EntryAfterLockEvent, EntryBeforeLockEvent, EntryLockErrorEvent } from \"./events.js\";\n\nclass LockEntryErrorDecoratorImpl implements LockEntryUseCase.Interface {\n constructor(\n private readonly eventPublisher: EventPublisher.Interface,\n private readonly decoratee: LockEntryUseCase.Interface\n ) {}\n async execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseAbstraction.Error>> {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeLockEvent({\n id: input.id,\n type: input.type\n })\n );\n\n const result = await this.decoratee.execute(input);\n\n if (result.isFail()) {\n const error = result.error;\n\n await this.eventPublisher.publish(\n new EntryLockErrorEvent({\n id: input.id,\n type: input.type,\n error\n })\n );\n\n return result;\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterLockEvent({\n id: input.id,\n type: input.type,\n record: result.value\n })\n );\n\n return result;\n }\n}\n\nexport const LockEntryEventsDecorator = LockEntryUseCase.createDecorator({\n decorator: LockEntryErrorDecoratorImpl,\n dependencies: [EventPublisher]\n});\n"],"mappings":"AAAA,SAGIA,gBAAgB;AAEpB,SAASC,cAAc,QAAQ,mDAAmD;AAGlF,SAASC,mBAAmB,EAAEC,oBAAoB,EAAEC,mBAAmB;AAEvE,MAAMC,2BAA2B,CAAuC;EACpEC,WAAWA,CACUC,cAAwC,EACxCC,SAAqC,EACxD;IAAA,KAFmBD,cAAwC,GAAxCA,cAAwC;IAAA,KACxCC,SAAqC,GAArCA,SAAqC;EACvD;EACH,MAAMC,OAAOA,CAACC,KAAqB,EAA0D;IACzF;IACA,MAAM,IAAI,CAACH,cAAc,CAACI,OAAO,CAC7B,IAAIR,oBAAoB,CAAC;MACrBS,EAAE,EAAEF,KAAK,CAACE,EAAE;MACZC,IAAI,EAAEH,KAAK,CAACG;IAChB,CAAC,CACL,CAAC;IAED,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACN,SAAS,CAACC,OAAO,CAACC,KAAK,CAAC;IAElD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,MAAMC,KAAK,GAAGF,MAAM,CAACE,KAAK;MAE1B,MAAM,IAAI,CAACT,cAAc,CAACI,OAAO,CAC7B,IAAIP,mBAAmB,CAAC;QACpBQ,EAAE,EAAEF,KAAK,CAACE,EAAE;QACZC,IAAI,EAAEH,KAAK,CAACG,IAAI;QAChBG;MACJ,CAAC,CACL,CAAC;MAED,OAAOF,MAAM;IACjB;;IAEA;IACA,MAAM,IAAI,CAACP,cAAc,CAACI,OAAO,CAC7B,IAAIT,mBAAmB,CAAC;MACpBU,EAAE,EAAEF,KAAK,CAACE,EAAE;MACZC,IAAI,EAAEH,KAAK,CAACG,IAAI;MAChBI,MAAM,EAAEH,MAAM,CAACI;IACnB,CAAC,CACL,CAAC;IAED,OAAOJ,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMK,wBAAwB,GAAGnB,gBAAgB,CAACoB,eAAe,CAAC;EACrEC,SAAS,EAAEhB,2BAA2B;EACtCiB,YAAY,EAAE,CAACrB,cAAc;AACjC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/LockEntry/LockEntryEventsDecorator.js","sources":["../../../src/features/LockEntry/LockEntryEventsDecorator.ts"],"sourcesContent":["import {\n type LockEntryInput,\n LockEntryUseCase as UseCaseAbstraction,\n LockEntryUseCase\n} from \"./abstractions.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { ILockRecord } from \"~/domain/index.js\";\nimport { Result } from \"@webiny/feature/api/index.js\";\nimport { EntryAfterLockEvent, EntryBeforeLockEvent, EntryLockErrorEvent } from \"./events.js\";\n\nclass LockEntryErrorDecoratorImpl implements LockEntryUseCase.Interface {\n constructor(\n private readonly eventPublisher: EventPublisher.Interface,\n private readonly decoratee: LockEntryUseCase.Interface\n ) {}\n async execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseAbstraction.Error>> {\n // Publish before event\n await this.eventPublisher.publish(\n new EntryBeforeLockEvent({\n id: input.id,\n type: input.type\n })\n );\n\n const result = await this.decoratee.execute(input);\n\n if (result.isFail()) {\n const error = result.error;\n\n await this.eventPublisher.publish(\n new EntryLockErrorEvent({\n id: input.id,\n type: input.type,\n error\n })\n );\n\n return result;\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new EntryAfterLockEvent({\n id: input.id,\n type: input.type,\n record: result.value\n })\n );\n\n return result;\n }\n}\n\nexport const LockEntryEventsDecorator = LockEntryUseCase.createDecorator({\n decorator: LockEntryErrorDecoratorImpl,\n dependencies: [EventPublisher]\n});\n"],"names":["LockEntryErrorDecoratorImpl","eventPublisher","decoratee","input","EntryBeforeLockEvent","result","error","EntryLockErrorEvent","EntryAfterLockEvent","LockEntryEventsDecorator","LockEntryUseCase","EventPublisher"],"mappings":";;;AAUA,MAAMA;IACF,YACqBC,cAAwC,EACxCC,SAAqC,CACxD;aAFmBD,cAAc,GAAdA;aACAC,SAAS,GAATA;IAClB;IACH,MAAM,QAAQC,KAAqB,EAA0D;QAEzF,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,qBAAqB;YACrB,IAAID,MAAM,EAAE;YACZ,MAAMA,MAAM,IAAI;QACpB;QAGJ,MAAME,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAACF;QAE5C,IAAIE,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAE1B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIE,oBAAoB;gBACpB,IAAIJ,MAAM,EAAE;gBACZ,MAAMA,MAAM,IAAI;gBAChBG;YACJ;YAGJ,OAAOD;QACX;QAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,oBAAoB;YACpB,IAAIL,MAAM,EAAE;YACZ,MAAMA,MAAM,IAAI;YAChB,QAAQE,OAAO,KAAK;QACxB;QAGJ,OAAOA;IACX;AACJ;AAEO,MAAMI,2BAA2BC,iBAAiB,eAAe,CAAC;IACrE,WAAWV;IACX,cAAc;QAACW;KAAe;AAClC"}
@@ -1,13 +1,14 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
3
3
  import { LockEntryInput, LockEntryRepository as RepositoryAbstraction } from "./abstractions.js";
4
- import { RecordLockingConfig, RecordLockingModel } from "../../domain/abstractions.js";
4
+ import { RecordLockingConfig } from "../../domain/abstractions.js";
5
+ import { RecordLockingModelProvider } from "../../domain/abstractions.js";
5
6
  import type { ILockRecord } from "../../domain/LockRecord.js";
6
7
  declare class LockEntryRepositoryImpl implements RepositoryAbstraction.Interface {
7
- private model;
8
+ private modelProvider;
8
9
  private config;
9
10
  private createEntry;
10
- constructor(model: RecordLockingModel.Interface, config: RecordLockingConfig.Interface, createEntry: CreateEntryUseCase.Interface);
11
+ constructor(modelProvider: RecordLockingModelProvider.Interface, config: RecordLockingConfig.Interface, createEntry: CreateEntryUseCase.Interface);
11
12
  create(input: LockEntryInput): Promise<Result<ILockRecord, RepositoryAbstraction.Error>>;
12
13
  }
13
14
  export declare const LockEntryRepository: typeof LockEntryRepositoryImpl & {
@@ -1,42 +1,46 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
3
- import { LockEntryRepository as RepositoryAbstraction } from "./abstractions.js";
4
- import { RecordLockingConfig, RecordLockingModel } from "../../domain/abstractions.js";
3
+ import { LockEntryRepository } from "./abstractions.js";
4
+ import { RecordLockingConfig, RecordLockingModelProvider } from "../../domain/abstractions.js";
5
5
  import { LockRecord } from "../../domain/LockRecord.js";
6
6
  import { LockRecordPersistenceError } from "../../domain/errors.js";
7
7
  import { createLockRecordDatabaseId } from "../../utils/lockRecordDatabaseId.js";
8
8
  class LockEntryRepositoryImpl {
9
- constructor(model, config, createEntry) {
10
- this.model = model;
11
- this.config = config;
12
- this.createEntry = createEntry;
13
- }
14
- async create(input) {
15
- try {
16
- const id = createLockRecordDatabaseId(input.id);
17
- const values = {
18
- targetId: input.id,
19
- type: input.type,
20
- actions: []
21
- };
22
- const result = await this.createEntry.execute(this.model, {
23
- id,
24
- values
25
- });
26
- if (result.isFail()) {
27
- return Result.fail(new LockRecordPersistenceError(result.error));
28
- }
29
- const entry = result.value;
30
- const lockRecord = new LockRecord(entry, this.config.timeout);
31
- return Result.ok(lockRecord);
32
- } catch (error) {
33
- return Result.fail(new LockRecordPersistenceError(error));
9
+ constructor(modelProvider, config, createEntry){
10
+ this.modelProvider = modelProvider;
11
+ this.config = config;
12
+ this.createEntry = createEntry;
13
+ }
14
+ async create(input) {
15
+ try {
16
+ const model = await this.modelProvider.get();
17
+ const id = createLockRecordDatabaseId(input.id);
18
+ const values = {
19
+ targetId: input.id,
20
+ type: input.type,
21
+ actions: []
22
+ };
23
+ const result = await this.createEntry.execute(model, {
24
+ id,
25
+ values
26
+ });
27
+ if (result.isFail()) return Result.fail(new LockRecordPersistenceError(result.error));
28
+ const entry = result.value;
29
+ const lockRecord = new LockRecord(entry, this.config.timeout);
30
+ return Result.ok(lockRecord);
31
+ } catch (error) {
32
+ return Result.fail(new LockRecordPersistenceError(error));
33
+ }
34
34
  }
35
- }
36
35
  }
37
- export const LockEntryRepository = RepositoryAbstraction.createImplementation({
38
- implementation: LockEntryRepositoryImpl,
39
- dependencies: [RecordLockingModel, RecordLockingConfig, CreateEntryUseCase]
36
+ const LockEntryRepository_LockEntryRepository = LockEntryRepository.createImplementation({
37
+ implementation: LockEntryRepositoryImpl,
38
+ dependencies: [
39
+ RecordLockingModelProvider,
40
+ RecordLockingConfig,
41
+ CreateEntryUseCase
42
+ ]
40
43
  });
44
+ export { LockEntryRepository_LockEntryRepository as LockEntryRepository };
41
45
 
42
46
  //# sourceMappingURL=LockEntryRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","CreateEntryUseCase","LockEntryRepository","RepositoryAbstraction","RecordLockingConfig","RecordLockingModel","LockRecord","LockRecordPersistenceError","createLockRecordDatabaseId","LockEntryRepositoryImpl","constructor","model","config","createEntry","create","input","id","values","targetId","type","actions","result","execute","isFail","fail","error","entry","value","lockRecord","timeout","ok","createImplementation","implementation","dependencies"],"sources":["LockEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry\";\nimport type { CmsEntry } from \"@webiny/api-headless-cms/types/index.js\";\nimport { LockEntryInput, LockEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { RecordLockingConfig, RecordLockingModel } from \"~/domain/abstractions.js\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport { LockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordValues } from \"~/domain/types.js\";\nimport { LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport { createLockRecordDatabaseId } from \"~/utils/lockRecordDatabaseId.js\";\n\nclass LockEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private model: RecordLockingModel.Interface,\n private config: RecordLockingConfig.Interface,\n private createEntry: CreateEntryUseCase.Interface\n ) {}\n\n async create(input: LockEntryInput): Promise<Result<ILockRecord, RepositoryAbstraction.Error>> {\n try {\n const id = createLockRecordDatabaseId(input.id);\n\n const values: LockRecordValues = {\n targetId: input.id,\n type: input.type,\n actions: []\n };\n\n const result = await this.createEntry.execute(this.model, {\n id,\n values\n });\n\n if (result.isFail()) {\n return Result.fail(new LockRecordPersistenceError(result.error));\n }\n\n const entry = result.value as CmsEntry<LockRecordValues>;\n const lockRecord = new LockRecord(entry, this.config.timeout);\n\n return Result.ok(lockRecord);\n } catch (error) {\n return Result.fail(new LockRecordPersistenceError(error as Error));\n }\n }\n}\n\nexport const LockEntryRepository = RepositoryAbstraction.createImplementation({\n implementation: LockEntryRepositoryImpl,\n dependencies: [RecordLockingModel, RecordLockingConfig, CreateEntryUseCase]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,kBAAkB,QAAQ,4DAA4D;AAE/F,SAAyBC,mBAAmB,IAAIC,qBAAqB;AACrE,SAASC,mBAAmB,EAAEC,kBAAkB;AAEhD,SAASC,UAAU;AAEnB,SAASC,0BAA0B;AACnC,SAASC,0BAA0B;AAEnC,MAAMC,uBAAuB,CAA4C;EACrEC,WAAWA,CACCC,KAAmC,EACnCC,MAAqC,EACrCC,WAAyC,EACnD;IAAA,KAHUF,KAAmC,GAAnCA,KAAmC;IAAA,KACnCC,MAAqC,GAArCA,MAAqC;IAAA,KACrCC,WAAyC,GAAzCA,WAAyC;EAClD;EAEH,MAAMC,MAAMA,CAACC,KAAqB,EAA6D;IAC3F,IAAI;MACA,MAAMC,EAAE,GAAGR,0BAA0B,CAACO,KAAK,CAACC,EAAE,CAAC;MAE/C,MAAMC,MAAwB,GAAG;QAC7BC,QAAQ,EAAEH,KAAK,CAACC,EAAE;QAClBG,IAAI,EAAEJ,KAAK,CAACI,IAAI;QAChBC,OAAO,EAAE;MACb,CAAC;MAED,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACR,WAAW,CAACS,OAAO,CAAC,IAAI,CAACX,KAAK,EAAE;QACtDK,EAAE;QACFC;MACJ,CAAC,CAAC;MAEF,IAAII,MAAM,CAACE,MAAM,CAAC,CAAC,EAAE;QACjB,OAAOvB,MAAM,CAACwB,IAAI,CAAC,IAAIjB,0BAA0B,CAACc,MAAM,CAACI,KAAK,CAAC,CAAC;MACpE;MAEA,MAAMC,KAAK,GAAGL,MAAM,CAACM,KAAmC;MACxD,MAAMC,UAAU,GAAG,IAAItB,UAAU,CAACoB,KAAK,EAAE,IAAI,CAACd,MAAM,CAACiB,OAAO,CAAC;MAE7D,OAAO7B,MAAM,CAAC8B,EAAE,CAACF,UAAU,CAAC;IAChC,CAAC,CAAC,OAAOH,KAAK,EAAE;MACZ,OAAOzB,MAAM,CAACwB,IAAI,CAAC,IAAIjB,0BAA0B,CAACkB,KAAc,CAAC,CAAC;IACtE;EACJ;AACJ;AAEA,OAAO,MAAMvB,mBAAmB,GAAGC,qBAAqB,CAAC4B,oBAAoB,CAAC;EAC1EC,cAAc,EAAEvB,uBAAuB;EACvCwB,YAAY,EAAE,CAAC5B,kBAAkB,EAAED,mBAAmB,EAAEH,kBAAkB;AAC9E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/LockEntry/LockEntryRepository.js","sources":["../../../src/features/LockEntry/LockEntryRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry\";\nimport type { CmsEntry } from \"@webiny/api-headless-cms/types/index.js\";\nimport { LockEntryInput, LockEntryRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { RecordLockingConfig } from \"~/domain/abstractions.js\";\nimport { RecordLockingModelProvider } from \"~/domain/abstractions.js\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport { LockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordValues } from \"~/domain/types.js\";\nimport { LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport { createLockRecordDatabaseId } from \"~/utils/lockRecordDatabaseId.js\";\n\nclass LockEntryRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private modelProvider: RecordLockingModelProvider.Interface,\n private config: RecordLockingConfig.Interface,\n private createEntry: CreateEntryUseCase.Interface\n ) {}\n\n async create(input: LockEntryInput): Promise<Result<ILockRecord, RepositoryAbstraction.Error>> {\n try {\n const model = await this.modelProvider.get();\n\n const id = createLockRecordDatabaseId(input.id);\n\n const values: LockRecordValues = {\n targetId: input.id,\n type: input.type,\n actions: []\n };\n\n const result = await this.createEntry.execute(model, {\n id,\n values\n });\n\n if (result.isFail()) {\n return Result.fail(new LockRecordPersistenceError(result.error));\n }\n\n const entry = result.value as CmsEntry<LockRecordValues>;\n const lockRecord = new LockRecord(entry, this.config.timeout);\n\n return Result.ok(lockRecord);\n } catch (error) {\n return Result.fail(new LockRecordPersistenceError(error as Error));\n }\n }\n}\n\nexport const LockEntryRepository = RepositoryAbstraction.createImplementation({\n implementation: LockEntryRepositoryImpl,\n dependencies: [RecordLockingModelProvider, RecordLockingConfig, CreateEntryUseCase]\n});\n"],"names":["LockEntryRepositoryImpl","modelProvider","config","createEntry","input","model","id","createLockRecordDatabaseId","values","result","Result","LockRecordPersistenceError","entry","lockRecord","LockRecord","error","LockEntryRepository","RepositoryAbstraction","RecordLockingModelProvider","RecordLockingConfig","CreateEntryUseCase"],"mappings":";;;;;;;AAYA,MAAMA;IACF,YACYC,aAAmD,EACnDC,MAAqC,EACrCC,WAAyC,CACnD;aAHUF,aAAa,GAAbA;aACAC,MAAM,GAANA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,OAAOC,KAAqB,EAA6D;QAC3F,IAAI;YACA,MAAMC,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG;YAE1C,MAAMC,KAAKC,2BAA2BH,MAAM,EAAE;YAE9C,MAAMI,SAA2B;gBAC7B,UAAUJ,MAAM,EAAE;gBAClB,MAAMA,MAAM,IAAI;gBAChB,SAAS,EAAE;YACf;YAEA,MAAMK,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACJ,OAAO;gBACjDC;gBACAE;YACJ;YAEA,IAAIC,OAAO,MAAM,IACb,OAAOC,OAAO,IAAI,CAAC,IAAIC,2BAA2BF,OAAO,KAAK;YAGlE,MAAMG,QAAQH,OAAO,KAAK;YAC1B,MAAMI,aAAa,IAAIC,WAAWF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;YAE5D,OAAOF,OAAO,EAAE,CAACG;QACrB,EAAE,OAAOE,OAAO;YACZ,OAAOL,OAAO,IAAI,CAAC,IAAIC,2BAA2BI;QACtD;IACJ;AACJ;AAEO,MAAMC,0CAAsBC,oBAAAA,oBAA0C,CAAC;IAC1E,gBAAgBjB;IAChB,cAAc;QAACkB;QAA4BC;QAAqBC;KAAmB;AACvF"}
@@ -1,36 +1,31 @@
1
1
  import { Result } from "@webiny/feature/api";
2
- import { LockEntryUseCase as UseCaseAbstraction, LockEntryRepository } from "./abstractions.js";
2
+ import { LockEntryRepository, LockEntryUseCase } from "./abstractions.js";
3
3
  import { IsEntryLockedUseCase } from "../IsEntryLocked/abstractions.js";
4
4
  import { EntryAlreadyLockedError, LockEntryError } from "../../domain/errors.js";
5
5
  class LockEntryUseCaseImpl {
6
- constructor(isEntryLocked, repository) {
7
- this.isEntryLocked = isEntryLocked;
8
- this.repository = repository;
9
- }
10
- async execute(input) {
11
- // Check if entry is already locked
12
- const lockedResult = await this.isEntryLocked.execute(input);
13
- if (lockedResult.isFail()) {
14
- return Result.fail(lockedResult.error);
6
+ constructor(isEntryLocked, repository){
7
+ this.isEntryLocked = isEntryLocked;
8
+ this.repository = repository;
15
9
  }
16
- if (lockedResult.value) {
17
- return Result.fail(new EntryAlreadyLockedError({
18
- id: input.id,
19
- type: input.type
20
- }));
10
+ async execute(input) {
11
+ const lockedResult = await this.isEntryLocked.execute(input);
12
+ if (lockedResult.isFail()) return Result.fail(lockedResult.error);
13
+ if (lockedResult.value) return Result.fail(new EntryAlreadyLockedError({
14
+ id: input.id,
15
+ type: input.type
16
+ }));
17
+ const result = await this.repository.create(input);
18
+ if (result.isFail()) return Result.fail(new LockEntryError(result.error));
19
+ return Result.ok(result.value);
21
20
  }
22
-
23
- // Create the lock
24
- const result = await this.repository.create(input);
25
- if (result.isFail()) {
26
- return Result.fail(new LockEntryError(result.error));
27
- }
28
- return Result.ok(result.value);
29
- }
30
21
  }
31
- export const LockEntryUseCase = UseCaseAbstraction.createImplementation({
32
- implementation: LockEntryUseCaseImpl,
33
- dependencies: [IsEntryLockedUseCase, LockEntryRepository]
22
+ const LockEntryUseCase_LockEntryUseCase = LockEntryUseCase.createImplementation({
23
+ implementation: LockEntryUseCaseImpl,
24
+ dependencies: [
25
+ IsEntryLockedUseCase,
26
+ LockEntryRepository
27
+ ]
34
28
  });
29
+ export { LockEntryUseCase_LockEntryUseCase as LockEntryUseCase };
35
30
 
36
31
  //# sourceMappingURL=LockEntryUseCase.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Result","LockEntryUseCase","UseCaseAbstraction","LockEntryRepository","IsEntryLockedUseCase","EntryAlreadyLockedError","LockEntryError","LockEntryUseCaseImpl","constructor","isEntryLocked","repository","execute","input","lockedResult","isFail","fail","error","value","id","type","result","create","ok","createImplementation","implementation","dependencies"],"sources":["LockEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n LockEntryUseCase as UseCaseAbstraction,\n LockEntryRepository,\n LockEntryInput\n} from \"./abstractions.js\";\nimport { IsEntryLockedUseCase } from \"../IsEntryLocked/abstractions.js\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport { EntryAlreadyLockedError, LockEntryError } from \"~/domain/errors.js\";\n\nclass LockEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private isEntryLocked: IsEntryLockedUseCase.Interface,\n private repository: LockEntryRepository.Interface\n ) {}\n\n async execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseAbstraction.Error>> {\n // Check if entry is already locked\n const lockedResult = await this.isEntryLocked.execute(input);\n\n if (lockedResult.isFail()) {\n return Result.fail(lockedResult.error);\n }\n\n if (lockedResult.value) {\n return Result.fail(new EntryAlreadyLockedError({ id: input.id, type: input.type }));\n }\n\n // Create the lock\n const result = await this.repository.create(input);\n\n if (result.isFail()) {\n return Result.fail(new LockEntryError(result.error));\n }\n\n return Result.ok(result.value);\n }\n}\n\nexport const LockEntryUseCase = UseCaseAbstraction.createImplementation({\n implementation: LockEntryUseCaseImpl,\n dependencies: [IsEntryLockedUseCase, LockEntryRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,gBAAgB,IAAIC,kBAAkB,EACtCC,mBAAmB;AAGvB,SAASC,oBAAoB;AAE7B,SAASC,uBAAuB,EAAEC,cAAc;AAEhD,MAAMC,oBAAoB,CAAyC;EAC/DC,WAAWA,CACCC,aAA6C,EAC7CC,UAAyC,EACnD;IAAA,KAFUD,aAA6C,GAA7CA,aAA6C;IAAA,KAC7CC,UAAyC,GAAzCA,UAAyC;EAClD;EAEH,MAAMC,OAAOA,CAACC,KAAqB,EAA0D;IACzF;IACA,MAAMC,YAAY,GAAG,MAAM,IAAI,CAACJ,aAAa,CAACE,OAAO,CAACC,KAAK,CAAC;IAE5D,IAAIC,YAAY,CAACC,MAAM,CAAC,CAAC,EAAE;MACvB,OAAOd,MAAM,CAACe,IAAI,CAACF,YAAY,CAACG,KAAK,CAAC;IAC1C;IAEA,IAAIH,YAAY,CAACI,KAAK,EAAE;MACpB,OAAOjB,MAAM,CAACe,IAAI,CAAC,IAAIV,uBAAuB,CAAC;QAAEa,EAAE,EAAEN,KAAK,CAACM,EAAE;QAAEC,IAAI,EAAEP,KAAK,CAACO;MAAK,CAAC,CAAC,CAAC;IACvF;;IAEA;IACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACV,UAAU,CAACW,MAAM,CAACT,KAAK,CAAC;IAElD,IAAIQ,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOd,MAAM,CAACe,IAAI,CAAC,IAAIT,cAAc,CAACc,MAAM,CAACJ,KAAK,CAAC,CAAC;IACxD;IAEA,OAAOhB,MAAM,CAACsB,EAAE,CAACF,MAAM,CAACH,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMhB,gBAAgB,GAAGC,kBAAkB,CAACqB,oBAAoB,CAAC;EACpEC,cAAc,EAAEjB,oBAAoB;EACpCkB,YAAY,EAAE,CAACrB,oBAAoB,EAAED,mBAAmB;AAC5D,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/LockEntry/LockEntryUseCase.js","sources":["../../../src/features/LockEntry/LockEntryUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n LockEntryUseCase as UseCaseAbstraction,\n LockEntryRepository,\n LockEntryInput\n} from \"./abstractions.js\";\nimport { IsEntryLockedUseCase } from \"../IsEntryLocked/abstractions.js\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport { EntryAlreadyLockedError, LockEntryError } from \"~/domain/errors.js\";\n\nclass LockEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private isEntryLocked: IsEntryLockedUseCase.Interface,\n private repository: LockEntryRepository.Interface\n ) {}\n\n async execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseAbstraction.Error>> {\n // Check if entry is already locked\n const lockedResult = await this.isEntryLocked.execute(input);\n\n if (lockedResult.isFail()) {\n return Result.fail(lockedResult.error);\n }\n\n if (lockedResult.value) {\n return Result.fail(new EntryAlreadyLockedError({ id: input.id, type: input.type }));\n }\n\n // Create the lock\n const result = await this.repository.create(input);\n\n if (result.isFail()) {\n return Result.fail(new LockEntryError(result.error));\n }\n\n return Result.ok(result.value);\n }\n}\n\nexport const LockEntryUseCase = UseCaseAbstraction.createImplementation({\n implementation: LockEntryUseCaseImpl,\n dependencies: [IsEntryLockedUseCase, LockEntryRepository]\n});\n"],"names":["LockEntryUseCaseImpl","isEntryLocked","repository","input","lockedResult","Result","EntryAlreadyLockedError","result","LockEntryError","LockEntryUseCase","UseCaseAbstraction","IsEntryLockedUseCase","LockEntryRepository"],"mappings":";;;;AAUA,MAAMA;IACF,YACYC,aAA6C,EAC7CC,UAAyC,CACnD;aAFUD,aAAa,GAAbA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QAAQC,KAAqB,EAA0D;QAEzF,MAAMC,eAAe,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAACD;QAEtD,IAAIC,aAAa,MAAM,IACnB,OAAOC,OAAO,IAAI,CAACD,aAAa,KAAK;QAGzC,IAAIA,aAAa,KAAK,EAClB,OAAOC,OAAO,IAAI,CAAC,IAAIC,wBAAwB;YAAE,IAAIH,MAAM,EAAE;YAAE,MAAMA,MAAM,IAAI;QAAC;QAIpF,MAAMI,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAACJ;QAE5C,IAAII,OAAO,MAAM,IACb,OAAOF,OAAO,IAAI,CAAC,IAAIG,eAAeD,OAAO,KAAK;QAGtD,OAAOF,OAAO,EAAE,CAACE,OAAO,KAAK;IACjC;AACJ;AAEO,MAAME,oCAAmBC,iBAAAA,oBAAuC,CAAC;IACpE,gBAAgBV;IAChB,cAAc;QAACW;QAAsBC;KAAoB;AAC7D"}
@@ -1,17 +1,6 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
-
3
- // Input types
4
-
5
- /**
6
- * LockEntry Use Case - Creates a lock on an entry
7
- */
8
-
9
- export const LockEntryUseCase = createAbstraction("LockEntryUseCase");
10
-
11
- /**
12
- * LockEntryRepository - Creates lock record in storage
13
- */
14
-
15
- export const LockEntryRepository = createAbstraction("LockEntryRepository");
2
+ const LockEntryUseCase = createAbstraction("LockEntryUseCase");
3
+ const LockEntryRepository = createAbstraction("LockEntryRepository");
4
+ export { LockEntryRepository, LockEntryUseCase };
16
5
 
17
6
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","LockEntryUseCase","LockEntryRepository"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordEntryType } from \"~/domain/types.js\";\nimport type {\n EntryAlreadyLockedError,\n LockEntryError,\n LockRecordPersistenceError\n} from \"~/domain/errors.js\";\n\n// Input types\nexport interface LockEntryInput {\n id: string;\n type: LockRecordEntryType;\n}\n\n/**\n * LockEntry Use Case - Creates a lock on an entry\n */\nexport interface ILockEntryUseCase {\n execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseError>>;\n}\n\nexport interface ILockEntryUseCaseErrors {\n alreadyLocked: EntryAlreadyLockedError;\n persistence: LockRecordPersistenceError;\n lockError: LockEntryError;\n}\n\ntype UseCaseError = ILockEntryUseCaseErrors[keyof ILockEntryUseCaseErrors];\n\nexport const LockEntryUseCase = createAbstraction<ILockEntryUseCase>(\"LockEntryUseCase\");\n\nexport namespace LockEntryUseCase {\n export type Interface = ILockEntryUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * LockEntryRepository - Creates lock record in storage\n */\nexport interface ILockEntryRepository {\n create(input: LockEntryInput): Promise<Result<ILockRecord, RepositoryError>>;\n}\n\nexport interface ILockEntryRepositoryErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype RepositoryError = ILockEntryRepositoryErrors[keyof ILockEntryRepositoryErrors];\n\nexport const LockEntryRepository = createAbstraction<ILockEntryRepository>(\"LockEntryRepository\");\n\nexport namespace LockEntryRepository {\n export type Interface = ILockEntryRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAUvD;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAoB,kBAAkB,CAAC;;AAOxF;AACA;AACA;;AAWA,OAAO,MAAME,mBAAmB,GAAGF,iBAAiB,CAAuB,qBAAqB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/LockEntry/abstractions.js","sources":["../../../src/features/LockEntry/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordEntryType } from \"~/domain/types.js\";\nimport type {\n EntryAlreadyLockedError,\n LockEntryError,\n LockRecordPersistenceError\n} from \"~/domain/errors.js\";\n\n// Input types\nexport interface LockEntryInput {\n id: string;\n type: LockRecordEntryType;\n}\n\n/**\n * LockEntry Use Case - Creates a lock on an entry\n */\nexport interface ILockEntryUseCase {\n execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseError>>;\n}\n\nexport interface ILockEntryUseCaseErrors {\n alreadyLocked: EntryAlreadyLockedError;\n persistence: LockRecordPersistenceError;\n lockError: LockEntryError;\n}\n\ntype UseCaseError = ILockEntryUseCaseErrors[keyof ILockEntryUseCaseErrors];\n\nexport const LockEntryUseCase = createAbstraction<ILockEntryUseCase>(\"LockEntryUseCase\");\n\nexport namespace LockEntryUseCase {\n export type Interface = ILockEntryUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * LockEntryRepository - Creates lock record in storage\n */\nexport interface ILockEntryRepository {\n create(input: LockEntryInput): Promise<Result<ILockRecord, RepositoryError>>;\n}\n\nexport interface ILockEntryRepositoryErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype RepositoryError = ILockEntryRepositoryErrors[keyof ILockEntryRepositoryErrors];\n\nexport const LockEntryRepository = createAbstraction<ILockEntryRepository>(\"LockEntryRepository\");\n\nexport namespace LockEntryRepository {\n export type Interface = ILockEntryRepository;\n export type Error = RepositoryError;\n}\n"],"names":["LockEntryUseCase","createAbstraction","LockEntryRepository"],"mappings":";AA+BO,MAAMA,mBAAmBC,kBAAqC;AAoB9D,MAAMC,sBAAsBD,kBAAwC"}
@@ -1,40 +1,32 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
2
  import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
3
-
4
- // ============================================================================
5
- // EntryBeforeLock Event
6
- // ============================================================================
7
-
8
- export class EntryBeforeLockEvent extends DomainEvent {
9
- eventType = "RecordLocking/Entry/BeforeLock";
10
- getHandlerAbstraction() {
11
- return EntryBeforeLockEventHandler;
12
- }
3
+ class EntryBeforeLockEvent extends DomainEvent {
4
+ getHandlerAbstraction() {
5
+ return EntryBeforeLockEventHandler;
6
+ }
7
+ constructor(...args){
8
+ super(...args), this.eventType = "RecordLocking/Entry/BeforeLock";
9
+ }
13
10
  }
14
- export const EntryBeforeLockEventHandler = createAbstraction("EntryBeforeLockEventHandler");
15
-
16
- // ============================================================================
17
- // EntryAfterLock Event
18
- // ============================================================================
19
-
20
- export class EntryAfterLockEvent extends DomainEvent {
21
- eventType = "RecordLocking/Entry/AfterLock";
22
- getHandlerAbstraction() {
23
- return EntryAfterLockEventHandler;
24
- }
11
+ const EntryBeforeLockEventHandler = createAbstraction("EntryBeforeLockEventHandler");
12
+ class EntryAfterLockEvent extends DomainEvent {
13
+ getHandlerAbstraction() {
14
+ return EntryAfterLockEventHandler;
15
+ }
16
+ constructor(...args){
17
+ super(...args), this.eventType = "RecordLocking/Entry/AfterLock";
18
+ }
25
19
  }
26
- export const EntryAfterLockEventHandler = createAbstraction("EntryAfterLockEventHandler");
27
-
28
- // ============================================================================
29
- // EntryLockError Event
30
- // ============================================================================
31
-
32
- export class EntryLockErrorEvent extends DomainEvent {
33
- eventType = "RecordLocking/Entry/LockError";
34
- getHandlerAbstraction() {
35
- return EntryLockErrorEventHandler;
36
- }
20
+ const EntryAfterLockEventHandler = createAbstraction("EntryAfterLockEventHandler");
21
+ class EntryLockErrorEvent extends DomainEvent {
22
+ getHandlerAbstraction() {
23
+ return EntryLockErrorEventHandler;
24
+ }
25
+ constructor(...args){
26
+ super(...args), this.eventType = "RecordLocking/Entry/LockError";
27
+ }
37
28
  }
38
- export const EntryLockErrorEventHandler = createAbstraction("EntryLockErrorEventHandler");
29
+ const EntryLockErrorEventHandler = createAbstraction("EntryLockErrorEventHandler");
30
+ export { EntryAfterLockEvent, EntryAfterLockEventHandler, EntryBeforeLockEvent, EntryBeforeLockEventHandler, EntryLockErrorEvent, EntryLockErrorEventHandler };
39
31
 
40
32
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","DomainEvent","EntryBeforeLockEvent","eventType","getHandlerAbstraction","EntryBeforeLockEventHandler","EntryAfterLockEvent","EntryAfterLockEventHandler","EntryLockErrorEvent","EntryLockErrorEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordEntryType } from \"~/domain/types.js\";\n\n// ============================================================================\n// EntryBeforeLock Event\n// ============================================================================\n\nexport interface EntryBeforeLockPayload {\n id: string;\n type: LockRecordEntryType;\n}\n\nexport class EntryBeforeLockEvent extends DomainEvent<EntryBeforeLockPayload> {\n eventType = \"RecordLocking/Entry/BeforeLock\" as const;\n\n getHandlerAbstraction() {\n return EntryBeforeLockEventHandler;\n }\n}\n\nexport const EntryBeforeLockEventHandler = createAbstraction<IEventHandler<EntryBeforeLockEvent>>(\n \"EntryBeforeLockEventHandler\"\n);\n\nexport namespace EntryBeforeLockEventHandler {\n export type Interface = IEventHandler<EntryBeforeLockEvent>;\n export type Event = EntryBeforeLockEvent;\n}\n\n// ============================================================================\n// EntryAfterLock Event\n// ============================================================================\n\nexport interface EntryAfterLockPayload {\n id: string;\n type: LockRecordEntryType;\n record: ILockRecord;\n}\n\nexport class EntryAfterLockEvent extends DomainEvent<EntryAfterLockPayload> {\n eventType = \"RecordLocking/Entry/AfterLock\" as const;\n\n getHandlerAbstraction() {\n return EntryAfterLockEventHandler;\n }\n}\n\nexport const EntryAfterLockEventHandler = createAbstraction<IEventHandler<EntryAfterLockEvent>>(\n \"EntryAfterLockEventHandler\"\n);\n\nexport namespace EntryAfterLockEventHandler {\n export type Interface = IEventHandler<EntryAfterLockEvent>;\n export type Event = EntryAfterLockEvent;\n}\n\n// ============================================================================\n// EntryLockError Event\n// ============================================================================\n\nexport interface EntryLockErrorPayload {\n id: string;\n type: LockRecordEntryType;\n error: Error;\n}\n\nexport class EntryLockErrorEvent extends DomainEvent<EntryLockErrorPayload> {\n eventType = \"RecordLocking/Entry/LockError\" as const;\n\n getHandlerAbstraction() {\n return EntryLockErrorEventHandler;\n }\n}\n\nexport const EntryLockErrorEventHandler = createAbstraction<IEventHandler<EntryLockErrorEvent>>(\n \"EntryLockErrorEventHandler\"\n);\n\nexport namespace EntryLockErrorEventHandler {\n export type Interface = IEventHandler<EntryLockErrorEvent>;\n export type Event = EntryLockErrorEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW,QAAQ,mDAAmD;;AAK/E;AACA;AACA;;AAOA,OAAO,MAAMC,oBAAoB,SAASD,WAAW,CAAyB;EAC1EE,SAAS,GAAG,gCAAgC;EAE5CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,2BAA2B;EACtC;AACJ;AAEA,OAAO,MAAMA,2BAA2B,GAAGL,iBAAiB,CACxD,6BACJ,CAAC;;AAOD;AACA;AACA;;AAQA,OAAO,MAAMM,mBAAmB,SAASL,WAAW,CAAwB;EACxEE,SAAS,GAAG,+BAA+B;EAE3CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,0BAA0B;EACrC;AACJ;AAEA,OAAO,MAAMA,0BAA0B,GAAGP,iBAAiB,CACvD,4BACJ,CAAC;;AAOD;AACA;AACA;;AAQA,OAAO,MAAMQ,mBAAmB,SAASP,WAAW,CAAwB;EACxEE,SAAS,GAAG,+BAA+B;EAE3CC,qBAAqBA,CAAA,EAAG;IACpB,OAAOK,0BAA0B;EACrC;AACJ;AAEA,OAAO,MAAMA,0BAA0B,GAAGT,iBAAiB,CACvD,4BACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/LockEntry/events.js","sources":["../../../src/features/LockEntry/events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordEntryType } from \"~/domain/types.js\";\n\n// ============================================================================\n// EntryBeforeLock Event\n// ============================================================================\n\nexport interface EntryBeforeLockPayload {\n id: string;\n type: LockRecordEntryType;\n}\n\nexport class EntryBeforeLockEvent extends DomainEvent<EntryBeforeLockPayload> {\n eventType = \"RecordLocking/Entry/BeforeLock\" as const;\n\n getHandlerAbstraction() {\n return EntryBeforeLockEventHandler;\n }\n}\n\nexport const EntryBeforeLockEventHandler = createAbstraction<IEventHandler<EntryBeforeLockEvent>>(\n \"EntryBeforeLockEventHandler\"\n);\n\nexport namespace EntryBeforeLockEventHandler {\n export type Interface = IEventHandler<EntryBeforeLockEvent>;\n export type Event = EntryBeforeLockEvent;\n}\n\n// ============================================================================\n// EntryAfterLock Event\n// ============================================================================\n\nexport interface EntryAfterLockPayload {\n id: string;\n type: LockRecordEntryType;\n record: ILockRecord;\n}\n\nexport class EntryAfterLockEvent extends DomainEvent<EntryAfterLockPayload> {\n eventType = \"RecordLocking/Entry/AfterLock\" as const;\n\n getHandlerAbstraction() {\n return EntryAfterLockEventHandler;\n }\n}\n\nexport const EntryAfterLockEventHandler = createAbstraction<IEventHandler<EntryAfterLockEvent>>(\n \"EntryAfterLockEventHandler\"\n);\n\nexport namespace EntryAfterLockEventHandler {\n export type Interface = IEventHandler<EntryAfterLockEvent>;\n export type Event = EntryAfterLockEvent;\n}\n\n// ============================================================================\n// EntryLockError Event\n// ============================================================================\n\nexport interface EntryLockErrorPayload {\n id: string;\n type: LockRecordEntryType;\n error: Error;\n}\n\nexport class EntryLockErrorEvent extends DomainEvent<EntryLockErrorPayload> {\n eventType = \"RecordLocking/Entry/LockError\" as const;\n\n getHandlerAbstraction() {\n return EntryLockErrorEventHandler;\n }\n}\n\nexport const EntryLockErrorEventHandler = createAbstraction<IEventHandler<EntryLockErrorEvent>>(\n \"EntryLockErrorEventHandler\"\n);\n\nexport namespace EntryLockErrorEventHandler {\n export type Interface = IEventHandler<EntryLockErrorEvent>;\n export type Event = EntryLockErrorEvent;\n}\n"],"names":["EntryBeforeLockEvent","DomainEvent","EntryBeforeLockEventHandler","createAbstraction","EntryAfterLockEvent","EntryAfterLockEventHandler","EntryLockErrorEvent","EntryLockErrorEventHandler"],"mappings":";;AAeO,MAAMA,6BAA6BC;IAGtC,wBAAwB;QACpB,OAAOC;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,8BAA8BC,kBACvC;AAkBG,MAAMC,4BAA4BH;IAGrC,wBAAwB;QACpB,OAAOI;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,6BAA6BF,kBACtC;AAkBG,MAAMG,4BAA4BL;IAGrC,wBAAwB;QACpB,OAAOM;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,6BAA6BJ,kBACtC"}
@@ -2,13 +2,14 @@ import { createFeature } from "@webiny/feature/api";
2
2
  import { LockEntryUseCase } from "./LockEntryUseCase.js";
3
3
  import { LockEntryRepository } from "./LockEntryRepository.js";
4
4
  import { LockEntryEventsDecorator } from "./LockEntryEventsDecorator.js";
5
- export const LockEntryFeature = createFeature({
6
- name: "LockEntry",
7
- register(container) {
8
- container.register(LockEntryUseCase);
9
- container.register(LockEntryRepository).inSingletonScope();
10
- container.registerDecorator(LockEntryEventsDecorator);
11
- }
5
+ const LockEntryFeature = createFeature({
6
+ name: "LockEntry",
7
+ register (container) {
8
+ container.register(LockEntryUseCase);
9
+ container.register(LockEntryRepository).inSingletonScope();
10
+ container.registerDecorator(LockEntryEventsDecorator);
11
+ }
12
12
  });
13
+ export { LockEntryFeature };
13
14
 
14
15
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","LockEntryUseCase","LockEntryRepository","LockEntryEventsDecorator","LockEntryFeature","name","register","container","inSingletonScope","registerDecorator"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { LockEntryUseCase } from \"./LockEntryUseCase.js\";\nimport { LockEntryRepository } from \"./LockEntryRepository.js\";\nimport { LockEntryEventsDecorator } from \"./LockEntryEventsDecorator.js\";\n\nexport const LockEntryFeature = createFeature({\n name: \"LockEntry\",\n register(container) {\n container.register(LockEntryUseCase);\n container.register(LockEntryRepository).inSingletonScope();\n container.registerDecorator(LockEntryEventsDecorator);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,gBAAgB;AACzB,SAASC,mBAAmB;AAC5B,SAASC,wBAAwB;AAEjC,OAAO,MAAMC,gBAAgB,GAAGJ,aAAa,CAAC;EAC1CK,IAAI,EAAE,WAAW;EACjBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACL,gBAAgB,CAAC;IACpCM,SAAS,CAACD,QAAQ,CAACJ,mBAAmB,CAAC,CAACM,gBAAgB,CAAC,CAAC;IAC1DD,SAAS,CAACE,iBAAiB,CAACN,wBAAwB,CAAC;EACzD;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/LockEntry/feature.js","sources":["../../../src/features/LockEntry/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { LockEntryUseCase } from \"./LockEntryUseCase.js\";\nimport { LockEntryRepository } from \"./LockEntryRepository.js\";\nimport { LockEntryEventsDecorator } from \"./LockEntryEventsDecorator.js\";\n\nexport const LockEntryFeature = createFeature({\n name: \"LockEntry\",\n register(container) {\n container.register(LockEntryUseCase);\n container.register(LockEntryRepository).inSingletonScope();\n container.registerDecorator(LockEntryEventsDecorator);\n }\n});\n"],"names":["LockEntryFeature","createFeature","container","LockEntryUseCase","LockEntryRepository","LockEntryEventsDecorator"],"mappings":";;;;AAKO,MAAMA,mBAAmBC,cAAc;IAC1C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE,qBAAqB,gBAAgB;QACxDF,UAAU,iBAAiB,CAACG;IAChC;AACJ"}
@@ -1,3 +1 @@
1
1
  export * from "./abstractions.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,13 +1,8 @@
1
- import type { CmsModel } from "@webiny/api-headless-cms/types";
2
1
  export interface RecordLockingParams {
3
2
  /**
4
3
  * Timeout in milliseconds after which a lock expires
5
4
  */
6
5
  timeout: number;
7
- /**
8
- * The CMS model for storing lock records
9
- */
10
- model: CmsModel;
11
6
  }
12
7
  export declare const RecordLockingFeature: {
13
8
  name: string;
@@ -1,5 +1,6 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
- import { RecordLockingConfig, RecordLockingModel } from "../domain/abstractions.js";
2
+ import { RecordLockingConfig } from "../domain/abstractions.js";
3
+ import { RecordLockingModelProvider } from "./RecordLockingModelProvider.js";
3
4
  import { GetLockRecordFeature } from "./GetLockRecord/feature.js";
4
5
  import { GetLockedEntryLockRecordFeature } from "./GetLockedEntryLockRecord/feature.js";
5
6
  import { KickOutCurrentUserFeature } from "./KickOutCurrentUser/feature.js";
@@ -10,27 +11,25 @@ import { LockEntryFeature } from "./LockEntry/feature.js";
10
11
  import { UpdateEntryLockFeature } from "./UpdateEntryLock/feature.js";
11
12
  import { UnlockEntryFeature } from "./UnlockEntry/feature.js";
12
13
  import { UnlockEntryRequestFeature } from "./UnlockEntryRequest/feature.js";
13
- export const RecordLockingFeature = createFeature({
14
- name: "RecordLockingManagement",
15
- register(container, params) {
16
- // Register domain abstractions
17
- container.registerInstance(RecordLockingConfig, {
18
- timeout: params.timeout
19
- });
20
- container.registerInstance(RecordLockingModel, params.model);
21
-
22
- // Register all sub-features
23
- GetLockRecordFeature.register(container);
24
- GetLockedEntryLockRecordFeature.register(container);
25
- KickOutCurrentUserFeature.register(container);
26
- ListLockRecordsFeature.register(container);
27
- ListAllLockRecordsFeature.register(container);
28
- IsEntryLockedFeature.register(container);
29
- LockEntryFeature.register(container);
30
- UpdateEntryLockFeature.register(container);
31
- UnlockEntryFeature.register(container);
32
- UnlockEntryRequestFeature.register(container);
33
- }
14
+ const RecordLockingFeature = createFeature({
15
+ name: "RecordLockingManagement",
16
+ register (container, params) {
17
+ container.registerInstance(RecordLockingConfig, {
18
+ timeout: params.timeout
19
+ });
20
+ container.register(RecordLockingModelProvider);
21
+ GetLockRecordFeature.register(container);
22
+ GetLockedEntryLockRecordFeature.register(container);
23
+ KickOutCurrentUserFeature.register(container);
24
+ ListLockRecordsFeature.register(container);
25
+ ListAllLockRecordsFeature.register(container);
26
+ IsEntryLockedFeature.register(container);
27
+ LockEntryFeature.register(container);
28
+ UpdateEntryLockFeature.register(container);
29
+ UnlockEntryFeature.register(container);
30
+ UnlockEntryRequestFeature.register(container);
31
+ }
34
32
  });
33
+ export { RecordLockingFeature };
35
34
 
36
35
  //# sourceMappingURL=RecordLockingFeature.js.map