@webiny/api-record-locking 6.3.0-beta.4 → 6.4.0-beta.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/domain/LockRecord.js +63 -70
- package/domain/LockRecord.js.map +1 -1
- package/domain/RecordLockingModel.js +26 -23
- package/domain/RecordLockingModel.js.map +1 -1
- package/domain/abstractions.js +3 -7
- package/domain/abstractions.js.map +1 -1
- package/domain/calculateExpiresOn.js +5 -6
- package/domain/calculateExpiresOn.js.map +1 -1
- package/domain/errors.js +71 -81
- package/domain/errors.js.map +1 -1
- package/domain/index.js +0 -2
- package/domain/types.js +6 -9
- package/domain/types.js.map +1 -1
- package/features/GetLockRecord/GetLockRecordRepository.js +27 -24
- package/features/GetLockRecord/GetLockRecordRepository.js.map +1 -1
- package/features/GetLockRecord/GetLockRecordUseCase.js +13 -10
- package/features/GetLockRecord/GetLockRecordUseCase.js.map +1 -1
- package/features/GetLockRecord/abstractions.js +3 -14
- package/features/GetLockRecord/abstractions.js.map +1 -1
- package/features/GetLockRecord/feature.js +7 -6
- package/features/GetLockRecord/feature.js.map +1 -1
- package/features/GetLockRecord/index.js +0 -2
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js +19 -28
- package/features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js.map +1 -1
- package/features/GetLockedEntryLockRecord/abstractions.js +2 -10
- package/features/GetLockedEntryLockRecord/abstractions.js.map +1 -1
- package/features/GetLockedEntryLockRecord/feature.js +6 -5
- package/features/GetLockedEntryLockRecord/feature.js.map +1 -1
- package/features/GetLockedEntryLockRecord/index.js +0 -2
- package/features/IsEntryLocked/IsEntryLockedUseCase.js +22 -28
- package/features/IsEntryLocked/IsEntryLockedUseCase.js.map +1 -1
- package/features/IsEntryLocked/abstractions.js +2 -9
- package/features/IsEntryLocked/abstractions.js.map +1 -1
- package/features/IsEntryLocked/feature.js +6 -5
- package/features/IsEntryLocked/feature.js.map +1 -1
- package/features/IsEntryLocked/index.js +0 -2
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js +32 -32
- package/features/KickOutCurrentUser/KickOutCurrentUserUseCase.js.map +1 -1
- package/features/KickOutCurrentUser/abstractions.js +2 -6
- package/features/KickOutCurrentUser/abstractions.js.map +1 -1
- package/features/KickOutCurrentUser/feature.js +6 -5
- package/features/KickOutCurrentUser/feature.js.map +1 -1
- package/features/KickOutCurrentUser/index.js +0 -2
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.js +31 -31
- package/features/ListAllLockRecords/ListAllLockRecordsRepository.js.map +1 -1
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js +13 -10
- package/features/ListAllLockRecords/ListAllLockRecordsUseCase.js.map +1 -1
- package/features/ListAllLockRecords/abstractions.js +3 -14
- package/features/ListAllLockRecords/abstractions.js.map +1 -1
- package/features/ListAllLockRecords/feature.js +7 -6
- package/features/ListAllLockRecords/feature.js.map +1 -1
- package/features/ListAllLockRecords/index.js +0 -2
- package/features/ListLockRecords/ListLockRecordsRepository.js +31 -31
- package/features/ListLockRecords/ListLockRecordsRepository.js.map +1 -1
- package/features/ListLockRecords/ListLockRecordsUseCase.js +26 -23
- package/features/ListLockRecords/ListLockRecordsUseCase.js.map +1 -1
- package/features/ListLockRecords/abstractions.js +3 -14
- package/features/ListLockRecords/abstractions.js.map +1 -1
- package/features/ListLockRecords/feature.js +7 -6
- package/features/ListLockRecords/feature.js.map +1 -1
- package/features/ListLockRecords/index.js +0 -2
- package/features/LockEntry/LockEntryEventsDecorator.js +31 -31
- package/features/LockEntry/LockEntryEventsDecorator.js.map +1 -1
- package/features/LockEntry/LockEntryRepository.js +33 -30
- package/features/LockEntry/LockEntryRepository.js.map +1 -1
- package/features/LockEntry/LockEntryUseCase.js +21 -26
- package/features/LockEntry/LockEntryUseCase.js.map +1 -1
- package/features/LockEntry/abstractions.js +3 -14
- package/features/LockEntry/abstractions.js.map +1 -1
- package/features/LockEntry/events.js +25 -33
- package/features/LockEntry/events.js.map +1 -1
- package/features/LockEntry/feature.js +8 -7
- package/features/LockEntry/feature.js.map +1 -1
- package/features/LockEntry/index.js +0 -2
- package/features/RecordLockingFeature.js +19 -21
- package/features/RecordLockingFeature.js.map +1 -1
- package/features/UnlockEntry/UnlockEntryEventsDecorator.js +32 -32
- package/features/UnlockEntry/UnlockEntryEventsDecorator.js.map +1 -1
- package/features/UnlockEntry/UnlockEntryRepository.js +29 -27
- package/features/UnlockEntry/UnlockEntryRepository.js.map +1 -1
- package/features/UnlockEntry/UnlockEntryUseCase.js +53 -69
- package/features/UnlockEntry/UnlockEntryUseCase.js.map +1 -1
- package/features/UnlockEntry/abstractions.js +3 -14
- package/features/UnlockEntry/abstractions.js.map +1 -1
- package/features/UnlockEntry/events.js +25 -33
- package/features/UnlockEntry/events.js.map +1 -1
- package/features/UnlockEntry/feature.js +8 -7
- package/features/UnlockEntry/feature.js.map +1 -1
- package/features/UnlockEntry/hasFullAccessPermission.js +6 -7
- package/features/UnlockEntry/hasFullAccessPermission.js.map +1 -1
- package/features/UnlockEntry/index.js +0 -2
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js +31 -31
- package/features/UnlockEntryRequest/UnlockEntryRequestEventsDecorator.js.map +1 -1
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js +31 -30
- package/features/UnlockEntryRequest/UnlockEntryRequestRepository.js.map +1 -1
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js +62 -79
- package/features/UnlockEntryRequest/UnlockEntryRequestUseCase.js.map +1 -1
- package/features/UnlockEntryRequest/abstractions.js +3 -14
- package/features/UnlockEntryRequest/abstractions.js.map +1 -1
- package/features/UnlockEntryRequest/events.js +25 -33
- package/features/UnlockEntryRequest/events.js.map +1 -1
- package/features/UnlockEntryRequest/feature.js +8 -7
- package/features/UnlockEntryRequest/feature.js.map +1 -1
- package/features/UnlockEntryRequest/index.js +0 -2
- package/features/UpdateEntryLock/UpdateEntryLockRepository.js +45 -48
- package/features/UpdateEntryLock/UpdateEntryLockRepository.js.map +1 -1
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.js +40 -51
- package/features/UpdateEntryLock/UpdateEntryLockUseCase.js.map +1 -1
- package/features/UpdateEntryLock/abstractions.js +3 -14
- package/features/UpdateEntryLock/abstractions.js.map +1 -1
- package/features/UpdateEntryLock/feature.js +7 -6
- package/features/UpdateEntryLock/feature.js.map +1 -1
- package/features/UpdateEntryLock/index.js +0 -2
- package/graphql/checkPermissions.js +5 -9
- package/graphql/checkPermissions.js.map +1 -1
- package/graphql/resolve.js +15 -17
- package/graphql/resolve.js.map +1 -1
- package/graphql/schema.js +147 -165
- package/graphql/schema.js.map +1 -1
- package/index.js +40 -49
- package/index.js.map +1 -1
- package/package.json +17 -17
- package/types.js +6 -9
- package/types.js.map +1 -1
- package/utils/convertWhereCondition.js +20 -32
- package/utils/convertWhereCondition.js.map +1 -1
- package/utils/getTimeout.js +8 -15
- package/utils/getTimeout.js.map +1 -1
- package/utils/lockRecordDatabaseId.js +6 -11
- package/utils/lockRecordDatabaseId.js.map +1 -1
- package/domain/index.js.map +0 -1
- package/features/GetLockRecord/index.js.map +0 -1
- package/features/GetLockedEntryLockRecord/index.js.map +0 -1
- package/features/IsEntryLocked/index.js.map +0 -1
- package/features/KickOutCurrentUser/index.js.map +0 -1
- package/features/ListAllLockRecords/index.js.map +0 -1
- package/features/ListLockRecords/index.js.map +0 -1
- package/features/LockEntry/index.js.map +0 -1
- package/features/UnlockEntry/index.js.map +0 -1
- package/features/UnlockEntryRequest/index.js.map +0 -1
- package/features/UpdateEntryLock/index.js.map +0 -1
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
|
|
3
3
|
import { createIdentifier } from "@webiny/utils";
|
|
4
|
-
import { GetLockRecordRepository
|
|
4
|
+
import { GetLockRecordRepository } from "./abstractions.js";
|
|
5
5
|
import { RecordLockingConfig, RecordLockingModel } from "../../domain/abstractions.js";
|
|
6
6
|
import { LockRecord } from "../../domain/LockRecord.js";
|
|
7
7
|
import { LockRecordNotFoundError, LockRecordPersistenceError } from "../../domain/errors.js";
|
|
8
8
|
import { createLockRecordDatabaseId } from "../../utils/lockRecordDatabaseId.js";
|
|
9
9
|
class GetLockRecordRepositoryImpl {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
10
|
+
constructor(model, config, getEntryById){
|
|
11
|
+
this.model = model;
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.getEntryById = getEntryById;
|
|
14
|
+
}
|
|
15
|
+
async get(id) {
|
|
16
|
+
const recordId = createLockRecordDatabaseId(id);
|
|
17
|
+
const entryId = createIdentifier({
|
|
18
|
+
id: recordId,
|
|
19
|
+
version: 1
|
|
20
|
+
});
|
|
21
|
+
const result = await this.getEntryById.execute(this.model, entryId);
|
|
22
|
+
if (result.isFail()) {
|
|
23
|
+
if ("Cms/Entry/NotFound" === result.error.code) return Result.fail(new LockRecordNotFoundError());
|
|
24
|
+
return Result.fail(new LockRecordPersistenceError(result.error));
|
|
25
|
+
}
|
|
26
|
+
const entry = result.value;
|
|
27
|
+
return Result.ok(new LockRecord(entry, this.config.timeout));
|
|
27
28
|
}
|
|
28
|
-
const entry = result.value;
|
|
29
|
-
return Result.ok(new LockRecord(entry, this.config.timeout));
|
|
30
|
-
}
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
const GetLockRecordRepository_GetLockRecordRepository = GetLockRecordRepository.createImplementation({
|
|
31
|
+
implementation: GetLockRecordRepositoryImpl,
|
|
32
|
+
dependencies: [
|
|
33
|
+
RecordLockingModel,
|
|
34
|
+
RecordLockingConfig,
|
|
35
|
+
GetEntryByIdUseCase
|
|
36
|
+
]
|
|
35
37
|
});
|
|
38
|
+
export { GetLockRecordRepository_GetLockRecordRepository as GetLockRecordRepository };
|
|
36
39
|
|
|
37
40
|
//# sourceMappingURL=GetLockRecordRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/GetLockRecord/GetLockRecordRepository.js","sources":["../../../src/features/GetLockRecord/GetLockRecordRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { createIdentifier } from \"@webiny/utils\";\nimport { GetLockRecordRepository 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 { LockRecordNotFoundError, LockRecordPersistenceError } from \"~/domain/errors.js\";\nimport { createLockRecordDatabaseId } from \"~/utils/lockRecordDatabaseId.js\";\n\nclass GetLockRecordRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private model: RecordLockingModel.Interface,\n private config: RecordLockingConfig.Interface,\n private getEntryById: GetEntryByIdUseCase.Interface\n ) {}\n\n async get(id: string): Promise<Result<ILockRecord, RepositoryAbstraction.Error>> {\n const recordId = createLockRecordDatabaseId(id);\n const entryId = createIdentifier({\n id: recordId,\n version: 1\n });\n\n const result = await this.getEntryById.execute<LockRecordValues>(this.model, entryId);\n\n if (result.isFail()) {\n if (result.error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new LockRecordNotFoundError());\n }\n\n return Result.fail(new LockRecordPersistenceError(result.error));\n }\n\n const entry = result.value;\n\n return Result.ok(new LockRecord(entry, this.config.timeout));\n }\n}\n\nexport const GetLockRecordRepository = RepositoryAbstraction.createImplementation({\n implementation: GetLockRecordRepositoryImpl,\n dependencies: [RecordLockingModel, RecordLockingConfig, GetEntryByIdUseCase]\n});\n"],"names":["GetLockRecordRepositoryImpl","model","config","getEntryById","id","recordId","createLockRecordDatabaseId","entryId","createIdentifier","result","Result","LockRecordNotFoundError","LockRecordPersistenceError","entry","LockRecord","GetLockRecordRepository","RepositoryAbstraction","RecordLockingModel","RecordLockingConfig","GetEntryByIdUseCase"],"mappings":";;;;;;;;AAWA,MAAMA;IACF,YACYC,KAAmC,EACnCC,MAAqC,EACrCC,YAA2C,CACrD;aAHUF,KAAK,GAALA;aACAC,MAAM,GAANA;aACAC,YAAY,GAAZA;IACT;IAEH,MAAM,IAAIC,EAAU,EAA6D;QAC7E,MAAMC,WAAWC,2BAA2BF;QAC5C,MAAMG,UAAUC,iBAAiB;YAC7B,IAAIH;YACJ,SAAS;QACb;QAEA,MAAMI,SAAS,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAmB,IAAI,CAAC,KAAK,EAAEF;QAE7E,IAAIE,OAAO,MAAM,IAAI;YACjB,IAAIA,AAAsB,yBAAtBA,OAAO,KAAK,CAAC,IAAI,EACjB,OAAOC,OAAO,IAAI,CAAC,IAAIC;YAG3B,OAAOD,OAAO,IAAI,CAAC,IAAIE,2BAA2BH,OAAO,KAAK;QAClE;QAEA,MAAMI,QAAQJ,OAAO,KAAK;QAE1B,OAAOC,OAAO,EAAE,CAAC,IAAII,WAAWD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;IAC9D;AACJ;AAEO,MAAME,kDAA0BC,wBAAAA,oBAA0C,CAAC;IAC9E,gBAAgBhB;IAChB,cAAc;QAACiB;QAAoBC;QAAqBC;KAAoB;AAChF"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GetLockRecordRepository, GetLockRecordUseCase } from "./abstractions.js";
|
|
2
2
|
class GetLockRecordUseCaseImpl {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
constructor(repository){
|
|
4
|
+
this.repository = repository;
|
|
5
|
+
}
|
|
6
|
+
async execute(input) {
|
|
7
|
+
return await this.repository.get(input.id);
|
|
8
|
+
}
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const GetLockRecordUseCase_GetLockRecordUseCase = GetLockRecordUseCase.createImplementation({
|
|
11
|
+
implementation: GetLockRecordUseCaseImpl,
|
|
12
|
+
dependencies: [
|
|
13
|
+
GetLockRecordRepository
|
|
14
|
+
]
|
|
13
15
|
});
|
|
16
|
+
export { GetLockRecordUseCase_GetLockRecordUseCase as GetLockRecordUseCase };
|
|
14
17
|
|
|
15
18
|
//# sourceMappingURL=GetLockRecordUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/GetLockRecord/GetLockRecordUseCase.js","sources":["../../../src/features/GetLockRecord/GetLockRecordUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n GetLockRecordUseCase as UseCaseAbstraction,\n GetLockRecordRepository,\n GetLockRecordInput\n} from \"./abstractions.js\";\nimport type { ILockRecord } from \"~/domain/LockRecord.js\";\n\nclass GetLockRecordUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetLockRecordRepository.Interface) {}\n\n async execute(\n input: GetLockRecordInput\n ): Promise<Result<ILockRecord, UseCaseAbstraction.Error>> {\n return await this.repository.get(input.id);\n }\n}\n\nexport const GetLockRecordUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetLockRecordUseCaseImpl,\n dependencies: [GetLockRecordRepository]\n});\n"],"names":["GetLockRecordUseCaseImpl","repository","input","GetLockRecordUseCase","UseCaseAbstraction","GetLockRecordRepository"],"mappings":";AAQA,MAAMA;IACF,YAAoBC,UAA6C,CAAE;aAA/CA,UAAU,GAAVA;IAAgD;IAEpE,MAAM,QACFC,KAAyB,EAC6B;QACtD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAACA,MAAM,EAAE;IAC7C;AACJ;AAEO,MAAMC,4CAAuBC,qBAAAA,oBAAuC,CAAC;IACxE,gBAAgBJ;IAChB,cAAc;QAACK;KAAwB;AAC3C"}
|
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
3
|
-
|
|
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");
|
|
2
|
+
const GetLockRecordUseCase = createAbstraction("GetLockRecordUseCase");
|
|
3
|
+
const GetLockRecordRepository = createAbstraction("GetLockRecordRepository");
|
|
4
|
+
export { GetLockRecordRepository, GetLockRecordUseCase };
|
|
16
5
|
|
|
17
6
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/GetLockRecord/abstractions.js","sources":["../../../src/features/GetLockRecord/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"],"names":["GetLockRecordUseCase","createAbstraction","GetLockRecordRepository"],"mappings":";AA0BO,MAAMA,uBACTC,kBAAyC;AAqBtC,MAAMC,0BACTD,kBAA4C"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { GetLockRecordUseCase } from "./GetLockRecordUseCase.js";
|
|
3
3
|
import { GetLockRecordRepository } from "./GetLockRecordRepository.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
const GetLockRecordFeature = createFeature({
|
|
5
|
+
name: "GetLockRecord",
|
|
6
|
+
register (container) {
|
|
7
|
+
container.register(GetLockRecordUseCase);
|
|
8
|
+
container.register(GetLockRecordRepository).inSingletonScope();
|
|
9
|
+
}
|
|
10
10
|
});
|
|
11
|
+
export { GetLockRecordFeature };
|
|
11
12
|
|
|
12
13
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/GetLockRecord/feature.js","sources":["../../../src/features/GetLockRecord/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"],"names":["GetLockRecordFeature","createFeature","container","GetLockRecordUseCase","GetLockRecordRepository"],"mappings":";;;AAIO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE,yBAAyB,gBAAgB;IAChE;AACJ"}
|
|
@@ -1,39 +1,30 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { GetLockedEntryLockRecordUseCase
|
|
2
|
+
import { GetLockedEntryLockRecordUseCase } from "./abstractions.js";
|
|
3
3
|
import { GetLockRecordUseCase } from "../GetLockRecord/abstractions.js";
|
|
4
4
|
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
5
5
|
import { LockRecordNotFoundError } from "../../domain/errors.js";
|
|
6
6
|
class GetLockedEntryLockRecordUseCaseImpl {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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());
|
|
7
|
+
constructor(getLockRecord, identityContext){
|
|
8
|
+
this.getLockRecord = getLockRecord;
|
|
9
|
+
this.identityContext = identityContext;
|
|
18
10
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return Result.fail(new LockRecordNotFoundError());
|
|
11
|
+
async execute(input) {
|
|
12
|
+
const result = await this.getLockRecord.execute(input);
|
|
13
|
+
if (result.isFail()) return Result.fail(new LockRecordNotFoundError());
|
|
14
|
+
const record = result.value;
|
|
15
|
+
const identity = this.identityContext.getIdentity();
|
|
16
|
+
const lockedByCurrentUser = record.lockedBy.id === identity.id;
|
|
17
|
+
if (record.isExpired() || lockedByCurrentUser) return Result.fail(new LockRecordNotFoundError());
|
|
18
|
+
return Result.ok(record);
|
|
28
19
|
}
|
|
29
|
-
|
|
30
|
-
// Locked by another user, return the record
|
|
31
|
-
return Result.ok(record);
|
|
32
|
-
}
|
|
33
20
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
21
|
+
const GetLockedEntryLockRecordUseCase_GetLockedEntryLockRecordUseCase = GetLockedEntryLockRecordUseCase.createImplementation({
|
|
22
|
+
implementation: GetLockedEntryLockRecordUseCaseImpl,
|
|
23
|
+
dependencies: [
|
|
24
|
+
GetLockRecordUseCase,
|
|
25
|
+
IdentityContext
|
|
26
|
+
]
|
|
37
27
|
});
|
|
28
|
+
export { GetLockedEntryLockRecordUseCase_GetLockedEntryLockRecordUseCase as GetLockedEntryLockRecordUseCase };
|
|
38
29
|
|
|
39
30
|
//# sourceMappingURL=GetLockedEntryLockRecordUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/GetLockedEntryLockRecord/GetLockedEntryLockRecordUseCase.js","sources":["../../../src/features/GetLockedEntryLockRecord/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/security/IdentityContext/index.js\";\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"],"names":["GetLockedEntryLockRecordUseCaseImpl","getLockRecord","identityContext","input","result","Result","LockRecordNotFoundError","record","identity","lockedByCurrentUser","GetLockedEntryLockRecordUseCase","UseCaseAbstraction","GetLockRecordUseCase","IdentityContext"],"mappings":";;;;;AAUA,MAAMA;IACF,YACYC,aAA6C,EAC7CC,eAA0C,CACpD;aAFUD,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,QACFC,KAAoC,EACkB;QAEtD,MAAMC,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAACD;QAGhD,IAAIC,OAAO,MAAM,IACb,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAG3B,MAAMC,SAASH,OAAO,KAAK;QAC3B,MAAMI,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAKjD,MAAMC,sBAAsBF,OAAO,QAAQ,CAAC,EAAE,KAAKC,SAAS,EAAE;QAE9D,IAAID,OAAO,SAAS,MAAME,qBACtB,OAAOJ,OAAO,IAAI,CAAC,IAAIC;QAI3B,OAAOD,OAAO,EAAE,CAACE;IACrB;AACJ;AAEO,MAAMG,kEAAkCC,gCAAAA,oBAAuC,CAAC;IACnF,gBAAgBX;IAChB,cAAc;QAACY;QAAsBC;KAAgB;AACzD"}
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
3
|
-
|
|
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");
|
|
2
|
+
const GetLockedEntryLockRecordUseCase = createAbstraction("GetLockedEntryLockRecordUseCase");
|
|
3
|
+
export { GetLockedEntryLockRecordUseCase };
|
|
12
4
|
|
|
13
5
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/GetLockedEntryLockRecord/abstractions.js","sources":["../../../src/features/GetLockedEntryLockRecord/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"],"names":["GetLockedEntryLockRecordUseCase","createAbstraction"],"mappings":";AA4BO,MAAMA,kCAAkCC,kBAC3C"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { GetLockedEntryLockRecordUseCase } from "./GetLockedEntryLockRecordUseCase.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const GetLockedEntryLockRecordFeature = createFeature({
|
|
4
|
+
name: "GetLockedEntryLockRecord",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(GetLockedEntryLockRecordUseCase);
|
|
7
|
+
}
|
|
8
8
|
});
|
|
9
|
+
export { GetLockedEntryLockRecordFeature };
|
|
9
10
|
|
|
10
11
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/GetLockedEntryLockRecord/feature.js","sources":["../../../src/features/GetLockedEntryLockRecord/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"],"names":["GetLockedEntryLockRecordFeature","createFeature","container","GetLockedEntryLockRecordUseCase"],"mappings":";;AAGO,MAAMA,kCAAkCC,cAAc;IACzD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -1,39 +1,33 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { IsEntryLockedUseCase
|
|
2
|
+
import { IsEntryLockedUseCase } from "./abstractions.js";
|
|
3
3
|
import { GetLockRecordUseCase } from "../GetLockRecord/abstractions.js";
|
|
4
4
|
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
5
5
|
import { LockRecordNotFoundError } from "../../domain/errors.js";
|
|
6
6
|
class IsEntryLockedUseCaseImpl {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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);
|
|
7
|
+
constructor(getLockRecord, identityContext){
|
|
8
|
+
this.getLockRecord = getLockRecord;
|
|
9
|
+
this.identityContext = identityContext;
|
|
20
10
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
async execute(input) {
|
|
12
|
+
const result = await this.getLockRecord.execute(input);
|
|
13
|
+
if (result.isFail()) {
|
|
14
|
+
if (result.error instanceof LockRecordNotFoundError) return Result.ok(false);
|
|
15
|
+
return Result.fail(result.error);
|
|
16
|
+
}
|
|
17
|
+
const record = result.value;
|
|
18
|
+
if (record.isExpired()) return Result.ok(false);
|
|
19
|
+
const identity = this.identityContext.getIdentity();
|
|
20
|
+
const isLockedByOther = record.lockedBy.id !== identity.id;
|
|
21
|
+
return Result.ok(isLockedByOther);
|
|
26
22
|
}
|
|
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
23
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
24
|
+
const IsEntryLockedUseCase_IsEntryLockedUseCase = IsEntryLockedUseCase.createImplementation({
|
|
25
|
+
implementation: IsEntryLockedUseCaseImpl,
|
|
26
|
+
dependencies: [
|
|
27
|
+
GetLockRecordUseCase,
|
|
28
|
+
IdentityContext
|
|
29
|
+
]
|
|
37
30
|
});
|
|
31
|
+
export { IsEntryLockedUseCase_IsEntryLockedUseCase as IsEntryLockedUseCase };
|
|
38
32
|
|
|
39
33
|
//# sourceMappingURL=IsEntryLockedUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/IsEntryLocked/IsEntryLockedUseCase.js","sources":["../../../src/features/IsEntryLocked/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/security/IdentityContext/index.js\";\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"],"names":["IsEntryLockedUseCaseImpl","getLockRecord","identityContext","input","result","LockRecordNotFoundError","Result","record","identity","isLockedByOther","IsEntryLockedUseCase","UseCaseAbstraction","GetLockRecordUseCase","IdentityContext"],"mappings":";;;;;AAMA,MAAMA;IACF,YACYC,aAA6C,EAC7CC,eAA0C,CACpD;aAFUD,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,QAAQC,KAAyB,EAAsD;QACzF,MAAMC,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAACD;QAEhD,IAAIC,OAAO,MAAM,IAAI;YAEjB,IAAIA,OAAO,KAAK,YAAYC,yBACxB,OAAOC,OAAO,EAAE,CAAC;YAGrB,OAAOA,OAAO,IAAI,CAACF,OAAO,KAAK;QACnC;QAEA,MAAMG,SAASH,OAAO,KAAK;QAG3B,IAAIG,OAAO,SAAS,IAChB,OAAOD,OAAO,EAAE,CAAC;QAIrB,MAAME,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,kBAAkBF,OAAO,QAAQ,CAAC,EAAE,KAAKC,SAAS,EAAE;QAE1D,OAAOF,OAAO,EAAE,CAACG;IACrB;AACJ;AAEO,MAAMC,4CAAuBC,qBAAAA,oBAAuC,CAAC;IACxE,gBAAgBX;IAChB,cAAc;QAACY;QAAsBC;KAAgB;AACzD"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
3
|
-
|
|
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");
|
|
2
|
+
const IsEntryLockedUseCase = createAbstraction("IsEntryLockedUseCase");
|
|
3
|
+
export { IsEntryLockedUseCase };
|
|
11
4
|
|
|
12
5
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/IsEntryLocked/abstractions.js","sources":["../../../src/features/IsEntryLocked/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"],"names":["IsEntryLockedUseCase","createAbstraction"],"mappings":";AAyBO,MAAMA,uBACTC,kBAAyC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { IsEntryLockedUseCase } from "./IsEntryLockedUseCase.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const IsEntryLockedFeature = createFeature({
|
|
4
|
+
name: "IsEntryLocked",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(IsEntryLockedUseCase);
|
|
7
|
+
}
|
|
8
8
|
});
|
|
9
|
+
export { IsEntryLockedFeature };
|
|
9
10
|
|
|
10
11
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/IsEntryLocked/feature.js","sources":["../../../src/features/IsEntryLocked/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"],"names":["IsEntryLockedFeature","createFeature","container","IsEntryLockedUseCase"],"mappings":";;AAGO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -2,41 +2,41 @@ import { Result } from "@webiny/feature/api";
|
|
|
2
2
|
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
3
3
|
import { WebsocketService } from "@webiny/api-websockets/features/WebsocketService/index.js";
|
|
4
4
|
import { parseIdentifier } from "@webiny/utils";
|
|
5
|
-
import { KickOutCurrentUserUseCase
|
|
5
|
+
import { KickOutCurrentUserUseCase } from "./abstractions.js";
|
|
6
6
|
class KickOutCurrentUserUseCaseImpl {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
constructor(identityContext, websocketService){
|
|
8
|
+
this.identityContext = identityContext;
|
|
9
|
+
this.websocketService = websocketService;
|
|
10
|
+
}
|
|
11
|
+
async execute(record) {
|
|
12
|
+
if (!this.websocketService) return Result.ok();
|
|
13
|
+
const { lockedBy, id } = record;
|
|
14
|
+
const { id: entryId } = parseIdentifier(id);
|
|
15
|
+
const identity = this.identityContext.getIdentity();
|
|
16
|
+
await this.websocketService.send({
|
|
17
|
+
id: lockedBy.id
|
|
18
|
+
}, {
|
|
19
|
+
action: `recordLocking.entry.kickOut.${entryId}`,
|
|
20
|
+
data: {
|
|
21
|
+
record: record.toObject(),
|
|
22
|
+
user: identity
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return Result.ok();
|
|
14
26
|
}
|
|
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
27
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
const KickOutCurrentUserUseCase_KickOutCurrentUserUseCase = KickOutCurrentUserUseCase.createImplementation({
|
|
29
|
+
implementation: KickOutCurrentUserUseCaseImpl,
|
|
30
|
+
dependencies: [
|
|
31
|
+
IdentityContext,
|
|
32
|
+
[
|
|
33
|
+
WebsocketService,
|
|
34
|
+
{
|
|
35
|
+
optional: true
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
]
|
|
40
39
|
});
|
|
40
|
+
export { KickOutCurrentUserUseCase_KickOutCurrentUserUseCase as KickOutCurrentUserUseCase };
|
|
41
41
|
|
|
42
42
|
//# sourceMappingURL=KickOutCurrentUserUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/KickOutCurrentUser/KickOutCurrentUserUseCase.js","sources":["../../../src/features/KickOutCurrentUser/KickOutCurrentUserUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\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"],"names":["KickOutCurrentUserUseCaseImpl","identityContext","websocketService","record","Result","lockedBy","id","entryId","parseIdentifier","identity","KickOutCurrentUserUseCase","UseCaseAbstraction","IdentityContext","WebsocketService"],"mappings":";;;;;AAOA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,gBAA6C,CACvD;aAFUD,eAAe,GAAfA;aACAC,gBAAgB,GAAhBA;IACT;IAEH,MAAM,QAAQC,MAAmB,EAAmD;QAChF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EACtB,OAAOC,OAAO,EAAE;QAGpB,MAAM,EAAEC,QAAQ,EAAEC,EAAE,EAAE,GAAGH;QAEzB,MAAM,EAAE,IAAII,OAAO,EAAE,GAAGC,gBAAgBF;QACxC,MAAMG,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC5B;YAAE,IAAIJ,SAAS,EAAE;QAAC,GAClB;YACI,QAAQ,CAAC,4BAA4B,EAAEE,SAAS;YAChD,MAAM;gBACF,QAAQJ,OAAO,QAAQ;gBACvB,MAAMM;YACV;QACJ;QAGJ,OAAOL,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMM,sDAA4BC,0BAAAA,oBAAuC,CAAC;IAC7E,gBAAgBX;IAChB,cAAc;QAACY;QAAiB;YAACC;YAAkB;gBAAE,UAAU;YAAK;SAAE;KAAC;AAC3E"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
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");
|
|
2
|
+
const KickOutCurrentUserUseCase = createAbstraction("KickOutCurrentUserUseCase");
|
|
3
|
+
export { KickOutCurrentUserUseCase };
|
|
8
4
|
|
|
9
5
|
//# sourceMappingURL=abstractions.js.map
|