@webiny/api-record-locking 6.0.0-beta.0 → 6.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -9
- package/domain/LockRecord.d.ts +45 -0
- package/{utils/convertEntryToLockRecord.js → domain/LockRecord.js} +14 -22
- package/domain/LockRecord.js.map +1 -0
- package/domain/RecordLockingModel.d.ts +9 -0
- package/domain/RecordLockingModel.js +29 -0
- package/domain/RecordLockingModel.js.map +1 -0
- package/domain/abstractions.d.ts +18 -0
- package/domain/abstractions.js +10 -0
- package/domain/abstractions.js.map +1 -0
- package/domain/calculateExpiresOn.d.ts +1 -0
- package/domain/calculateExpiresOn.js +9 -0
- package/domain/calculateExpiresOn.js.map +1 -0
- package/domain/errors.d.ts +71 -0
- package/domain/errors.js +95 -0
- package/domain/errors.js.map +1 -0
- package/domain/index.d.ts +4 -0
- package/domain/index.js +6 -0
- package/domain/index.js.map +1 -0
- package/domain/types.d.ts +44 -0
- package/domain/types.js +12 -0
- package/domain/types.js.map +1 -0
- package/features/GetLockRecord/GetLockRecordRepository.d.ts +16 -0
- package/features/GetLockRecord/GetLockRecordRepository.js +37 -0
- package/features/GetLockRecord/GetLockRecordRepository.js.map +1 -0
- package/features/GetLockRecord/GetLockRecordUseCase.d.ts +12 -0
- package/features/GetLockRecord/GetLockRecordUseCase.js +15 -0
- package/features/GetLockRecord/GetLockRecordUseCase.js.map +1 -0
- package/features/GetLockRecord/abstractions.d.ts +41 -0
- package/features/GetLockRecord/abstractions.js +17 -0
- package/features/GetLockRecord/abstractions.js.map +1 -0
- package/features/GetLockRecord/feature.d.ts +1 -0
- package/features/GetLockRecord/feature.js +12 -0
- package/features/GetLockRecord/feature.js.map +1 -0
- package/features/GetLockRecord/index.d.ts +2 -0
- package/features/GetLockRecord/index.js +4 -0
- package/features/GetLockRecord/index.js.map +1 -0
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +15 -0
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +39 -0
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -0
- package/features/GetLockedEntryLockRecord/abstractions.d.ts +26 -0
- package/features/GetLockedEntryLockRecord/abstractions.js +13 -0
- package/features/GetLockedEntryLockRecord/abstractions.js.map +1 -0
- package/features/GetLockedEntryLockRecord/feature.d.ts +1 -0
- package/features/GetLockedEntryLockRecord/feature.js +10 -0
- package/features/GetLockedEntryLockRecord/feature.js.map +1 -0
- package/features/GetLockedEntryLockRecord/index.d.ts +2 -0
- package/features/GetLockedEntryLockRecord/index.js +4 -0
- package/features/GetLockedEntryLockRecord/index.js.map +1 -0
- package/features/IsEntryLocked/IsEntryLockedUseCase.d.ts +14 -0
- package/features/IsEntryLocked/IsEntryLockedUseCase.js +39 -0
- package/features/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -0
- package/features/IsEntryLocked/abstractions.d.ts +24 -0
- package/features/IsEntryLocked/abstractions.js +12 -0
- package/features/IsEntryLocked/abstractions.js.map +1 -0
- package/features/IsEntryLocked/feature.d.ts +1 -0
- package/features/IsEntryLocked/feature.js +10 -0
- package/features/IsEntryLocked/feature.js.map +1 -0
- package/features/IsEntryLocked/index.d.ts +1 -0
- package/features/IsEntryLocked/index.js +3 -0
- package/features/IsEntryLocked/index.js.map +1 -0
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +15 -0
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js +42 -0
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -0
- package/features/KickOutCurrentUser/abstractions.d.ts +17 -0
- package/features/KickOutCurrentUser/abstractions.js +9 -0
- package/features/KickOutCurrentUser/abstractions.js.map +1 -0
- package/features/KickOutCurrentUser/feature.d.ts +1 -0
- package/features/KickOutCurrentUser/feature.js +10 -0
- package/features/KickOutCurrentUser/feature.js.map +1 -0
- package/features/KickOutCurrentUser/index.d.ts +1 -0
- package/features/KickOutCurrentUser/index.js +3 -0
- package/features/KickOutCurrentUser/index.js.map +1 -0
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.d.ts +16 -0
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.js +43 -0
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.js.map +1 -0
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.d.ts +11 -0
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js +15 -0
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js.map +1 -0
- package/features/ListAllLockRecords/abstractions.d.ts +40 -0
- package/features/ListAllLockRecords/abstractions.js +17 -0
- package/features/ListAllLockRecords/abstractions.js.map +1 -0
- package/features/ListAllLockRecords/feature.d.ts +1 -0
- package/features/ListAllLockRecords/feature.js +12 -0
- package/features/ListAllLockRecords/feature.js.map +1 -0
- package/features/ListAllLockRecords/index.d.ts +2 -0
- package/features/ListAllLockRecords/index.js +4 -0
- package/features/ListAllLockRecords/index.js.map +1 -0
- package/features/ListLockRecords/ListLockRecordsRepository.d.ts +15 -0
- package/features/ListLockRecords/ListLockRecordsRepository.js +43 -0
- package/features/ListLockRecords/ListLockRecordsRepository.js.map +1 -0
- package/features/ListLockRecords/ListLockRecordsUseCase.d.ts +15 -0
- package/features/ListLockRecords/ListLockRecordsUseCase.js +30 -0
- package/features/ListLockRecords/ListLockRecordsUseCase.js.map +1 -0
- package/features/ListLockRecords/abstractions.d.ts +45 -0
- package/features/ListLockRecords/abstractions.js +17 -0
- package/features/ListLockRecords/abstractions.js.map +1 -0
- package/features/ListLockRecords/feature.d.ts +1 -0
- package/features/ListLockRecords/feature.js +12 -0
- package/features/ListLockRecords/feature.js.map +1 -0
- package/features/ListLockRecords/index.d.ts +1 -0
- package/features/ListLockRecords/index.js +3 -0
- package/features/ListLockRecords/index.js.map +1 -0
- package/features/LockEntry/LockEntryEventsDecorator.d.ts +14 -0
- package/features/LockEntry/LockEntryEventsDecorator.js +40 -0
- package/features/LockEntry/LockEntryEventsDecorator.js.map +1 -0
- package/features/LockEntry/LockEntryRepository.d.ts +16 -0
- package/features/LockEntry/LockEntryRepository.js +42 -0
- package/features/LockEntry/LockEntryRepository.js.map +1 -0
- package/features/LockEntry/LockEntryUseCase.d.ts +14 -0
- package/features/LockEntry/LockEntryUseCase.js +36 -0
- package/features/LockEntry/LockEntryUseCase.js.map +1 -0
- package/features/LockEntry/abstractions.d.ts +41 -0
- package/features/LockEntry/abstractions.js +17 -0
- package/features/LockEntry/abstractions.js.map +1 -0
- package/features/LockEntry/events.d.ts +45 -0
- package/features/LockEntry/events.js +40 -0
- package/features/LockEntry/events.js.map +1 -0
- package/features/LockEntry/feature.d.ts +1 -0
- package/features/LockEntry/feature.js +14 -0
- package/features/LockEntry/feature.js.map +1 -0
- package/features/LockEntry/index.d.ts +1 -0
- package/features/LockEntry/index.js +3 -0
- package/features/LockEntry/index.js.map +1 -0
- package/features/RecordLockingFeature.d.ts +12 -0
- package/features/RecordLockingFeature.js +36 -0
- package/features/RecordLockingFeature.js.map +1 -0
- package/features/UnlockEntry/UnlockEntryEventsDecorator.d.ts +14 -0
- package/features/UnlockEntry/UnlockEntryEventsDecorator.js +41 -0
- package/features/UnlockEntry/UnlockEntryEventsDecorator.js.map +1 -0
- package/features/UnlockEntry/UnlockEntryRepository.d.ts +14 -0
- package/features/UnlockEntry/UnlockEntryRepository.js +40 -0
- package/features/UnlockEntry/UnlockEntryRepository.js.map +1 -0
- package/features/UnlockEntry/UnlockEntryUseCase.d.ts +18 -0
- package/features/UnlockEntry/UnlockEntryUseCase.js +81 -0
- package/features/UnlockEntry/UnlockEntryUseCase.js.map +1 -0
- package/features/UnlockEntry/abstractions.d.ts +44 -0
- package/features/UnlockEntry/abstractions.js +17 -0
- package/features/UnlockEntry/abstractions.js.map +1 -0
- package/features/UnlockEntry/events.d.ts +46 -0
- package/features/UnlockEntry/events.js +40 -0
- package/features/UnlockEntry/events.js.map +1 -0
- package/features/UnlockEntry/feature.d.ts +1 -0
- package/features/UnlockEntry/feature.js +14 -0
- package/features/UnlockEntry/feature.js.map +1 -0
- package/features/UnlockEntry/hasFullAccessPermission.d.ts +2 -0
- package/features/UnlockEntry/hasFullAccessPermission.js +10 -0
- package/features/UnlockEntry/hasFullAccessPermission.js.map +1 -0
- package/features/UnlockEntry/index.d.ts +1 -0
- package/features/UnlockEntry/index.js +3 -0
- package/features/UnlockEntry/index.js.map +1 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.d.ts +14 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js +40 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js.map +1 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.d.ts +17 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js +43 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js.map +1 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.d.ts +16 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js +92 -0
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js.map +1 -0
- package/features/UnlockEntryRequest/abstractions.d.ts +42 -0
- package/features/UnlockEntryRequest/abstractions.js +17 -0
- package/features/UnlockEntryRequest/abstractions.js.map +1 -0
- package/features/UnlockEntryRequest/events.d.ts +45 -0
- package/features/UnlockEntryRequest/events.js +40 -0
- package/features/UnlockEntryRequest/events.js.map +1 -0
- package/features/UnlockEntryRequest/feature.d.ts +1 -0
- package/features/UnlockEntryRequest/feature.js +14 -0
- package/features/UnlockEntryRequest/feature.js.map +1 -0
- package/features/UnlockEntryRequest/index.d.ts +3 -0
- package/features/UnlockEntryRequest/index.js +5 -0
- package/features/UnlockEntryRequest/index.js.map +1 -0
- package/features/UpdateEntryLock/UpdateEntryLockRepository.d.ts +20 -0
- package/features/UpdateEntryLock/UpdateEntryLockRepository.js +63 -0
- package/features/UpdateEntryLock/UpdateEntryLockRepository.js.map +1 -0
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +18 -0
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.js +62 -0
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -0
- package/features/UpdateEntryLock/abstractions.d.ts +42 -0
- package/features/UpdateEntryLock/abstractions.js +17 -0
- package/features/UpdateEntryLock/abstractions.js.map +1 -0
- package/features/UpdateEntryLock/feature.d.ts +1 -0
- package/features/UpdateEntryLock/feature.js +12 -0
- package/features/UpdateEntryLock/feature.js.map +1 -0
- package/features/UpdateEntryLock/index.d.ts +1 -0
- package/features/UpdateEntryLock/index.js +3 -0
- package/features/UpdateEntryLock/index.js.map +1 -0
- package/graphql/checkPermissions.d.ts +5 -0
- package/graphql/checkPermissions.js +14 -0
- package/graphql/checkPermissions.js.map +1 -0
- package/{utils → graphql}/resolve.d.ts +2 -2
- package/graphql/resolve.js +22 -0
- package/graphql/resolve.js.map +1 -0
- package/graphql/schema.d.ts +8 -4
- package/graphql/schema.js +99 -61
- package/graphql/schema.js.map +1 -1
- package/index.d.ts +8 -2
- package/index.js +50 -26
- package/index.js.map +1 -1
- package/package.json +21 -43
- package/types.d.ts +14 -133
- package/types.js +6 -24
- package/types.js.map +1 -1
- package/utils/convertWhereCondition.d.ts +2 -2
- package/utils/convertWhereCondition.js +11 -14
- package/utils/convertWhereCondition.js.map +1 -1
- package/utils/getTimeout.d.ts +3 -2
- package/utils/getTimeout.js +11 -10
- package/utils/getTimeout.js.map +1 -1
- package/utils/lockRecordDatabaseId.js +4 -12
- package/utils/lockRecordDatabaseId.js.map +1 -1
- package/abstractions/IGetLockRecordUseCase.d.ts +0 -8
- package/abstractions/IGetLockRecordUseCase.js +0 -7
- package/abstractions/IGetLockRecordUseCase.js.map +0 -1
- package/abstractions/IGetLockedEntryLockRecordUseCase.d.ts +0 -8
- package/abstractions/IGetLockedEntryLockRecordUseCase.js +0 -7
- package/abstractions/IGetLockedEntryLockRecordUseCase.js.map +0 -1
- package/abstractions/IIsEntryLocked.d.ts +0 -8
- package/abstractions/IIsEntryLocked.js +0 -7
- package/abstractions/IIsEntryLocked.js.map +0 -1
- package/abstractions/IKickOutCurrentUserUseCase.d.ts +0 -5
- package/abstractions/IKickOutCurrentUserUseCase.js +0 -7
- package/abstractions/IKickOutCurrentUserUseCase.js.map +0 -1
- package/abstractions/IListAllLockRecordsUseCase.d.ts +0 -9
- package/abstractions/IListAllLockRecordsUseCase.js +0 -7
- package/abstractions/IListAllLockRecordsUseCase.js.map +0 -1
- package/abstractions/IListLockRecordsUseCase.d.ts +0 -10
- package/abstractions/IListLockRecordsUseCase.js +0 -7
- package/abstractions/IListLockRecordsUseCase.js.map +0 -1
- package/abstractions/ILockEntryUseCase.d.ts +0 -11
- package/abstractions/ILockEntryUseCase.js +0 -7
- package/abstractions/ILockEntryUseCase.js.map +0 -1
- package/abstractions/IUnlockEntryRequestUseCase.d.ts +0 -11
- package/abstractions/IUnlockEntryRequestUseCase.js +0 -7
- package/abstractions/IUnlockEntryRequestUseCase.js.map +0 -1
- package/abstractions/IUnlockEntryUseCase.d.ts +0 -12
- package/abstractions/IUnlockEntryUseCase.js +0 -7
- package/abstractions/IUnlockEntryUseCase.js.map +0 -1
- package/abstractions/IUpdateEntryLockUseCase.d.ts +0 -11
- package/abstractions/IUpdateEntryLockUseCase.js +0 -7
- package/abstractions/IUpdateEntryLockUseCase.js.map +0 -1
- package/crud/crud.d.ts +0 -6
- package/crud/crud.js +0 -188
- package/crud/crud.js.map +0 -1
- package/crud/model.d.ts +0 -2
- package/crud/model.js +0 -127
- package/crud/model.js.map +0 -1
- package/useCases/GetLockRecord/GetLockRecordUseCase.d.ts +0 -10
- package/useCases/GetLockRecord/GetLockRecordUseCase.js +0 -35
- package/useCases/GetLockRecord/GetLockRecordUseCase.js.map +0 -1
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.d.ts +0 -16
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +0 -27
- package/useCases/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +0 -1
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.d.ts +0 -16
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.js +0 -35
- package/useCases/IsEntryLocked/IsEntryLockedUseCase.js.map +0 -1
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.d.ts +0 -12
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js +0 -46
- package/useCases/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +0 -1
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.d.ts +0 -10
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js +0 -32
- package/useCases/ListAllLockRecordsUseCase/ListAllLockRecordsUseCase.js.map +0 -1
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.d.ts +0 -14
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js +0 -27
- package/useCases/ListLockRecordsUseCase/ListLockRecordsUseCase.js.map +0 -1
- package/useCases/LockEntryUseCase/LockEntryUseCase.d.ts +0 -13
- package/useCases/LockEntryUseCase/LockEntryUseCase.js +0 -51
- package/useCases/LockEntryUseCase/LockEntryUseCase.js.map +0 -1
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.d.ts +0 -20
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js +0 -67
- package/useCases/UnlockEntryUseCase/UnlockEntryUseCase.js.map +0 -1
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.d.ts +0 -15
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js +0 -78
- package/useCases/UnlockRequestUseCase/UnlockEntryRequestUseCase.js.map +0 -1
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.d.ts +0 -18
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js +0 -48
- package/useCases/UpdateEntryLock/UpdateEntryLockUseCase.js.map +0 -1
- package/useCases/index.d.ts +0 -28
- package/useCases/index.js +0 -83
- package/useCases/index.js.map +0 -1
- package/utils/calculateExpiresOn.d.ts +0 -2
- package/utils/calculateExpiresOn.js +0 -15
- package/utils/calculateExpiresOn.js.map +0 -1
- package/utils/checkPermissions.d.ts +0 -7
- package/utils/checkPermissions.js +0 -21
- package/utils/checkPermissions.js.map +0 -1
- package/utils/convertEntryToLockRecord.d.ts +0 -28
- package/utils/convertEntryToLockRecord.js.map +0 -1
- package/utils/isLockedFactory.d.ts +0 -5
- package/utils/isLockedFactory.js +0 -20
- package/utils/isLockedFactory.js.map +0 -1
- package/utils/resolve.js +0 -30
- package/utils/resolve.js.map +0 -1
- package/utils/validateSameIdentity.d.ts +0 -6
- package/utils/validateSameIdentity.js +0 -24
- package/utils/validateSameIdentity.js.map +0 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ListAllLockRecordsUseCase as UseCaseAbstraction, ListAllLockRecordsRepository } from "./abstractions.js";
|
|
2
|
+
class ListAllLockRecordsUseCaseImpl {
|
|
3
|
+
constructor(repository) {
|
|
4
|
+
this.repository = repository;
|
|
5
|
+
}
|
|
6
|
+
async execute(input) {
|
|
7
|
+
return await this.repository.execute(input);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export const ListAllLockRecordsUseCase = UseCaseAbstraction.createImplementation({
|
|
11
|
+
implementation: ListAllLockRecordsUseCaseImpl,
|
|
12
|
+
dependencies: [ListAllLockRecordsRepository]
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=ListAllLockRecordsUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ListAllLockRecordsUseCase","UseCaseAbstraction","ListAllLockRecordsRepository","ListAllLockRecordsUseCaseImpl","constructor","repository","execute","input","createImplementation","implementation","dependencies"],"sources":["ListAllLockRecordsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n ListAllLockRecordsUseCase as UseCaseAbstraction,\n ListAllLockRecordsRepository,\n ListAllLockRecordsInput,\n ListAllLockRecordsOutput\n} from \"./abstractions.js\";\n\nclass ListAllLockRecordsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: ListAllLockRecordsRepository.Interface) {}\n\n async execute(\n input?: ListAllLockRecordsInput\n ): Promise<Result<ListAllLockRecordsOutput, UseCaseAbstraction.Error>> {\n return await this.repository.execute(input);\n }\n}\n\nexport const ListAllLockRecordsUseCase = UseCaseAbstraction.createImplementation({\n implementation: ListAllLockRecordsUseCaseImpl,\n dependencies: [ListAllLockRecordsRepository]\n});\n"],"mappings":"AACA,SACIA,yBAAyB,IAAIC,kBAAkB,EAC/CC,4BAA4B;AAKhC,MAAMC,6BAA6B,CAAyC;EACxEC,WAAWA,CAASC,UAAkD,EAAE;IAAA,KAApDA,UAAkD,GAAlDA,UAAkD;EAAG;EAEzE,MAAMC,OAAOA,CACTC,KAA+B,EACoC;IACnE,OAAO,MAAM,IAAI,CAACF,UAAU,CAACC,OAAO,CAACC,KAAK,CAAC;EAC/C;AACJ;AAEA,OAAO,MAAMP,yBAAyB,GAAGC,kBAAkB,CAACO,oBAAoB,CAAC;EAC7EC,cAAc,EAAEN,6BAA6B;EAC7CO,YAAY,EAAE,CAACR,4BAA4B;AAC/C,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ILockRecord } from "../../domain/LockRecord.js";
|
|
3
|
+
import type { LockRecordPersistenceError } from "../../domain/errors.js";
|
|
4
|
+
import type { CmsEntryListParams, CmsEntryMeta } from "@webiny/api-headless-cms/types";
|
|
5
|
+
export type ListAllLockRecordsInput = Pick<CmsEntryListParams, "where" | "limit" | "sort" | "after">;
|
|
6
|
+
export interface ListAllLockRecordsOutput {
|
|
7
|
+
items: ILockRecord[];
|
|
8
|
+
meta: CmsEntryMeta;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* ListAllLockRecords Use Case - Lists all lock records without filtering
|
|
12
|
+
*/
|
|
13
|
+
export interface IListAllLockRecordsUseCase {
|
|
14
|
+
execute(input?: ListAllLockRecordsInput): Promise<Result<ListAllLockRecordsOutput, UseCaseError>>;
|
|
15
|
+
}
|
|
16
|
+
export interface IListAllLockRecordsUseCaseErrors {
|
|
17
|
+
persistence: LockRecordPersistenceError;
|
|
18
|
+
}
|
|
19
|
+
type UseCaseError = IListAllLockRecordsUseCaseErrors[keyof IListAllLockRecordsUseCaseErrors];
|
|
20
|
+
export declare const ListAllLockRecordsUseCase: import("@webiny/di").Abstraction<IListAllLockRecordsUseCase>;
|
|
21
|
+
export declare namespace ListAllLockRecordsUseCase {
|
|
22
|
+
type Interface = IListAllLockRecordsUseCase;
|
|
23
|
+
type Error = UseCaseError;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* ListAllLockRecordsRepository - Fetches all lock records from storage
|
|
27
|
+
*/
|
|
28
|
+
export interface IListAllLockRecordsRepository {
|
|
29
|
+
execute(input?: ListAllLockRecordsInput): Promise<Result<ListAllLockRecordsOutput, RepositoryError>>;
|
|
30
|
+
}
|
|
31
|
+
export interface IListAllLockRecordsRepositoryErrors {
|
|
32
|
+
persistence: LockRecordPersistenceError;
|
|
33
|
+
}
|
|
34
|
+
type RepositoryError = IListAllLockRecordsRepositoryErrors[keyof IListAllLockRecordsRepositoryErrors];
|
|
35
|
+
export declare const ListAllLockRecordsRepository: import("@webiny/di").Abstraction<IListAllLockRecordsRepository>;
|
|
36
|
+
export declare namespace ListAllLockRecordsRepository {
|
|
37
|
+
type Interface = IListAllLockRecordsRepository;
|
|
38
|
+
type Error = RepositoryError;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
|
|
3
|
+
// Input/Output types
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* ListAllLockRecords Use Case - Lists all lock records without filtering
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export const ListAllLockRecordsUseCase = createAbstraction("ListAllLockRecordsUseCase");
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* ListAllLockRecordsRepository - Fetches all lock records from storage
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export const ListAllLockRecordsRepository = createAbstraction("ListAllLockRecordsRepository");
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAbstraction","ListAllLockRecordsUseCase","ListAllLockRecordsRepository"],"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 { LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport type { CmsEntryListParams, CmsEntryMeta } from \"@webiny/api-headless-cms/types\";\n\n// Input/Output types\nexport type ListAllLockRecordsInput = Pick<\n CmsEntryListParams,\n \"where\" | \"limit\" | \"sort\" | \"after\"\n>;\n\nexport interface ListAllLockRecordsOutput {\n items: ILockRecord[];\n meta: CmsEntryMeta;\n}\n\n/**\n * ListAllLockRecords Use Case - Lists all lock records without filtering\n */\nexport interface IListAllLockRecordsUseCase {\n execute(\n input?: ListAllLockRecordsInput\n ): Promise<Result<ListAllLockRecordsOutput, UseCaseError>>;\n}\n\nexport interface IListAllLockRecordsUseCaseErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype UseCaseError = IListAllLockRecordsUseCaseErrors[keyof IListAllLockRecordsUseCaseErrors];\n\nexport const ListAllLockRecordsUseCase = createAbstraction<IListAllLockRecordsUseCase>(\n \"ListAllLockRecordsUseCase\"\n);\n\nexport namespace ListAllLockRecordsUseCase {\n export type Interface = IListAllLockRecordsUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * ListAllLockRecordsRepository - Fetches all lock records from storage\n */\nexport interface IListAllLockRecordsRepository {\n execute(\n input?: ListAllLockRecordsInput\n ): Promise<Result<ListAllLockRecordsOutput, RepositoryError>>;\n}\n\nexport interface IListAllLockRecordsRepositoryErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype RepositoryError =\n IListAllLockRecordsRepositoryErrors[keyof IListAllLockRecordsRepositoryErrors];\n\nexport const ListAllLockRecordsRepository = createAbstraction<IListAllLockRecordsRepository>(\n \"ListAllLockRecordsRepository\"\n);\n\nexport namespace ListAllLockRecordsRepository {\n export type Interface = IListAllLockRecordsRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAMvD;;AAWA;AACA;AACA;;AAaA,OAAO,MAAMC,yBAAyB,GAAGD,iBAAiB,CACtD,2BACJ,CAAC;;AAOD;AACA;AACA;;AAcA,OAAO,MAAME,4BAA4B,GAAGF,iBAAiB,CACzD,8BACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ListAllLockRecordsFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ListAllLockRecordsUseCase } from "./ListAllLockRecordsUseCase.js";
|
|
3
|
+
import { ListAllLockRecordsRepository } from "./ListAllLockRecordsRepository.js";
|
|
4
|
+
export const ListAllLockRecordsFeature = createFeature({
|
|
5
|
+
name: "ListAllLockRecords",
|
|
6
|
+
register(container) {
|
|
7
|
+
container.register(ListAllLockRecordsUseCase);
|
|
8
|
+
container.register(ListAllLockRecordsRepository).inSingletonScope();
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createFeature","ListAllLockRecordsUseCase","ListAllLockRecordsRepository","ListAllLockRecordsFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ListAllLockRecordsUseCase } from \"./ListAllLockRecordsUseCase.js\";\nimport { ListAllLockRecordsRepository } from \"./ListAllLockRecordsRepository.js\";\n\nexport const ListAllLockRecordsFeature = createFeature({\n name: \"ListAllLockRecords\",\n register(container) {\n container.register(ListAllLockRecordsUseCase);\n container.register(ListAllLockRecordsRepository).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,yBAAyB;AAClC,SAASC,4BAA4B;AAErC,OAAO,MAAMC,yBAAyB,GAAGH,aAAa,CAAC;EACnDI,IAAI,EAAE,oBAAoB;EAC1BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,yBAAyB,CAAC;IAC7CK,SAAS,CAACD,QAAQ,CAACH,4BAA4B,CAAC,CAACK,gBAAgB,CAAC,CAAC;EACvE;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./abstractions.js\";\nexport * from \"./feature.js\";\n"],"mappings":"AAAA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
3
|
+
import { ListLockRecordsRepository as RepositoryAbstraction, ListLockRecordsInput, ListLockRecordsOutput } from "./abstractions.js";
|
|
4
|
+
import { RecordLockingConfig, RecordLockingModel } from "../../domain/abstractions.js";
|
|
5
|
+
declare class ListLockRecordsRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
6
|
+
private model;
|
|
7
|
+
private config;
|
|
8
|
+
private listEntries;
|
|
9
|
+
constructor(model: RecordLockingModel.Interface, config: RecordLockingConfig.Interface, listEntries: ListLatestEntriesUseCase.Interface);
|
|
10
|
+
execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, RepositoryAbstraction.Error>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const ListLockRecordsRepository: typeof ListLockRecordsRepositoryImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListLockRecordsRepository>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
3
|
+
import { ListLockRecordsRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
4
|
+
import { RecordLockingConfig, RecordLockingModel } from "../../domain/abstractions.js";
|
|
5
|
+
import { LockRecord } from "../../domain/LockRecord.js";
|
|
6
|
+
import { LockRecordPersistenceError } from "../../domain/errors.js";
|
|
7
|
+
import { convertWhereCondition } from "../../utils/convertWhereCondition.js";
|
|
8
|
+
class ListLockRecordsRepositoryImpl {
|
|
9
|
+
constructor(model, config, listEntries) {
|
|
10
|
+
this.model = model;
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.listEntries = listEntries;
|
|
13
|
+
}
|
|
14
|
+
async execute(input) {
|
|
15
|
+
try {
|
|
16
|
+
const params = {
|
|
17
|
+
...input,
|
|
18
|
+
where: convertWhereCondition(input?.where || {})
|
|
19
|
+
};
|
|
20
|
+
const result = await this.listEntries.execute(this.model, params);
|
|
21
|
+
if (result.isFail()) {
|
|
22
|
+
return Result.fail(new LockRecordPersistenceError(result.error));
|
|
23
|
+
}
|
|
24
|
+
const {
|
|
25
|
+
entries,
|
|
26
|
+
meta
|
|
27
|
+
} = result.value;
|
|
28
|
+
const items = entries.map(entry => new LockRecord(entry, this.config.timeout));
|
|
29
|
+
return Result.ok({
|
|
30
|
+
items,
|
|
31
|
+
meta
|
|
32
|
+
});
|
|
33
|
+
} catch (error) {
|
|
34
|
+
return Result.fail(new LockRecordPersistenceError(error));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export const ListLockRecordsRepository = RepositoryAbstraction.createImplementation({
|
|
39
|
+
implementation: ListLockRecordsRepositoryImpl,
|
|
40
|
+
dependencies: [RecordLockingModel, RecordLockingConfig, ListLatestEntriesUseCase]
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=ListLockRecordsRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Result","ListLatestEntriesUseCase","ListLockRecordsRepository","RepositoryAbstraction","RecordLockingConfig","RecordLockingModel","LockRecord","LockRecordPersistenceError","convertWhereCondition","ListLockRecordsRepositoryImpl","constructor","model","config","listEntries","execute","input","params","where","result","isFail","fail","error","entries","meta","value","items","map","entry","timeout","ok","createImplementation","implementation","dependencies"],"sources":["ListLockRecordsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport {\n ListLockRecordsRepository as RepositoryAbstraction,\n ListLockRecordsInput,\n ListLockRecordsOutput\n} from \"./abstractions.js\";\nimport { RecordLockingConfig, RecordLockingModel } from \"~/domain/abstractions.js\";\nimport { LockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordValues } from \"~/domain/types.js\";\nimport { LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport { convertWhereCondition } from \"~/utils/convertWhereCondition.js\";\n\nclass ListLockRecordsRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private model: RecordLockingModel.Interface,\n private config: RecordLockingConfig.Interface,\n private listEntries: ListLatestEntriesUseCase.Interface\n ) {}\n\n async execute(\n input?: ListLockRecordsInput\n ): Promise<Result<ListLockRecordsOutput, RepositoryAbstraction.Error>> {\n try {\n const params = {\n ...input,\n where: convertWhereCondition(input?.where || {})\n };\n\n const result = await this.listEntries.execute<LockRecordValues>(this.model, params);\n\n if (result.isFail()) {\n return Result.fail(new LockRecordPersistenceError(result.error));\n }\n\n const { entries, meta } = result.value;\n\n const items = entries.map(entry => new LockRecord(entry, this.config.timeout));\n\n return Result.ok({\n items,\n meta\n });\n } catch (error) {\n return Result.fail(new LockRecordPersistenceError(error as Error));\n }\n }\n}\n\nexport const ListLockRecordsRepository = RepositoryAbstraction.createImplementation({\n implementation: ListLockRecordsRepositoryImpl,\n dependencies: [RecordLockingModel, RecordLockingConfig, ListLatestEntriesUseCase]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,wBAAwB,QAAQ,4DAA4D;AACrG,SACIC,yBAAyB,IAAIC,qBAAqB;AAItD,SAASC,mBAAmB,EAAEC,kBAAkB;AAChD,SAASC,UAAU;AAEnB,SAASC,0BAA0B;AACnC,SAASC,qBAAqB;AAE9B,MAAMC,6BAA6B,CAA4C;EAC3EC,WAAWA,CACCC,KAAmC,EACnCC,MAAqC,EACrCC,WAA+C,EACzD;IAAA,KAHUF,KAAmC,GAAnCA,KAAmC;IAAA,KACnCC,MAAqC,GAArCA,MAAqC;IAAA,KACrCC,WAA+C,GAA/CA,WAA+C;EACxD;EAEH,MAAMC,OAAOA,CACTC,KAA4B,EACuC;IACnE,IAAI;MACA,MAAMC,MAAM,GAAG;QACX,GAAGD,KAAK;QACRE,KAAK,EAAET,qBAAqB,CAACO,KAAK,EAAEE,KAAK,IAAI,CAAC,CAAC;MACnD,CAAC;MAED,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACL,WAAW,CAACC,OAAO,CAAmB,IAAI,CAACH,KAAK,EAAEK,MAAM,CAAC;MAEnF,IAAIE,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;QACjB,OAAOnB,MAAM,CAACoB,IAAI,CAAC,IAAIb,0BAA0B,CAACW,MAAM,CAACG,KAAK,CAAC,CAAC;MACpE;MAEA,MAAM;QAAEC,OAAO;QAAEC;MAAK,CAAC,GAAGL,MAAM,CAACM,KAAK;MAEtC,MAAMC,KAAK,GAAGH,OAAO,CAACI,GAAG,CAACC,KAAK,IAAI,IAAIrB,UAAU,CAACqB,KAAK,EAAE,IAAI,CAACf,MAAM,CAACgB,OAAO,CAAC,CAAC;MAE9E,OAAO5B,MAAM,CAAC6B,EAAE,CAAC;QACbJ,KAAK;QACLF;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOF,KAAK,EAAE;MACZ,OAAOrB,MAAM,CAACoB,IAAI,CAAC,IAAIb,0BAA0B,CAACc,KAAc,CAAC,CAAC;IACtE;EACJ;AACJ;AAEA,OAAO,MAAMnB,yBAAyB,GAAGC,qBAAqB,CAAC2B,oBAAoB,CAAC;EAChFC,cAAc,EAAEtB,6BAA6B;EAC7CuB,YAAY,EAAE,CAAC3B,kBAAkB,EAAED,mBAAmB,EAAEH,wBAAwB;AACpF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListLockRecordsInput, ListLockRecordsOutput, ListLockRecordsRepository, ListLockRecordsUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
4
|
+
import { RecordLockingConfig } from "../../domain/abstractions.js";
|
|
5
|
+
declare class ListLockRecordsUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
6
|
+
private repository;
|
|
7
|
+
private identityContext;
|
|
8
|
+
private config;
|
|
9
|
+
constructor(repository: ListLockRecordsRepository.Interface, identityContext: IdentityContext.Interface, config: RecordLockingConfig.Interface);
|
|
10
|
+
execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, UseCaseAbstraction.Error>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const ListLockRecordsUseCase: typeof ListLockRecordsUseCaseImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListLockRecordsUseCase>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ListLockRecordsRepository, ListLockRecordsUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
+
import { RecordLockingConfig } from "../../domain/abstractions.js";
|
|
4
|
+
class ListLockRecordsUseCaseImpl {
|
|
5
|
+
constructor(repository, identityContext, config) {
|
|
6
|
+
this.repository = repository;
|
|
7
|
+
this.identityContext = identityContext;
|
|
8
|
+
this.config = config;
|
|
9
|
+
}
|
|
10
|
+
async execute(input) {
|
|
11
|
+
const identity = this.identityContext.getIdentity();
|
|
12
|
+
|
|
13
|
+
// Filter out expired locks and exclude current user's locks
|
|
14
|
+
const enhancedInput = {
|
|
15
|
+
...input,
|
|
16
|
+
where: {
|
|
17
|
+
...input?.where,
|
|
18
|
+
createdBy_not: identity.id,
|
|
19
|
+
savedOn_gte: new Date(new Date().getTime() - this.config.timeout).toISOString()
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
return await this.repository.execute(enhancedInput);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export const ListLockRecordsUseCase = UseCaseAbstraction.createImplementation({
|
|
26
|
+
implementation: ListLockRecordsUseCaseImpl,
|
|
27
|
+
dependencies: [ListLockRecordsRepository, IdentityContext, RecordLockingConfig]
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=ListLockRecordsUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ListLockRecordsRepository","ListLockRecordsUseCase","UseCaseAbstraction","IdentityContext","RecordLockingConfig","ListLockRecordsUseCaseImpl","constructor","repository","identityContext","config","execute","input","identity","getIdentity","enhancedInput","where","createdBy_not","id","savedOn_gte","Date","getTime","timeout","toISOString","createImplementation","implementation","dependencies"],"sources":["ListLockRecordsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n ListLockRecordsInput,\n ListLockRecordsOutput,\n ListLockRecordsRepository,\n ListLockRecordsUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { RecordLockingConfig } from \"~/domain/abstractions.js\";\n\nclass ListLockRecordsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private repository: ListLockRecordsRepository.Interface,\n private identityContext: IdentityContext.Interface,\n private config: RecordLockingConfig.Interface\n ) {}\n\n async execute(\n input?: ListLockRecordsInput\n ): Promise<Result<ListLockRecordsOutput, UseCaseAbstraction.Error>> {\n const identity = this.identityContext.getIdentity();\n\n // Filter out expired locks and exclude current user's locks\n const enhancedInput: ListLockRecordsInput = {\n ...input,\n where: {\n ...input?.where,\n createdBy_not: identity.id,\n savedOn_gte: new Date(new Date().getTime() - this.config.timeout).toISOString()\n }\n };\n\n return await this.repository.execute(enhancedInput);\n }\n}\n\nexport const ListLockRecordsUseCase = UseCaseAbstraction.createImplementation({\n implementation: ListLockRecordsUseCaseImpl,\n dependencies: [ListLockRecordsRepository, IdentityContext, RecordLockingConfig]\n});\n"],"mappings":"AACA,SAGIA,yBAAyB,EACzBC,sBAAsB,IAAIC,kBAAkB;AAEhD,SAASC,eAAe,QAAQ,2CAA2C;AAC3E,SAASC,mBAAmB;AAE5B,MAAMC,0BAA0B,CAAyC;EACrEC,WAAWA,CACCC,UAA+C,EAC/CC,eAA0C,EAC1CC,MAAqC,EAC/C;IAAA,KAHUF,UAA+C,GAA/CA,UAA+C;IAAA,KAC/CC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,MAAqC,GAArCA,MAAqC;EAC9C;EAEH,MAAMC,OAAOA,CACTC,KAA4B,EACoC;IAChE,MAAMC,QAAQ,GAAG,IAAI,CAACJ,eAAe,CAACK,WAAW,CAAC,CAAC;;IAEnD;IACA,MAAMC,aAAmC,GAAG;MACxC,GAAGH,KAAK;MACRI,KAAK,EAAE;QACH,GAAGJ,KAAK,EAAEI,KAAK;QACfC,aAAa,EAAEJ,QAAQ,CAACK,EAAE;QAC1BC,WAAW,EAAE,IAAIC,IAAI,CAAC,IAAIA,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,GAAG,IAAI,CAACX,MAAM,CAACY,OAAO,CAAC,CAACC,WAAW,CAAC;MAClF;IACJ,CAAC;IAED,OAAO,MAAM,IAAI,CAACf,UAAU,CAACG,OAAO,CAACI,aAAa,CAAC;EACvD;AACJ;AAEA,OAAO,MAAMb,sBAAsB,GAAGC,kBAAkB,CAACqB,oBAAoB,CAAC;EAC1EC,cAAc,EAAEnB,0BAA0B;EAC1CoB,YAAY,EAAE,CAACzB,yBAAyB,EAAEG,eAAe,EAAEC,mBAAmB;AAClF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ILockRecord } from "../../domain/LockRecord.js";
|
|
3
|
+
import type { LockRecordPersistenceError } from "../../domain/errors.js";
|
|
4
|
+
import type { CmsEntryListParams, CmsEntryMeta } from "@webiny/api-headless-cms/types";
|
|
5
|
+
import type { DateStringInterfaceGenerator, IdentityInterfaceGenerator, IdInterfaceGenerator } from "@webiny/api";
|
|
6
|
+
export interface IListLockRecordsWhere extends IdInterfaceGenerator<"id">, IdentityInterfaceGenerator<"lockedBy">, IdentityInterfaceGenerator<"createdBy">, DateStringInterfaceGenerator<"lockedOn">, DateStringInterfaceGenerator<"updatedOn">, DateStringInterfaceGenerator<"savedOn">, DateStringInterfaceGenerator<"expiresOn"> {
|
|
7
|
+
}
|
|
8
|
+
export interface ListLockRecordsInput extends Pick<CmsEntryListParams, "limit" | "sort" | "after"> {
|
|
9
|
+
where?: IListLockRecordsWhere;
|
|
10
|
+
}
|
|
11
|
+
export interface ListLockRecordsOutput {
|
|
12
|
+
items: ILockRecord[];
|
|
13
|
+
meta: CmsEntryMeta;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* ListLockRecords Use Case - Lists active lock records (filters out expired, excludes current user)
|
|
17
|
+
*/
|
|
18
|
+
export interface IListLockRecordsUseCase {
|
|
19
|
+
execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, UseCaseError>>;
|
|
20
|
+
}
|
|
21
|
+
export interface IListLockRecordsUseCaseErrors {
|
|
22
|
+
persistence: LockRecordPersistenceError;
|
|
23
|
+
}
|
|
24
|
+
type UseCaseError = IListLockRecordsUseCaseErrors[keyof IListLockRecordsUseCaseErrors];
|
|
25
|
+
export declare const ListLockRecordsUseCase: import("@webiny/di").Abstraction<IListLockRecordsUseCase>;
|
|
26
|
+
export declare namespace ListLockRecordsUseCase {
|
|
27
|
+
type Interface = IListLockRecordsUseCase;
|
|
28
|
+
type Error = UseCaseError;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* ListLockRecordsRepository - Fetches lock records from storage with filtering
|
|
32
|
+
*/
|
|
33
|
+
export interface IListLockRecordsRepository {
|
|
34
|
+
execute(input?: ListLockRecordsInput): Promise<Result<ListLockRecordsOutput, RepositoryError>>;
|
|
35
|
+
}
|
|
36
|
+
export interface IListLockRecordsRepositoryErrors {
|
|
37
|
+
persistence: LockRecordPersistenceError;
|
|
38
|
+
}
|
|
39
|
+
type RepositoryError = IListLockRecordsRepositoryErrors[keyof IListLockRecordsRepositoryErrors];
|
|
40
|
+
export declare const ListLockRecordsRepository: import("@webiny/di").Abstraction<IListLockRecordsRepository>;
|
|
41
|
+
export declare namespace ListLockRecordsRepository {
|
|
42
|
+
type Interface = IListLockRecordsRepository;
|
|
43
|
+
type Error = RepositoryError;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
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");
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +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 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;;AAmBA;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":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ListLockRecordsFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { ListLockRecordsUseCase } from "./ListLockRecordsUseCase.js";
|
|
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
|
+
}
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./abstractions.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./abstractions.js\";\n"],"mappings":"AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type LockEntryInput, LockEntryUseCase as UseCaseAbstraction, LockEntryUseCase } from "./abstractions.js";
|
|
2
|
+
import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
|
|
3
|
+
import type { ILockRecord } from "../../domain/index.js";
|
|
4
|
+
import { Result } from "@webiny/feature/api/index.js";
|
|
5
|
+
declare class LockEntryErrorDecoratorImpl implements LockEntryUseCase.Interface {
|
|
6
|
+
private readonly eventPublisher;
|
|
7
|
+
private readonly decoratee;
|
|
8
|
+
constructor(eventPublisher: EventPublisher.Interface, decoratee: LockEntryUseCase.Interface);
|
|
9
|
+
execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseAbstraction.Error>>;
|
|
10
|
+
}
|
|
11
|
+
export declare const LockEntryEventsDecorator: typeof LockEntryErrorDecoratorImpl & {
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ILockEntryUseCase>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { LockEntryUseCase } from "./abstractions.js";
|
|
2
|
+
import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
|
|
3
|
+
import { EntryAfterLockEvent, EntryBeforeLockEvent, EntryLockErrorEvent } from "./events.js";
|
|
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;
|
|
24
|
+
}
|
|
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
|
+
}
|
|
35
|
+
export const LockEntryEventsDecorator = LockEntryUseCase.createDecorator({
|
|
36
|
+
decorator: LockEntryErrorDecoratorImpl,
|
|
37
|
+
dependencies: [EventPublisher]
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=LockEntryEventsDecorator.js.map
|
|
@@ -0,0 +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\";\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,0CAA0C;AAGzE,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":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
|
|
3
|
+
import { LockEntryInput, LockEntryRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
4
|
+
import { RecordLockingConfig, RecordLockingModel } from "../../domain/abstractions.js";
|
|
5
|
+
import type { ILockRecord } from "../../domain/LockRecord.js";
|
|
6
|
+
declare class LockEntryRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
7
|
+
private model;
|
|
8
|
+
private config;
|
|
9
|
+
private createEntry;
|
|
10
|
+
constructor(model: RecordLockingModel.Interface, config: RecordLockingConfig.Interface, createEntry: CreateEntryUseCase.Interface);
|
|
11
|
+
create(input: LockEntryInput): Promise<Result<ILockRecord, RepositoryAbstraction.Error>>;
|
|
12
|
+
}
|
|
13
|
+
export declare const LockEntryRepository: typeof LockEntryRepositoryImpl & {
|
|
14
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ILockEntryRepository>;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
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";
|
|
5
|
+
import { LockRecord } from "../../domain/LockRecord.js";
|
|
6
|
+
import { LockRecordPersistenceError } from "../../domain/errors.js";
|
|
7
|
+
import { createLockRecordDatabaseId } from "../../utils/lockRecordDatabaseId.js";
|
|
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));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export const LockEntryRepository = RepositoryAbstraction.createImplementation({
|
|
38
|
+
implementation: LockEntryRepositoryImpl,
|
|
39
|
+
dependencies: [RecordLockingModel, RecordLockingConfig, CreateEntryUseCase]
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=LockEntryRepository.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { LockEntryUseCase as UseCaseAbstraction, LockEntryRepository, LockEntryInput } from "./abstractions.js";
|
|
3
|
+
import { IsEntryLockedUseCase } from "../IsEntryLocked/abstractions.js";
|
|
4
|
+
import type { ILockRecord } from "../../domain/LockRecord.js";
|
|
5
|
+
declare class LockEntryUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
6
|
+
private isEntryLocked;
|
|
7
|
+
private repository;
|
|
8
|
+
constructor(isEntryLocked: IsEntryLockedUseCase.Interface, repository: LockEntryRepository.Interface);
|
|
9
|
+
execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseAbstraction.Error>>;
|
|
10
|
+
}
|
|
11
|
+
export declare const LockEntryUseCase: typeof LockEntryUseCaseImpl & {
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ILockEntryUseCase>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { LockEntryUseCase as UseCaseAbstraction, LockEntryRepository } from "./abstractions.js";
|
|
3
|
+
import { IsEntryLockedUseCase } from "../IsEntryLocked/abstractions.js";
|
|
4
|
+
import { EntryAlreadyLockedError, LockEntryError } from "../../domain/errors.js";
|
|
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);
|
|
15
|
+
}
|
|
16
|
+
if (lockedResult.value) {
|
|
17
|
+
return Result.fail(new EntryAlreadyLockedError({
|
|
18
|
+
id: input.id,
|
|
19
|
+
type: input.type
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
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
|
+
}
|
|
31
|
+
export const LockEntryUseCase = UseCaseAbstraction.createImplementation({
|
|
32
|
+
implementation: LockEntryUseCaseImpl,
|
|
33
|
+
dependencies: [IsEntryLockedUseCase, LockEntryRepository]
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=LockEntryUseCase.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ILockRecord } from "../../domain/LockRecord.js";
|
|
3
|
+
import type { LockRecordEntryType } from "../../domain/types.js";
|
|
4
|
+
import type { EntryAlreadyLockedError, LockEntryError, LockRecordPersistenceError } from "../../domain/errors.js";
|
|
5
|
+
export interface LockEntryInput {
|
|
6
|
+
id: string;
|
|
7
|
+
type: LockRecordEntryType;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* LockEntry Use Case - Creates a lock on an entry
|
|
11
|
+
*/
|
|
12
|
+
export interface ILockEntryUseCase {
|
|
13
|
+
execute(input: LockEntryInput): Promise<Result<ILockRecord, UseCaseError>>;
|
|
14
|
+
}
|
|
15
|
+
export interface ILockEntryUseCaseErrors {
|
|
16
|
+
alreadyLocked: EntryAlreadyLockedError;
|
|
17
|
+
persistence: LockRecordPersistenceError;
|
|
18
|
+
lockError: LockEntryError;
|
|
19
|
+
}
|
|
20
|
+
type UseCaseError = ILockEntryUseCaseErrors[keyof ILockEntryUseCaseErrors];
|
|
21
|
+
export declare const LockEntryUseCase: import("@webiny/di").Abstraction<ILockEntryUseCase>;
|
|
22
|
+
export declare namespace LockEntryUseCase {
|
|
23
|
+
type Interface = ILockEntryUseCase;
|
|
24
|
+
type Error = UseCaseError;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* LockEntryRepository - Creates lock record in storage
|
|
28
|
+
*/
|
|
29
|
+
export interface ILockEntryRepository {
|
|
30
|
+
create(input: LockEntryInput): Promise<Result<ILockRecord, RepositoryError>>;
|
|
31
|
+
}
|
|
32
|
+
export interface ILockEntryRepositoryErrors {
|
|
33
|
+
persistence: LockRecordPersistenceError;
|
|
34
|
+
}
|
|
35
|
+
type RepositoryError = ILockEntryRepositoryErrors[keyof ILockEntryRepositoryErrors];
|
|
36
|
+
export declare const LockEntryRepository: import("@webiny/di").Abstraction<ILockEntryRepository>;
|
|
37
|
+
export declare namespace LockEntryRepository {
|
|
38
|
+
type Interface = ILockEntryRepository;
|
|
39
|
+
type Error = RepositoryError;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
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");
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=abstractions.js.map
|