@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,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 { LockRecordNotFoundError, type LockRecordPersistenceError } from "../../domain/errors.js";
|
|
5
|
+
export interface GetLockRecordInput {
|
|
6
|
+
id: string;
|
|
7
|
+
type: LockRecordEntryType;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* GetLockRecord Use Case - Retrieves a lock record for a given entry
|
|
11
|
+
*/
|
|
12
|
+
export interface IGetLockRecordUseCase {
|
|
13
|
+
execute(input: GetLockRecordInput): Promise<Result<ILockRecord, UseCaseError>>;
|
|
14
|
+
}
|
|
15
|
+
export interface IGetLockRecordUseCaseErrors {
|
|
16
|
+
notFound: LockRecordNotFoundError;
|
|
17
|
+
persistence: LockRecordPersistenceError;
|
|
18
|
+
}
|
|
19
|
+
type UseCaseError = IGetLockRecordUseCaseErrors[keyof IGetLockRecordUseCaseErrors];
|
|
20
|
+
export declare const GetLockRecordUseCase: import("@webiny/di").Abstraction<IGetLockRecordUseCase>;
|
|
21
|
+
export declare namespace GetLockRecordUseCase {
|
|
22
|
+
type Interface = IGetLockRecordUseCase;
|
|
23
|
+
type Error = UseCaseError;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* GetLockRecordRepository - Fetches lock record from storage
|
|
27
|
+
*/
|
|
28
|
+
export interface IGetLockRecordRepository {
|
|
29
|
+
get(id: string): Promise<Result<ILockRecord, RepositoryError>>;
|
|
30
|
+
}
|
|
31
|
+
export interface IGetLockRecordRepositoryErrors {
|
|
32
|
+
notFound: LockRecordNotFoundError;
|
|
33
|
+
persistence: LockRecordPersistenceError;
|
|
34
|
+
}
|
|
35
|
+
type RepositoryError = IGetLockRecordRepositoryErrors[keyof IGetLockRecordRepositoryErrors];
|
|
36
|
+
export declare const GetLockRecordRepository: import("@webiny/di").Abstraction<IGetLockRecordRepository>;
|
|
37
|
+
export declare namespace GetLockRecordRepository {
|
|
38
|
+
type Interface = IGetLockRecordRepository;
|
|
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
|
+
* GetLockRecord Use Case - Retrieves a lock record for a given entry
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export const GetLockRecordUseCase = createAbstraction("GetLockRecordUseCase");
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* GetLockRecordRepository - Fetches lock record from storage
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export const GetLockRecordRepository = createAbstraction("GetLockRecordRepository");
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAbstraction","GetLockRecordUseCase","GetLockRecordRepository"],"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 { LockRecordNotFoundError, type LockRecordPersistenceError } from \"~/domain/errors.js\";\n\n// Input types\nexport interface GetLockRecordInput {\n id: string;\n type: LockRecordEntryType;\n}\n\n/**\n * GetLockRecord Use Case - Retrieves a lock record for a given entry\n */\nexport interface IGetLockRecordUseCase {\n execute(input: GetLockRecordInput): Promise<Result<ILockRecord, UseCaseError>>;\n}\n\nexport interface IGetLockRecordUseCaseErrors {\n notFound: LockRecordNotFoundError;\n persistence: LockRecordPersistenceError;\n}\n\ntype UseCaseError = IGetLockRecordUseCaseErrors[keyof IGetLockRecordUseCaseErrors];\n\nexport const GetLockRecordUseCase =\n createAbstraction<IGetLockRecordUseCase>(\"GetLockRecordUseCase\");\n\nexport namespace GetLockRecordUseCase {\n export type Interface = IGetLockRecordUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * GetLockRecordRepository - Fetches lock record from storage\n */\nexport interface IGetLockRecordRepository {\n get(id: string): Promise<Result<ILockRecord, RepositoryError>>;\n}\n\nexport interface IGetLockRecordRepositoryErrors {\n notFound: LockRecordNotFoundError;\n persistence: LockRecordPersistenceError;\n}\n\ntype RepositoryError = IGetLockRecordRepositoryErrors[keyof IGetLockRecordRepositoryErrors];\n\nexport const GetLockRecordRepository =\n createAbstraction<IGetLockRecordRepository>(\"GetLockRecordRepository\");\n\nexport namespace GetLockRecordRepository {\n export type Interface = IGetLockRecordRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAMvD;;AAMA;AACA;AACA;;AAYA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,sBAAsB,CAAC;;AAOpE;AACA;AACA;;AAYA,OAAO,MAAME,uBAAuB,GAChCF,iBAAiB,CAA2B,yBAAyB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GetLockRecordFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { GetLockRecordUseCase } from "./GetLockRecordUseCase.js";
|
|
3
|
+
import { GetLockRecordRepository } from "./GetLockRecordRepository.js";
|
|
4
|
+
export const GetLockRecordFeature = createFeature({
|
|
5
|
+
name: "GetLockRecord",
|
|
6
|
+
register(container) {
|
|
7
|
+
container.register(GetLockRecordUseCase);
|
|
8
|
+
container.register(GetLockRecordRepository).inSingletonScope();
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createFeature","GetLockRecordUseCase","GetLockRecordRepository","GetLockRecordFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GetLockRecordUseCase } from \"./GetLockRecordUseCase.js\";\nimport { GetLockRecordRepository } from \"./GetLockRecordRepository.js\";\n\nexport const GetLockRecordFeature = createFeature({\n name: \"GetLockRecord\",\n register(container) {\n container.register(GetLockRecordUseCase);\n container.register(GetLockRecordRepository).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAEhC,OAAO,MAAMC,oBAAoB,GAAGH,aAAa,CAAC;EAC9CI,IAAI,EAAE,eAAe;EACrBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACJ,oBAAoB,CAAC;IACxCK,SAAS,CAACD,QAAQ,CAACH,uBAAuB,CAAC,CAACK,gBAAgB,CAAC,CAAC;EAClE;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GetLockRecordFeature"],"sources":["index.ts"],"sourcesContent":["export * from \"./abstractions.js\";\nexport { GetLockRecordFeature } from \"./feature.js\";\n"],"mappings":"AAAA;AACA,SAASA,oBAAoB","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { GetLockedEntryLockRecordUseCase as UseCaseAbstraction, GetLockedEntryLockRecordInput } from "./abstractions.js";
|
|
3
|
+
import { GetLockRecordUseCase } from "../GetLockRecord/abstractions.js";
|
|
4
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
5
|
+
import type { ILockRecord } from "../../domain/LockRecord.js";
|
|
6
|
+
declare class GetLockedEntryLockRecordUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
7
|
+
private getLockRecord;
|
|
8
|
+
private identityContext;
|
|
9
|
+
constructor(getLockRecord: GetLockRecordUseCase.Interface, identityContext: IdentityContext.Interface);
|
|
10
|
+
execute(input: GetLockedEntryLockRecordInput): Promise<Result<ILockRecord, UseCaseAbstraction.Error>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const GetLockedEntryLockRecordUseCase: typeof GetLockedEntryLockRecordUseCaseImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetLockedEntryLockRecordUseCase>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { GetLockedEntryLockRecordUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
|
+
import { GetLockRecordUseCase } from "../GetLockRecord/abstractions.js";
|
|
4
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
5
|
+
import { LockRecordNotFoundError } from "../../domain/errors.js";
|
|
6
|
+
class GetLockedEntryLockRecordUseCaseImpl {
|
|
7
|
+
constructor(getLockRecord, identityContext) {
|
|
8
|
+
this.getLockRecord = getLockRecord;
|
|
9
|
+
this.identityContext = identityContext;
|
|
10
|
+
}
|
|
11
|
+
async execute(input) {
|
|
12
|
+
// Get the lock record
|
|
13
|
+
const result = await this.getLockRecord.execute(input);
|
|
14
|
+
|
|
15
|
+
// If not found or error, return not found error
|
|
16
|
+
if (result.isFail()) {
|
|
17
|
+
return Result.fail(new LockRecordNotFoundError());
|
|
18
|
+
}
|
|
19
|
+
const record = result.value;
|
|
20
|
+
const identity = this.identityContext.getIdentity();
|
|
21
|
+
|
|
22
|
+
// Record is treated as "not found":
|
|
23
|
+
// - If locked by current user
|
|
24
|
+
// - If expired
|
|
25
|
+
const lockedByCurrentUser = record.lockedBy.id === identity.id;
|
|
26
|
+
if (record.isExpired() || lockedByCurrentUser) {
|
|
27
|
+
return Result.fail(new LockRecordNotFoundError());
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Locked by another user, return the record
|
|
31
|
+
return Result.ok(record);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export const GetLockedEntryLockRecordUseCase = UseCaseAbstraction.createImplementation({
|
|
35
|
+
implementation: GetLockedEntryLockRecordUseCaseImpl,
|
|
36
|
+
dependencies: [GetLockRecordUseCase, IdentityContext]
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=GetLockedEntryLockRecordUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Result","GetLockedEntryLockRecordUseCase","UseCaseAbstraction","GetLockRecordUseCase","IdentityContext","LockRecordNotFoundError","GetLockedEntryLockRecordUseCaseImpl","constructor","getLockRecord","identityContext","execute","input","result","isFail","fail","record","value","identity","getIdentity","lockedByCurrentUser","lockedBy","id","isExpired","ok","createImplementation","implementation","dependencies"],"sources":["GetLockedEntryLockRecordUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n GetLockedEntryLockRecordUseCase as UseCaseAbstraction,\n GetLockedEntryLockRecordInput\n} from \"./abstractions.js\";\nimport { GetLockRecordUseCase } from \"../GetLockRecord/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\nimport { LockRecordNotFoundError } from \"~/domain/errors.js\";\n\nclass GetLockedEntryLockRecordUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private getLockRecord: GetLockRecordUseCase.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n async execute(\n input: GetLockedEntryLockRecordInput\n ): Promise<Result<ILockRecord, UseCaseAbstraction.Error>> {\n // Get the lock record\n const result = await this.getLockRecord.execute(input);\n\n // If not found or error, return not found error\n if (result.isFail()) {\n return Result.fail(new LockRecordNotFoundError());\n }\n\n const record = result.value;\n const identity = this.identityContext.getIdentity();\n\n // Record is treated as \"not found\":\n // - If locked by current user\n // - If expired\n const lockedByCurrentUser = record.lockedBy.id === identity.id;\n\n if (record.isExpired() || lockedByCurrentUser) {\n return Result.fail(new LockRecordNotFoundError());\n }\n\n // Locked by another user, return the record\n return Result.ok(record);\n }\n}\n\nexport const GetLockedEntryLockRecordUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetLockedEntryLockRecordUseCaseImpl,\n dependencies: [GetLockRecordUseCase, IdentityContext]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,+BAA+B,IAAIC,kBAAkB;AAGzD,SAASC,oBAAoB;AAC7B,SAASC,eAAe,QAAQ,2CAA2C;AAE3E,SAASC,uBAAuB;AAEhC,MAAMC,mCAAmC,CAAyC;EAC9EC,WAAWA,CACCC,aAA6C,EAC7CC,eAA0C,EACpD;IAAA,KAFUD,aAA6C,GAA7CA,aAA6C;IAAA,KAC7CC,eAA0C,GAA1CA,eAA0C;EACnD;EAEH,MAAMC,OAAOA,CACTC,KAAoC,EACkB;IACtD;IACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACJ,aAAa,CAACE,OAAO,CAACC,KAAK,CAAC;;IAEtD;IACA,IAAIC,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOb,MAAM,CAACc,IAAI,CAAC,IAAIT,uBAAuB,CAAC,CAAC,CAAC;IACrD;IAEA,MAAMU,MAAM,GAAGH,MAAM,CAACI,KAAK;IAC3B,MAAMC,QAAQ,GAAG,IAAI,CAACR,eAAe,CAACS,WAAW,CAAC,CAAC;;IAEnD;IACA;IACA;IACA,MAAMC,mBAAmB,GAAGJ,MAAM,CAACK,QAAQ,CAACC,EAAE,KAAKJ,QAAQ,CAACI,EAAE;IAE9D,IAAIN,MAAM,CAACO,SAAS,CAAC,CAAC,IAAIH,mBAAmB,EAAE;MAC3C,OAAOnB,MAAM,CAACc,IAAI,CAAC,IAAIT,uBAAuB,CAAC,CAAC,CAAC;IACrD;;IAEA;IACA,OAAOL,MAAM,CAACuB,EAAE,CAACR,MAAM,CAAC;EAC5B;AACJ;AAEA,OAAO,MAAMd,+BAA+B,GAAGC,kBAAkB,CAACsB,oBAAoB,CAAC;EACnFC,cAAc,EAAEnB,mCAAmC;EACnDoB,YAAY,EAAE,CAACvB,oBAAoB,EAAEC,eAAe;AACxD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
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 { LockRecordNotFoundError } from "../../domain/errors.js";
|
|
5
|
+
export interface GetLockedEntryLockRecordInput {
|
|
6
|
+
id: string;
|
|
7
|
+
type: LockRecordEntryType;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* GetLockedEntryLockRecord Use Case
|
|
11
|
+
* Returns lock record ONLY if entry is locked by someone OTHER than current user
|
|
12
|
+
* Returns error if: not found, expired, or locked by current user
|
|
13
|
+
*/
|
|
14
|
+
export interface IGetLockedEntryLockRecordUseCase {
|
|
15
|
+
execute(input: GetLockedEntryLockRecordInput): Promise<Result<ILockRecord, UseCaseError>>;
|
|
16
|
+
}
|
|
17
|
+
export interface IGetLockedEntryLockRecordUseCaseErrors {
|
|
18
|
+
notFound: LockRecordNotFoundError;
|
|
19
|
+
}
|
|
20
|
+
type UseCaseError = IGetLockedEntryLockRecordUseCaseErrors[keyof IGetLockedEntryLockRecordUseCaseErrors];
|
|
21
|
+
export declare const GetLockedEntryLockRecordUseCase: import("@webiny/di").Abstraction<IGetLockedEntryLockRecordUseCase>;
|
|
22
|
+
export declare namespace GetLockedEntryLockRecordUseCase {
|
|
23
|
+
type Interface = IGetLockedEntryLockRecordUseCase;
|
|
24
|
+
type Error = UseCaseError;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
|
|
3
|
+
// Input type
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* GetLockedEntryLockRecord Use Case
|
|
7
|
+
* Returns lock record ONLY if entry is locked by someone OTHER than current user
|
|
8
|
+
* Returns error if: not found, expired, or locked by current user
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const GetLockedEntryLockRecordUseCase = createAbstraction("GetLockedEntryLockRecordUseCase");
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAbstraction","GetLockedEntryLockRecordUseCase"],"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 { LockRecordNotFoundError } from \"~/domain/errors.js\";\n\n// Input type\nexport interface GetLockedEntryLockRecordInput {\n id: string;\n type: LockRecordEntryType;\n}\n\n/**\n * GetLockedEntryLockRecord Use Case\n * Returns lock record ONLY if entry is locked by someone OTHER than current user\n * Returns error if: not found, expired, or locked by current user\n */\nexport interface IGetLockedEntryLockRecordUseCase {\n execute(input: GetLockedEntryLockRecordInput): Promise<Result<ILockRecord, UseCaseError>>;\n}\n\nexport interface IGetLockedEntryLockRecordUseCaseErrors {\n notFound: LockRecordNotFoundError;\n}\n\ntype UseCaseError =\n IGetLockedEntryLockRecordUseCaseErrors[keyof IGetLockedEntryLockRecordUseCaseErrors];\n\nexport const GetLockedEntryLockRecordUseCase = createAbstraction<IGetLockedEntryLockRecordUseCase>(\n \"GetLockedEntryLockRecordUseCase\"\n);\n\nexport namespace GetLockedEntryLockRecordUseCase {\n export type Interface = IGetLockedEntryLockRecordUseCase;\n export type Error = UseCaseError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAMvD;;AAMA;AACA;AACA;AACA;AACA;;AAYA,OAAO,MAAMC,+BAA+B,GAAGD,iBAAiB,CAC5D,iCACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GetLockedEntryLockRecordFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { GetLockedEntryLockRecordUseCase } from "./GetLockedEntryLockRecordUseCase.js";
|
|
3
|
+
export const GetLockedEntryLockRecordFeature = createFeature({
|
|
4
|
+
name: "GetLockedEntryLockRecord",
|
|
5
|
+
register(container) {
|
|
6
|
+
container.register(GetLockedEntryLockRecordUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createFeature","GetLockedEntryLockRecordUseCase","GetLockedEntryLockRecordFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { GetLockedEntryLockRecordUseCase } from \"./GetLockedEntryLockRecordUseCase.js\";\n\nexport const GetLockedEntryLockRecordFeature = createFeature({\n name: \"GetLockedEntryLockRecord\",\n register(container) {\n container.register(GetLockedEntryLockRecordUseCase);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,+BAA+B;AAExC,OAAO,MAAMC,+BAA+B,GAAGF,aAAa,CAAC;EACzDG,IAAI,EAAE,0BAA0B;EAChCC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,+BAA+B,CAAC;EACvD;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,14 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { IsEntryLockedUseCase as UseCaseAbstraction, IsEntryLockedInput } from "./abstractions.js";
|
|
3
|
+
import { GetLockRecordUseCase } from "../GetLockRecord/abstractions.js";
|
|
4
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
5
|
+
declare class IsEntryLockedUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
6
|
+
private getLockRecord;
|
|
7
|
+
private identityContext;
|
|
8
|
+
constructor(getLockRecord: GetLockRecordUseCase.Interface, identityContext: IdentityContext.Interface);
|
|
9
|
+
execute(input: IsEntryLockedInput): Promise<Result<boolean, UseCaseAbstraction.Error>>;
|
|
10
|
+
}
|
|
11
|
+
export declare const IsEntryLockedUseCase: typeof IsEntryLockedUseCaseImpl & {
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IIsEntryLockedUseCase>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { IsEntryLockedUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
|
+
import { GetLockRecordUseCase } from "../GetLockRecord/abstractions.js";
|
|
4
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
5
|
+
import { LockRecordNotFoundError } from "../../domain/errors.js";
|
|
6
|
+
class IsEntryLockedUseCaseImpl {
|
|
7
|
+
constructor(getLockRecord, identityContext) {
|
|
8
|
+
this.getLockRecord = getLockRecord;
|
|
9
|
+
this.identityContext = identityContext;
|
|
10
|
+
}
|
|
11
|
+
async execute(input) {
|
|
12
|
+
const result = await this.getLockRecord.execute(input);
|
|
13
|
+
if (result.isFail()) {
|
|
14
|
+
// If not found, entry is not locked
|
|
15
|
+
if (result.error instanceof LockRecordNotFoundError) {
|
|
16
|
+
return Result.ok(false);
|
|
17
|
+
}
|
|
18
|
+
// Propagate other errors
|
|
19
|
+
return Result.fail(result.error);
|
|
20
|
+
}
|
|
21
|
+
const record = result.value;
|
|
22
|
+
|
|
23
|
+
// If expired, entry is not locked
|
|
24
|
+
if (record.isExpired()) {
|
|
25
|
+
return Result.ok(false);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Check if locked by someone else
|
|
29
|
+
const identity = this.identityContext.getIdentity();
|
|
30
|
+
const isLockedByOther = record.lockedBy.id !== identity.id;
|
|
31
|
+
return Result.ok(isLockedByOther);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export const IsEntryLockedUseCase = UseCaseAbstraction.createImplementation({
|
|
35
|
+
implementation: IsEntryLockedUseCaseImpl,
|
|
36
|
+
dependencies: [GetLockRecordUseCase, IdentityContext]
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=IsEntryLockedUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Result","IsEntryLockedUseCase","UseCaseAbstraction","GetLockRecordUseCase","IdentityContext","LockRecordNotFoundError","IsEntryLockedUseCaseImpl","constructor","getLockRecord","identityContext","execute","input","result","isFail","error","ok","fail","record","value","isExpired","identity","getIdentity","isLockedByOther","lockedBy","id","createImplementation","implementation","dependencies"],"sources":["IsEntryLockedUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { IsEntryLockedUseCase as UseCaseAbstraction, IsEntryLockedInput } from \"./abstractions.js\";\nimport { GetLockRecordUseCase } from \"../GetLockRecord/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { LockRecordNotFoundError } from \"~/domain/errors.js\";\n\nclass IsEntryLockedUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private getLockRecord: GetLockRecordUseCase.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n async execute(input: IsEntryLockedInput): Promise<Result<boolean, UseCaseAbstraction.Error>> {\n const result = await this.getLockRecord.execute(input);\n\n if (result.isFail()) {\n // If not found, entry is not locked\n if (result.error instanceof LockRecordNotFoundError) {\n return Result.ok(false);\n }\n // Propagate other errors\n return Result.fail(result.error);\n }\n\n const record = result.value;\n\n // If expired, entry is not locked\n if (record.isExpired()) {\n return Result.ok(false);\n }\n\n // Check if locked by someone else\n const identity = this.identityContext.getIdentity();\n const isLockedByOther = record.lockedBy.id !== identity.id;\n\n return Result.ok(isLockedByOther);\n }\n}\n\nexport const IsEntryLockedUseCase = UseCaseAbstraction.createImplementation({\n implementation: IsEntryLockedUseCaseImpl,\n dependencies: [GetLockRecordUseCase, IdentityContext]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,oBAAoB,IAAIC,kBAAkB;AACnD,SAASC,oBAAoB;AAC7B,SAASC,eAAe,QAAQ,2CAA2C;AAC3E,SAASC,uBAAuB;AAEhC,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CACCC,aAA6C,EAC7CC,eAA0C,EACpD;IAAA,KAFUD,aAA6C,GAA7CA,aAA6C;IAAA,KAC7CC,eAA0C,GAA1CA,eAA0C;EACnD;EAEH,MAAMC,OAAOA,CAACC,KAAyB,EAAsD;IACzF,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACJ,aAAa,CAACE,OAAO,CAACC,KAAK,CAAC;IAEtD,IAAIC,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB;MACA,IAAID,MAAM,CAACE,KAAK,YAAYT,uBAAuB,EAAE;QACjD,OAAOL,MAAM,CAACe,EAAE,CAAC,KAAK,CAAC;MAC3B;MACA;MACA,OAAOf,MAAM,CAACgB,IAAI,CAACJ,MAAM,CAACE,KAAK,CAAC;IACpC;IAEA,MAAMG,MAAM,GAAGL,MAAM,CAACM,KAAK;;IAE3B;IACA,IAAID,MAAM,CAACE,SAAS,CAAC,CAAC,EAAE;MACpB,OAAOnB,MAAM,CAACe,EAAE,CAAC,KAAK,CAAC;IAC3B;;IAEA;IACA,MAAMK,QAAQ,GAAG,IAAI,CAACX,eAAe,CAACY,WAAW,CAAC,CAAC;IACnD,MAAMC,eAAe,GAAGL,MAAM,CAACM,QAAQ,CAACC,EAAE,KAAKJ,QAAQ,CAACI,EAAE;IAE1D,OAAOxB,MAAM,CAACe,EAAE,CAACO,eAAe,CAAC;EACrC;AACJ;AAEA,OAAO,MAAMrB,oBAAoB,GAAGC,kBAAkB,CAACuB,oBAAoB,CAAC;EACxEC,cAAc,EAAEpB,wBAAwB;EACxCqB,YAAY,EAAE,CAACxB,oBAAoB,EAAEC,eAAe;AACxD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import type { LockRecordEntryType } from "../../domain/types.js";
|
|
3
|
+
import type { LockRecordPersistenceError } from "../../domain/errors.js";
|
|
4
|
+
export interface IsEntryLockedInput {
|
|
5
|
+
id: string;
|
|
6
|
+
type: LockRecordEntryType;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* IsEntryLocked Use Case - Checks if an entry is locked by another user
|
|
10
|
+
* Returns true if locked by someone else, false if not locked or locked by current user
|
|
11
|
+
*/
|
|
12
|
+
export interface IIsEntryLockedUseCase {
|
|
13
|
+
execute(input: IsEntryLockedInput): Promise<Result<boolean, UseCaseError>>;
|
|
14
|
+
}
|
|
15
|
+
export interface IIsEntryLockedUseCaseErrors {
|
|
16
|
+
persistence: LockRecordPersistenceError;
|
|
17
|
+
}
|
|
18
|
+
type UseCaseError = IIsEntryLockedUseCaseErrors[keyof IIsEntryLockedUseCaseErrors];
|
|
19
|
+
export declare const IsEntryLockedUseCase: import("@webiny/di").Abstraction<IIsEntryLockedUseCase>;
|
|
20
|
+
export declare namespace IsEntryLockedUseCase {
|
|
21
|
+
type Interface = IIsEntryLockedUseCase;
|
|
22
|
+
type Error = UseCaseError;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
|
|
3
|
+
// Input types
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* IsEntryLocked Use Case - Checks if an entry is locked by another user
|
|
7
|
+
* Returns true if locked by someone else, false if not locked or locked by current user
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const IsEntryLockedUseCase = createAbstraction("IsEntryLockedUseCase");
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAbstraction","IsEntryLockedUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { LockRecordEntryType } from \"~/domain/types.js\";\nimport type { LockRecordPersistenceError } from \"~/domain/errors.js\";\n\n// Input types\nexport interface IsEntryLockedInput {\n id: string;\n type: LockRecordEntryType;\n}\n\n/**\n * IsEntryLocked Use Case - Checks if an entry is locked by another user\n * Returns true if locked by someone else, false if not locked or locked by current user\n */\nexport interface IIsEntryLockedUseCase {\n execute(input: IsEntryLockedInput): Promise<Result<boolean, UseCaseError>>;\n}\n\nexport interface IIsEntryLockedUseCaseErrors {\n persistence: LockRecordPersistenceError;\n}\n\ntype UseCaseError = IIsEntryLockedUseCaseErrors[keyof IIsEntryLockedUseCaseErrors];\n\nexport const IsEntryLockedUseCase =\n createAbstraction<IIsEntryLockedUseCase>(\"IsEntryLockedUseCase\");\n\nexport namespace IsEntryLockedUseCase {\n export type Interface = IIsEntryLockedUseCase;\n export type Error = UseCaseError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;;AAMA;AACA;AACA;AACA;;AAWA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,sBAAsB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const IsEntryLockedFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { IsEntryLockedUseCase } from "./IsEntryLockedUseCase.js";
|
|
3
|
+
export const IsEntryLockedFeature = createFeature({
|
|
4
|
+
name: "IsEntryLocked",
|
|
5
|
+
register(container) {
|
|
6
|
+
container.register(IsEntryLockedUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createFeature","IsEntryLockedUseCase","IsEntryLockedFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { IsEntryLockedUseCase } from \"./IsEntryLockedUseCase.js\";\n\nexport const IsEntryLockedFeature = createFeature({\n name: \"IsEntryLocked\",\n register(container) {\n container.register(IsEntryLockedUseCase);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,oBAAoB;AAE7B,OAAO,MAAMC,oBAAoB,GAAGF,aAAa,CAAC;EAC9CG,IAAI,EAAE,eAAe;EACrBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,oBAAoB,CAAC;EAC5C;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,15 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
+
import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
|
|
4
|
+
import { KickOutCurrentUserUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
5
|
+
import type { ILockRecord } from "../../domain/index.js";
|
|
6
|
+
declare class KickOutCurrentUserUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
7
|
+
private identityContext;
|
|
8
|
+
private websocketService?;
|
|
9
|
+
constructor(identityContext: IdentityContext.Interface, websocketService?: WebsocketService.Interface | undefined);
|
|
10
|
+
execute(record: ILockRecord): Promise<Result<void, UseCaseAbstraction.Error>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const KickOutCurrentUserUseCase: typeof KickOutCurrentUserUseCaseImpl & {
|
|
13
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IKickOutCurrentUserUseCase>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
|
|
3
|
+
import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
|
|
4
|
+
import { parseIdentifier } from "@webiny/utils";
|
|
5
|
+
import { KickOutCurrentUserUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
6
|
+
class KickOutCurrentUserUseCaseImpl {
|
|
7
|
+
constructor(identityContext, websocketService) {
|
|
8
|
+
this.identityContext = identityContext;
|
|
9
|
+
this.websocketService = websocketService;
|
|
10
|
+
}
|
|
11
|
+
async execute(record) {
|
|
12
|
+
if (!this.websocketService) {
|
|
13
|
+
return Result.ok();
|
|
14
|
+
}
|
|
15
|
+
const {
|
|
16
|
+
lockedBy,
|
|
17
|
+
id
|
|
18
|
+
} = record;
|
|
19
|
+
const {
|
|
20
|
+
id: entryId
|
|
21
|
+
} = parseIdentifier(id);
|
|
22
|
+
const identity = this.identityContext.getIdentity();
|
|
23
|
+
await this.websocketService.send({
|
|
24
|
+
id: lockedBy.id
|
|
25
|
+
}, {
|
|
26
|
+
action: `recordLocking.entry.kickOut.${entryId}`,
|
|
27
|
+
data: {
|
|
28
|
+
record: record.toObject(),
|
|
29
|
+
user: identity
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return Result.ok();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export const KickOutCurrentUserUseCase = UseCaseAbstraction.createImplementation({
|
|
36
|
+
implementation: KickOutCurrentUserUseCaseImpl,
|
|
37
|
+
dependencies: [IdentityContext, [WebsocketService, {
|
|
38
|
+
optional: true
|
|
39
|
+
}]]
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=KickOutCurrentUserUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Result","IdentityContext","WebsocketService","parseIdentifier","KickOutCurrentUserUseCase","UseCaseAbstraction","KickOutCurrentUserUseCaseImpl","constructor","identityContext","websocketService","execute","record","ok","lockedBy","id","entryId","identity","getIdentity","send","action","data","toObject","user","createImplementation","implementation","dependencies","optional"],"sources":["KickOutCurrentUserUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/IdentityContext\";\nimport { WebsocketService } from \"@webiny/api-websockets/features/WebsocketService/index.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { KickOutCurrentUserUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport type { ILockRecord } from \"~/domain/index.js\";\n\nclass KickOutCurrentUserUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private websocketService?: WebsocketService.Interface\n ) {}\n\n async execute(record: ILockRecord): Promise<Result<void, UseCaseAbstraction.Error>> {\n if (!this.websocketService) {\n return Result.ok();\n }\n\n const { lockedBy, id } = record;\n\n const { id: entryId } = parseIdentifier(id);\n const identity = this.identityContext.getIdentity();\n\n await this.websocketService.send(\n { id: lockedBy.id },\n {\n action: `recordLocking.entry.kickOut.${entryId}`,\n data: {\n record: record.toObject(),\n user: identity\n }\n }\n );\n\n return Result.ok();\n }\n}\n\nexport const KickOutCurrentUserUseCase = UseCaseAbstraction.createImplementation({\n implementation: KickOutCurrentUserUseCaseImpl,\n dependencies: [IdentityContext, [WebsocketService, { optional: true }]]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,eAAe,QAAQ,2CAA2C;AAC3E,SAASC,gBAAgB,QAAQ,2DAA2D;AAC5F,SAASC,eAAe,QAAQ,eAAe;AAC/C,SAASC,yBAAyB,IAAIC,kBAAkB;AAGxD,MAAMC,6BAA6B,CAAyC;EACxEC,WAAWA,CACCC,eAA0C,EAC1CC,gBAA6C,EACvD;IAAA,KAFUD,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,gBAA6C,GAA7CA,gBAA6C;EACtD;EAEH,MAAMC,OAAOA,CAACC,MAAmB,EAAmD;IAChF,IAAI,CAAC,IAAI,CAACF,gBAAgB,EAAE;MACxB,OAAOT,MAAM,CAACY,EAAE,CAAC,CAAC;IACtB;IAEA,MAAM;MAAEC,QAAQ;MAAEC;IAAG,CAAC,GAAGH,MAAM;IAE/B,MAAM;MAAEG,EAAE,EAAEC;IAAQ,CAAC,GAAGZ,eAAe,CAACW,EAAE,CAAC;IAC3C,MAAME,QAAQ,GAAG,IAAI,CAACR,eAAe,CAACS,WAAW,CAAC,CAAC;IAEnD,MAAM,IAAI,CAACR,gBAAgB,CAACS,IAAI,CAC5B;MAAEJ,EAAE,EAAED,QAAQ,CAACC;IAAG,CAAC,EACnB;MACIK,MAAM,EAAE,+BAA+BJ,OAAO,EAAE;MAChDK,IAAI,EAAE;QACFT,MAAM,EAAEA,MAAM,CAACU,QAAQ,CAAC,CAAC;QACzBC,IAAI,EAAEN;MACV;IACJ,CACJ,CAAC;IAED,OAAOhB,MAAM,CAACY,EAAE,CAAC,CAAC;EACtB;AACJ;AAEA,OAAO,MAAMR,yBAAyB,GAAGC,kBAAkB,CAACkB,oBAAoB,CAAC;EAC7EC,cAAc,EAAElB,6BAA6B;EAC7CmB,YAAY,EAAE,CAACxB,eAAe,EAAE,CAACC,gBAAgB,EAAE;IAAEwB,QAAQ,EAAE;EAAK,CAAC,CAAC;AAC1E,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import type { ILockRecord } from "../../domain/LockRecord.js";
|
|
3
|
+
/**
|
|
4
|
+
* KickOutCurrentUser Use Case - Sends websocket message to notify locked-out user
|
|
5
|
+
*/
|
|
6
|
+
export interface IKickOutCurrentUserUseCase {
|
|
7
|
+
execute(record: ILockRecord): Promise<Result<void, UseCaseError>>;
|
|
8
|
+
}
|
|
9
|
+
export interface IKickOutCurrentUserUseCaseErrors {
|
|
10
|
+
}
|
|
11
|
+
type UseCaseError = IKickOutCurrentUserUseCaseErrors[keyof IKickOutCurrentUserUseCaseErrors];
|
|
12
|
+
export declare const KickOutCurrentUserUseCase: import("@webiny/di").Abstraction<IKickOutCurrentUserUseCase>;
|
|
13
|
+
export declare namespace KickOutCurrentUserUseCase {
|
|
14
|
+
type Interface = IKickOutCurrentUserUseCase;
|
|
15
|
+
type Error = UseCaseError;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* KickOutCurrentUser Use Case - Sends websocket message to notify locked-out user
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const KickOutCurrentUserUseCase = createAbstraction("KickOutCurrentUserUseCase");
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAbstraction","KickOutCurrentUserUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\n\n/**\n * KickOutCurrentUser Use Case - Sends websocket message to notify locked-out user\n */\nexport interface IKickOutCurrentUserUseCase {\n execute(record: ILockRecord): Promise<Result<void, UseCaseError>>;\n}\n\nexport interface IKickOutCurrentUserUseCaseErrors {\n // This use case swallows errors and logs them, so no errors are exposed\n}\n\ntype UseCaseError = IKickOutCurrentUserUseCaseErrors[keyof IKickOutCurrentUserUseCaseErrors];\n\nexport const KickOutCurrentUserUseCase = createAbstraction<IKickOutCurrentUserUseCase>(\n \"KickOutCurrentUserUseCase\"\n);\n\nexport namespace KickOutCurrentUserUseCase {\n export type Interface = IKickOutCurrentUserUseCase;\n export type Error = UseCaseError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAIvD;AACA;AACA;;AAWA,OAAO,MAAMC,yBAAyB,GAAGD,iBAAiB,CACtD,2BACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const KickOutCurrentUserFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import { KickOutCurrentUserUseCase } from "./KickOutCurrentUserUseCase.js";
|
|
3
|
+
export const KickOutCurrentUserFeature = createFeature({
|
|
4
|
+
name: "KickOutCurrentUser",
|
|
5
|
+
register(container) {
|
|
6
|
+
container.register(KickOutCurrentUserUseCase);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createFeature","KickOutCurrentUserUseCase","KickOutCurrentUserFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { KickOutCurrentUserUseCase } from \"./KickOutCurrentUserUseCase.js\";\n\nexport const KickOutCurrentUserFeature = createFeature({\n name: \"KickOutCurrentUser\",\n register(container) {\n container.register(KickOutCurrentUserUseCase);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,yBAAyB;AAElC,OAAO,MAAMC,yBAAyB,GAAGF,aAAa,CAAC;EACnDG,IAAI,EAAE,oBAAoB;EAC1BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,yBAAyB,CAAC;EACjD;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,16 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListAllLockRecordsRepository as RepositoryAbstraction, ListAllLockRecordsInput, ListAllLockRecordsOutput } from "./abstractions.js";
|
|
3
|
+
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
4
|
+
import { RecordLockingConfig } from "../../domain/abstractions.js";
|
|
5
|
+
import type { CmsModel } from "@webiny/api-headless-cms/types";
|
|
6
|
+
declare class ListAllLockRecordsRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
7
|
+
private config;
|
|
8
|
+
private listEntries;
|
|
9
|
+
private model;
|
|
10
|
+
constructor(config: RecordLockingConfig.Interface, listEntries: ListLatestEntriesUseCase.Interface, model: CmsModel);
|
|
11
|
+
execute(input?: ListAllLockRecordsInput): Promise<Result<ListAllLockRecordsOutput, RepositoryAbstraction.Error>>;
|
|
12
|
+
}
|
|
13
|
+
export declare const ListAllLockRecordsRepository: typeof ListAllLockRecordsRepositoryImpl & {
|
|
14
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListAllLockRecordsRepository>;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListAllLockRecordsRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
3
|
+
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
4
|
+
import { RecordLockingConfig, RecordLockingModel } from "../../domain/abstractions.js";
|
|
5
|
+
import { LockRecordPersistenceError } from "../../domain/errors.js";
|
|
6
|
+
import { convertWhereCondition } from "../../utils/convertWhereCondition.js";
|
|
7
|
+
import { LockRecord } from "../../domain/LockRecord.js";
|
|
8
|
+
class ListAllLockRecordsRepositoryImpl {
|
|
9
|
+
constructor(config, listEntries, model) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.listEntries = listEntries;
|
|
12
|
+
this.model = model;
|
|
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 ListAllLockRecordsRepository = RepositoryAbstraction.createImplementation({
|
|
39
|
+
implementation: ListAllLockRecordsRepositoryImpl,
|
|
40
|
+
dependencies: [RecordLockingConfig, ListLatestEntriesUseCase, RecordLockingModel]
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=ListAllLockRecordsRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Result","ListAllLockRecordsRepository","RepositoryAbstraction","ListLatestEntriesUseCase","RecordLockingConfig","RecordLockingModel","LockRecordPersistenceError","convertWhereCondition","LockRecord","ListAllLockRecordsRepositoryImpl","constructor","config","listEntries","model","execute","input","params","where","result","isFail","fail","error","entries","meta","value","items","map","entry","timeout","ok","createImplementation","implementation","dependencies"],"sources":["ListAllLockRecordsRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n ListAllLockRecordsRepository as RepositoryAbstraction,\n ListAllLockRecordsInput,\n ListAllLockRecordsOutput\n} from \"./abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { RecordLockingConfig, RecordLockingModel } from \"~/domain/abstractions.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport { convertWhereCondition } from \"~/utils/convertWhereCondition.js\";\nimport { LockRecord } from \"~/domain/LockRecord.js\";\nimport type { LockRecordValues } from \"~/domain/index.js\";\n\nclass ListAllLockRecordsRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private config: RecordLockingConfig.Interface,\n private listEntries: ListLatestEntriesUseCase.Interface,\n private model: CmsModel\n ) {}\n\n async execute(\n input?: ListAllLockRecordsInput\n ): Promise<Result<ListAllLockRecordsOutput, 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 ListAllLockRecordsRepository = RepositoryAbstraction.createImplementation({\n implementation: ListAllLockRecordsRepositoryImpl,\n dependencies: [RecordLockingConfig, ListLatestEntriesUseCase, RecordLockingModel]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,4BAA4B,IAAIC,qBAAqB;AAIzD,SAASC,wBAAwB,QAAQ,4DAA4D;AACrG,SAASC,mBAAmB,EAAEC,kBAAkB;AAEhD,SAASC,0BAA0B;AACnC,SAASC,qBAAqB;AAC9B,SAASC,UAAU;AAGnB,MAAMC,gCAAgC,CAA4C;EAC9EC,WAAWA,CACCC,MAAqC,EACrCC,WAA+C,EAC/CC,KAAe,EACzB;IAAA,KAHUF,MAAqC,GAArCA,MAAqC;IAAA,KACrCC,WAA+C,GAA/CA,WAA+C;IAAA,KAC/CC,KAAe,GAAfA,KAAe;EACxB;EAEH,MAAMC,OAAOA,CACTC,KAA+B,EACuC;IACtE,IAAI;MACA,MAAMC,MAAM,GAAG;QACX,GAAGD,KAAK;QACRE,KAAK,EAAEV,qBAAqB,CAACQ,KAAK,EAAEE,KAAK;MAC7C,CAAC;MAED,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACN,WAAW,CAACE,OAAO,CAAmB,IAAI,CAACD,KAAK,EAAEG,MAAM,CAAC;MAEnF,IAAIE,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;QACjB,OAAOnB,MAAM,CAACoB,IAAI,CAAC,IAAId,0BAA0B,CAACY,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,IAAInB,UAAU,CAACmB,KAAK,EAAE,IAAI,CAAChB,MAAM,CAACiB,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,IAAId,0BAA0B,CAACe,KAAc,CAAC,CAAC;IACtE;EACJ;AACJ;AAEA,OAAO,MAAMpB,4BAA4B,GAAGC,qBAAqB,CAAC4B,oBAAoB,CAAC;EACnFC,cAAc,EAAEtB,gCAAgC;EAChDuB,YAAY,EAAE,CAAC5B,mBAAmB,EAAED,wBAAwB,EAAEE,kBAAkB;AACpF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
2
|
+
import { ListAllLockRecordsUseCase as UseCaseAbstraction, ListAllLockRecordsRepository, ListAllLockRecordsInput, ListAllLockRecordsOutput } from "./abstractions.js";
|
|
3
|
+
declare class ListAllLockRecordsUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
4
|
+
private repository;
|
|
5
|
+
constructor(repository: ListAllLockRecordsRepository.Interface);
|
|
6
|
+
execute(input?: ListAllLockRecordsInput): Promise<Result<ListAllLockRecordsOutput, UseCaseAbstraction.Error>>;
|
|
7
|
+
}
|
|
8
|
+
export declare const ListAllLockRecordsUseCase: typeof ListAllLockRecordsUseCaseImpl & {
|
|
9
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IListAllLockRecordsUseCase>;
|
|
10
|
+
};
|
|
11
|
+
export {};
|