@webiny/api-website-builder 0.0.0-unstable.ac6ebf63c6 → 0.0.0-unstable.c27f4d8a31
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/page/EntryToPageMapper.js +2 -1
- package/domain/page/EntryToPageMapper.js.map +1 -1
- package/domain/page/abstractions.d.ts +3 -2
- package/domain/page/abstractions.js.map +1 -1
- package/domain/permissions.d.ts +125 -0
- package/domain/permissions.js +33 -0
- package/domain/permissions.js.map +1 -0
- package/exports/api/website-builder/page.d.ts +8 -8
- package/exports/api/website-builder/page.js +8 -8
- package/exports/api/website-builder/page.js.map +1 -1
- package/exports/api/website-builder/redirect.d.ts +4 -4
- package/exports/api/website-builder/redirect.js +4 -4
- package/exports/api/website-builder/redirect.js.map +1 -1
- package/features/installer/ApiKeyInstaller.js +4 -1
- package/features/installer/ApiKeyInstaller.js.map +1 -1
- package/features/pages/CreatePage/CreatePageUseCase.d.ts +3 -1
- package/features/pages/CreatePage/CreatePageUseCase.js +10 -2
- package/features/pages/CreatePage/CreatePageUseCase.js.map +1 -1
- package/features/pages/CreatePage/abstractions.d.ts +6 -5
- package/features/pages/CreatePage/abstractions.js +2 -2
- package/features/pages/CreatePage/abstractions.js.map +1 -1
- package/features/pages/CreatePage/events.js +3 -3
- package/features/pages/CreatePage/events.js.map +1 -1
- package/features/pages/CreatePage/index.d.ts +1 -1
- package/features/pages/CreatePage/index.js +1 -1
- package/features/pages/CreatePage/index.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.d.ts +5 -1
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js +18 -2
- package/features/pages/CreatePageRevisionFrom/CreatePageRevisionFromUseCase.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/abstractions.d.ts +6 -5
- package/features/pages/CreatePageRevisionFrom/abstractions.js +2 -2
- package/features/pages/CreatePageRevisionFrom/abstractions.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/events.js +3 -3
- package/features/pages/CreatePageRevisionFrom/events.js.map +1 -1
- package/features/pages/CreatePageRevisionFrom/index.d.ts +1 -1
- package/features/pages/CreatePageRevisionFrom/index.js +1 -1
- package/features/pages/CreatePageRevisionFrom/index.js.map +1 -1
- package/features/pages/DeletePage/DeletePageUseCase.d.ts +3 -1
- package/features/pages/DeletePage/DeletePageUseCase.js +10 -3
- package/features/pages/DeletePage/DeletePageUseCase.js.map +1 -1
- package/features/pages/DeletePage/abstractions.d.ts +6 -5
- package/features/pages/DeletePage/abstractions.js +2 -2
- package/features/pages/DeletePage/abstractions.js.map +1 -1
- package/features/pages/DeletePage/events.js +3 -3
- package/features/pages/DeletePage/events.js.map +1 -1
- package/features/pages/DeletePage/index.d.ts +1 -1
- package/features/pages/DeletePage/index.js +1 -1
- package/features/pages/DeletePage/index.js.map +1 -1
- package/features/pages/DuplicatePage/DuplicatePageUseCase.d.ts +3 -1
- package/features/pages/DuplicatePage/DuplicatePageUseCase.js +10 -2
- package/features/pages/DuplicatePage/DuplicatePageUseCase.js.map +1 -1
- package/features/pages/DuplicatePage/abstractions.d.ts +6 -5
- package/features/pages/DuplicatePage/abstractions.js +2 -2
- package/features/pages/DuplicatePage/abstractions.js.map +1 -1
- package/features/pages/DuplicatePage/events.js +3 -3
- package/features/pages/DuplicatePage/events.js.map +1 -1
- package/features/pages/DuplicatePage/index.d.ts +1 -1
- package/features/pages/DuplicatePage/index.js +1 -1
- package/features/pages/DuplicatePage/index.js.map +1 -1
- package/features/pages/GetPageById/GetPageByIdUseCase.d.ts +3 -1
- package/features/pages/GetPageById/GetPageByIdUseCase.js +19 -3
- package/features/pages/GetPageById/GetPageByIdUseCase.js.map +1 -1
- package/features/pages/GetPageById/abstractions.d.ts +2 -1
- package/features/pages/GetPageById/abstractions.js.map +1 -1
- package/features/pages/GetPageByPath/GetPageByPathUseCase.d.ts +3 -1
- package/features/pages/GetPageByPath/GetPageByPathUseCase.js +19 -3
- package/features/pages/GetPageByPath/GetPageByPathUseCase.js.map +1 -1
- package/features/pages/GetPageByPath/abstractions.d.ts +2 -1
- package/features/pages/GetPageByPath/abstractions.js.map +1 -1
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.d.ts +3 -1
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js +22 -3
- package/features/pages/GetPageRevisions/GetPageRevisionsUseCase.js.map +1 -1
- package/features/pages/GetPageRevisions/abstractions.d.ts +2 -1
- package/features/pages/GetPageRevisions/abstractions.js.map +1 -1
- package/features/pages/ListPages/ListPagesRepository.d.ts +5 -1
- package/features/pages/ListPages/ListPagesRepository.js +14 -4
- package/features/pages/ListPages/ListPagesRepository.js.map +1 -1
- package/features/pages/ListPages/ListPagesUseCase.d.ts +5 -1
- package/features/pages/ListPages/ListPagesUseCase.js +24 -4
- package/features/pages/ListPages/ListPagesUseCase.js.map +1 -1
- package/features/pages/ListPages/abstractions.d.ts +2 -1
- package/features/pages/ListPages/abstractions.js.map +1 -1
- package/features/pages/MovePage/MovePageUseCase.d.ts +3 -1
- package/features/pages/MovePage/MovePageUseCase.js +14 -2
- package/features/pages/MovePage/MovePageUseCase.js.map +1 -1
- package/features/pages/MovePage/abstractions.d.ts +6 -5
- package/features/pages/MovePage/abstractions.js +2 -2
- package/features/pages/MovePage/abstractions.js.map +1 -1
- package/features/pages/MovePage/events.js +3 -3
- package/features/pages/MovePage/events.js.map +1 -1
- package/features/pages/MovePage/index.d.ts +1 -1
- package/features/pages/MovePage/index.js +1 -1
- package/features/pages/MovePage/index.js.map +1 -1
- package/features/pages/PublishPage/PublishPageUseCase.d.ts +3 -1
- package/features/pages/PublishPage/PublishPageUseCase.js +14 -2
- package/features/pages/PublishPage/PublishPageUseCase.js.map +1 -1
- package/features/pages/PublishPage/abstractions.d.ts +6 -5
- package/features/pages/PublishPage/abstractions.js +2 -2
- package/features/pages/PublishPage/abstractions.js.map +1 -1
- package/features/pages/PublishPage/events.js +3 -3
- package/features/pages/PublishPage/events.js.map +1 -1
- package/features/pages/PublishPage/index.d.ts +1 -1
- package/features/pages/PublishPage/index.js +1 -1
- package/features/pages/PublishPage/index.js.map +1 -1
- package/features/pages/UnpublishPage/UnpublishPageUseCase.d.ts +3 -1
- package/features/pages/UnpublishPage/UnpublishPageUseCase.js +14 -2
- package/features/pages/UnpublishPage/UnpublishPageUseCase.js.map +1 -1
- package/features/pages/UnpublishPage/abstractions.d.ts +6 -5
- package/features/pages/UnpublishPage/abstractions.js +2 -2
- package/features/pages/UnpublishPage/abstractions.js.map +1 -1
- package/features/pages/UnpublishPage/events.js +3 -3
- package/features/pages/UnpublishPage/events.js.map +1 -1
- package/features/pages/UnpublishPage/index.d.ts +1 -1
- package/features/pages/UnpublishPage/index.js +1 -1
- package/features/pages/UnpublishPage/index.js.map +1 -1
- package/features/pages/UpdatePage/UpdatePageUseCase.d.ts +3 -1
- package/features/pages/UpdatePage/UpdatePageUseCase.js +14 -2
- package/features/pages/UpdatePage/UpdatePageUseCase.js.map +1 -1
- package/features/pages/UpdatePage/abstractions.d.ts +9 -9
- package/features/pages/UpdatePage/abstractions.js +2 -2
- package/features/pages/UpdatePage/abstractions.js.map +1 -1
- package/features/pages/UpdatePage/events.js +3 -3
- package/features/pages/UpdatePage/events.js.map +1 -1
- package/features/pages/UpdatePage/index.d.ts +1 -1
- package/features/pages/UpdatePage/index.js +1 -1
- package/features/pages/UpdatePage/index.js.map +1 -1
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.d.ts +3 -1
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.js +10 -2
- package/features/redirects/CreateRedirect/CreateRedirectUseCase.js.map +1 -1
- package/features/redirects/CreateRedirect/abstractions.d.ts +6 -5
- package/features/redirects/CreateRedirect/abstractions.js +2 -2
- package/features/redirects/CreateRedirect/abstractions.js.map +1 -1
- package/features/redirects/CreateRedirect/events.js +3 -3
- package/features/redirects/CreateRedirect/events.js.map +1 -1
- package/features/redirects/CreateRedirect/index.d.ts +1 -1
- package/features/redirects/CreateRedirect/index.js +1 -1
- package/features/redirects/CreateRedirect/index.js.map +1 -1
- package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.d.ts +3 -1
- package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js +10 -3
- package/features/redirects/DeleteRedirect/DeleteRedirectUseCase.js.map +1 -1
- package/features/redirects/DeleteRedirect/abstractions.d.ts +6 -5
- package/features/redirects/DeleteRedirect/abstractions.js +2 -2
- package/features/redirects/DeleteRedirect/abstractions.js.map +1 -1
- package/features/redirects/DeleteRedirect/events.js +3 -3
- package/features/redirects/DeleteRedirect/events.js.map +1 -1
- package/features/redirects/DeleteRedirect/index.d.ts +1 -1
- package/features/redirects/DeleteRedirect/index.js +1 -1
- package/features/redirects/DeleteRedirect/index.js.map +1 -1
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.d.ts +3 -1
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js +10 -3
- package/features/redirects/GetActiveRedirects/GetActiveRedirectsUseCase.js.map +1 -1
- package/features/redirects/GetActiveRedirects/abstractions.d.ts +2 -1
- package/features/redirects/GetActiveRedirects/abstractions.js.map +1 -1
- package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.d.ts +3 -1
- package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js +19 -4
- package/features/redirects/GetRedirectById/GetRedirectByIdUseCase.js.map +1 -1
- package/features/redirects/GetRedirectById/abstractions.d.ts +2 -1
- package/features/redirects/GetRedirectById/abstractions.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.d.ts +3 -3
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js +2 -2
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterCreateHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.d.ts +3 -3
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js +2 -2
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterDeleteHandler.js.map +1 -1
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.d.ts +3 -3
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js +2 -2
- package/features/redirects/InvalidateRedirectsCache/RedirectAfterUpdateHandler.js.map +1 -1
- package/features/redirects/ListRedirects/ListRedirectsUseCase.d.ts +5 -1
- package/features/redirects/ListRedirects/ListRedirectsUseCase.js +23 -4
- package/features/redirects/ListRedirects/ListRedirectsUseCase.js.map +1 -1
- package/features/redirects/ListRedirects/abstractions.d.ts +3 -1
- package/features/redirects/ListRedirects/abstractions.js.map +1 -1
- package/features/redirects/MoveRedirect/MoveRedirectUseCase.d.ts +3 -1
- package/features/redirects/MoveRedirect/MoveRedirectUseCase.js +14 -2
- package/features/redirects/MoveRedirect/MoveRedirectUseCase.js.map +1 -1
- package/features/redirects/MoveRedirect/abstractions.d.ts +6 -5
- package/features/redirects/MoveRedirect/abstractions.js +2 -2
- package/features/redirects/MoveRedirect/abstractions.js.map +1 -1
- package/features/redirects/MoveRedirect/events.js +3 -3
- package/features/redirects/MoveRedirect/events.js.map +1 -1
- package/features/redirects/MoveRedirect/index.d.ts +1 -1
- package/features/redirects/MoveRedirect/index.js +1 -1
- package/features/redirects/MoveRedirect/index.js.map +1 -1
- package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.d.ts +3 -1
- package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js +14 -2
- package/features/redirects/UpdateRedirect/UpdateRedirectUseCase.js.map +1 -1
- package/features/redirects/UpdateRedirect/abstractions.d.ts +6 -5
- package/features/redirects/UpdateRedirect/abstractions.js +2 -2
- package/features/redirects/UpdateRedirect/abstractions.js.map +1 -1
- package/features/redirects/UpdateRedirect/events.js +3 -3
- package/features/redirects/UpdateRedirect/events.js.map +1 -1
- package/features/redirects/UpdateRedirect/index.d.ts +1 -1
- package/features/redirects/UpdateRedirect/index.js +1 -1
- package/features/redirects/UpdateRedirect/index.js.map +1 -1
- package/features/tenantManager/TenantModelExtension.js +5 -5
- package/features/tenantManager/TenantModelExtension.js.map +1 -1
- package/graphql/pages/pages.typeDefs.d.ts +1 -1
- package/graphql/pages/pages.typeDefs.js +6 -0
- package/graphql/pages/pages.typeDefs.js.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/package.json +19 -20
- package/features/pages/PagePermissions/feature.d.ts +0 -1
- package/features/pages/PagePermissions/feature.js +0 -53
- package/features/pages/PagePermissions/feature.js.map +0 -1
- package/features/redirects/RedirectPermissions/feature.d.ts +0 -1
- package/features/redirects/RedirectPermissions/feature.js +0 -45
- package/features/redirects/RedirectPermissions/feature.js.map +0 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from "./abstractions.js";
|
|
2
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
2
3
|
declare class GetPageByIdUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
4
|
+
private permissions;
|
|
3
5
|
private repository;
|
|
4
|
-
constructor(repository: GetPageByIdRepository.Interface);
|
|
6
|
+
constructor(permissions: WbPermissions.Interface, repository: GetPageByIdRepository.Interface);
|
|
5
7
|
execute(id: string): UseCaseAbstraction.Return;
|
|
6
8
|
}
|
|
7
9
|
export declare const GetPageByIdUseCase: typeof GetPageByIdUseCaseImpl & {
|
|
@@ -1,15 +1,31 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
1
2
|
import { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from "./abstractions.js";
|
|
3
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
|
+
import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
2
5
|
class GetPageByIdUseCaseImpl {
|
|
3
|
-
constructor(repository) {
|
|
6
|
+
constructor(permissions, repository) {
|
|
7
|
+
this.permissions = permissions;
|
|
4
8
|
this.repository = repository;
|
|
5
9
|
}
|
|
6
10
|
async execute(id) {
|
|
7
|
-
|
|
11
|
+
const hasPermission = await this.permissions.canRead("page");
|
|
12
|
+
if (!hasPermission) {
|
|
13
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
14
|
+
}
|
|
15
|
+
const result = await this.repository.execute(id);
|
|
16
|
+
if (result.isFail()) {
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
const canAccess = await this.permissions.canAccess("page", result.value);
|
|
20
|
+
if (!canAccess) {
|
|
21
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
8
24
|
}
|
|
9
25
|
}
|
|
10
26
|
export const GetPageByIdUseCase = UseCaseAbstraction.createImplementation({
|
|
11
27
|
implementation: GetPageByIdUseCaseImpl,
|
|
12
|
-
dependencies: [GetPageByIdRepository]
|
|
28
|
+
dependencies: [WbPermissions.Abstraction, GetPageByIdRepository]
|
|
13
29
|
});
|
|
14
30
|
|
|
15
31
|
//# sourceMappingURL=GetPageByIdUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GetPageByIdUseCase","UseCaseAbstraction","GetPageByIdRepository","GetPageByIdUseCaseImpl","constructor","repository","execute","id","createImplementation","implementation","dependencies"],"sources":["GetPageByIdUseCase.ts"],"sourcesContent":["import { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from \"./abstractions.js\";\n\nclass GetPageByIdUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetPageByIdRepository.Interface) {}\n\n async execute(id: string): UseCaseAbstraction.Return {\n return this.repository.execute(id);\n }\n}\n\nexport const GetPageByIdUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByIdUseCaseImpl,\n dependencies: [GetPageByIdRepository]\n});\n"],"mappings":"AAAA,SAASA,kBAAkB,IAAIC,kBAAkB,EAAEC,qBAAqB;
|
|
1
|
+
{"version":3,"names":["Result","GetPageByIdUseCase","UseCaseAbstraction","GetPageByIdRepository","WbPermissions","PageNotAuthorizedError","GetPageByIdUseCaseImpl","constructor","permissions","repository","execute","id","hasPermission","canRead","fail","result","isFail","canAccess","value","createImplementation","implementation","dependencies","Abstraction"],"sources":["GetPageByIdUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { GetPageByIdUseCase as UseCaseAbstraction, GetPageByIdRepository } from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass GetPageByIdUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private repository: GetPageByIdRepository.Interface\n ) {}\n\n async execute(id: string): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const result = await this.repository.execute(id);\n\n if (result.isFail()) {\n return result;\n }\n\n const canAccess = await this.permissions.canAccess(\"page\", result.value);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n return result;\n }\n}\n\nexport const GetPageByIdUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByIdUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, GetPageByIdRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,kBAAkB,IAAIC,kBAAkB,EAAEC,qBAAqB;AACxE,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CACCC,WAAoC,EACpCC,UAA2C,EACrD;IAAA,KAFUD,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,UAA2C,GAA3CA,UAA2C;EACpD;EAEH,MAAMC,OAAOA,CAACC,EAAU,EAA6B;IACjD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOZ,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMU,MAAM,GAAG,MAAM,IAAI,CAACN,UAAU,CAACC,OAAO,CAACC,EAAE,CAAC;IAEhD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,SAAS,GAAG,MAAM,IAAI,CAACT,WAAW,CAACS,SAAS,CAAC,MAAM,EAAEF,MAAM,CAACG,KAAK,CAAC;IACxE,IAAI,CAACD,SAAS,EAAE;MACZ,OAAOjB,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,OAAOU,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMd,kBAAkB,GAAGC,kBAAkB,CAACiB,oBAAoB,CAAC;EACtEC,cAAc,EAAEd,sBAAsB;EACtCe,YAAY,EAAE,CAACjB,aAAa,CAACkB,WAAW,EAAEnB,qBAAqB;AACnE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Result } from "@webiny/feature/api";
|
|
2
2
|
import type { WbPage } from "../../../domain/page/abstractions.js";
|
|
3
|
-
import type { PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
|
|
3
|
+
import type { PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
4
4
|
/**
|
|
5
5
|
* GetPageById repository interface
|
|
6
6
|
*/
|
|
@@ -25,6 +25,7 @@ export interface IGetPageByIdUseCase {
|
|
|
25
25
|
execute(id: string): Promise<Result<WbPage, UseCaseError>>;
|
|
26
26
|
}
|
|
27
27
|
export interface IGetPageByIdUseCaseErrors {
|
|
28
|
+
notAuthorized: PageNotAuthorizedError;
|
|
28
29
|
notFound: PageNotFoundError;
|
|
29
30
|
persistence: PagePersistenceError;
|
|
30
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","GetPageByIdRepository","GetPageByIdUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type {
|
|
1
|
+
{"version":3,"names":["createAbstraction","GetPageByIdRepository","GetPageByIdUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type {\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n/**\n * GetPageById repository interface\n */\nexport interface IGetPageByIdRepository {\n execute(id: string): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IGetPageByIdRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageByIdRepositoryErrors[keyof IGetPageByIdRepositoryErrors];\n\nexport const GetPageByIdRepository = createAbstraction<IGetPageByIdRepository>(\n \"Wb/GetPageByIdRepository\"\n);\n\nexport namespace GetPageByIdRepository {\n export type Interface = IGetPageByIdRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n}\n\n/**\n * GetPageById use case interface\n */\nexport interface IGetPageByIdUseCase {\n execute(id: string): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IGetPageByIdUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageByIdUseCaseErrors[keyof IGetPageByIdUseCaseErrors];\n\nexport const GetPageByIdUseCase = createAbstraction<IGetPageByIdUseCase>(\"Wb/GetPageByIdUseCase\");\n\nexport namespace GetPageByIdUseCase {\n export type Interface = IGetPageByIdUseCase;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AASvD;AACA;AACA;;AAYA,OAAO,MAAMC,qBAAqB,GAAGD,iBAAiB,CAClD,0BACJ,CAAC;;AAQD;AACA;AACA;;AAaA,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,uBAAuB,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { GetPageByPathUseCase as UseCaseAbstraction, GetPageByPathRepository } from "./abstractions.js";
|
|
2
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
2
3
|
declare class GetPageByPathUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
4
|
+
private permissions;
|
|
3
5
|
private repository;
|
|
4
|
-
constructor(repository: GetPageByPathRepository.Interface);
|
|
6
|
+
constructor(permissions: WbPermissions.Interface, repository: GetPageByPathRepository.Interface);
|
|
5
7
|
execute(path: string): UseCaseAbstraction.Return;
|
|
6
8
|
}
|
|
7
9
|
export declare const GetPageByPathUseCase: typeof GetPageByPathUseCaseImpl & {
|
|
@@ -1,15 +1,31 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
1
2
|
import { GetPageByPathUseCase as UseCaseAbstraction, GetPageByPathRepository } from "./abstractions.js";
|
|
3
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
|
+
import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
2
5
|
class GetPageByPathUseCaseImpl {
|
|
3
|
-
constructor(repository) {
|
|
6
|
+
constructor(permissions, repository) {
|
|
7
|
+
this.permissions = permissions;
|
|
4
8
|
this.repository = repository;
|
|
5
9
|
}
|
|
6
10
|
async execute(path) {
|
|
7
|
-
|
|
11
|
+
const hasPermission = await this.permissions.canRead("page");
|
|
12
|
+
if (!hasPermission) {
|
|
13
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
14
|
+
}
|
|
15
|
+
const result = await this.repository.execute(path);
|
|
16
|
+
if (result.isFail()) {
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
const canAccess = await this.permissions.canAccess("page", result.value);
|
|
20
|
+
if (!canAccess) {
|
|
21
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
8
24
|
}
|
|
9
25
|
}
|
|
10
26
|
export const GetPageByPathUseCase = UseCaseAbstraction.createImplementation({
|
|
11
27
|
implementation: GetPageByPathUseCaseImpl,
|
|
12
|
-
dependencies: [GetPageByPathRepository]
|
|
28
|
+
dependencies: [WbPermissions.Abstraction, GetPageByPathRepository]
|
|
13
29
|
});
|
|
14
30
|
|
|
15
31
|
//# sourceMappingURL=GetPageByPathUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GetPageByPathUseCase","UseCaseAbstraction","GetPageByPathRepository","GetPageByPathUseCaseImpl","constructor","repository","execute","path","createImplementation","implementation","dependencies"],"sources":["GetPageByPathUseCase.ts"],"sourcesContent":["import {\n GetPageByPathUseCase as UseCaseAbstraction,\n GetPageByPathRepository\n} from \"./abstractions.js\";\n\nclass GetPageByPathUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetPageByPathRepository.Interface) {}\n\n async execute(path: string): UseCaseAbstraction.Return {\n return this.repository.execute(path);\n }\n}\n\nexport const GetPageByPathUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByPathUseCaseImpl,\n dependencies: [GetPageByPathRepository]\n});\n"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"names":["Result","GetPageByPathUseCase","UseCaseAbstraction","GetPageByPathRepository","WbPermissions","PageNotAuthorizedError","GetPageByPathUseCaseImpl","constructor","permissions","repository","execute","path","hasPermission","canRead","fail","result","isFail","canAccess","value","createImplementation","implementation","dependencies","Abstraction"],"sources":["GetPageByPathUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n GetPageByPathUseCase as UseCaseAbstraction,\n GetPageByPathRepository\n} from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass GetPageByPathUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private repository: GetPageByPathRepository.Interface\n ) {}\n\n async execute(path: string): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const result = await this.repository.execute(path);\n\n if (result.isFail()) {\n return result;\n }\n\n const canAccess = await this.permissions.canAccess(\"page\", result.value);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n return result;\n }\n}\n\nexport const GetPageByPathUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageByPathUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, GetPageByPathRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAE3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CACCC,WAAoC,EACpCC,UAA6C,EACvD;IAAA,KAFUD,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,UAA6C,GAA7CA,UAA6C;EACtD;EAEH,MAAMC,OAAOA,CAACC,IAAY,EAA6B;IACnD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOZ,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMU,MAAM,GAAG,MAAM,IAAI,CAACN,UAAU,CAACC,OAAO,CAACC,IAAI,CAAC;IAElD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,SAAS,GAAG,MAAM,IAAI,CAACT,WAAW,CAACS,SAAS,CAAC,MAAM,EAAEF,MAAM,CAACG,KAAK,CAAC;IACxE,IAAI,CAACD,SAAS,EAAE;MACZ,OAAOjB,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,OAAOU,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMd,oBAAoB,GAAGC,kBAAkB,CAACiB,oBAAoB,CAAC;EACxEC,cAAc,EAAEd,wBAAwB;EACxCe,YAAY,EAAE,CAACjB,aAAa,CAACkB,WAAW,EAAEnB,uBAAuB;AACrE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Result } from "@webiny/feature/api";
|
|
2
2
|
import type { WbPage } from "../../../domain/page/abstractions.js";
|
|
3
|
-
import type { PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
|
|
3
|
+
import type { PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
4
4
|
/**
|
|
5
5
|
* GetPageByPath repository interface
|
|
6
6
|
*/
|
|
@@ -25,6 +25,7 @@ export interface IGetPageByPathUseCase {
|
|
|
25
25
|
execute(path: string): Promise<Result<WbPage, UseCaseError>>;
|
|
26
26
|
}
|
|
27
27
|
export interface IGetPageByPathUseCaseErrors {
|
|
28
|
+
notAuthorized: PageNotAuthorizedError;
|
|
28
29
|
notFound: PageNotFoundError;
|
|
29
30
|
persistence: PagePersistenceError;
|
|
30
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","GetPageByPathRepository","GetPageByPathUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type {
|
|
1
|
+
{"version":3,"names":["createAbstraction","GetPageByPathRepository","GetPageByPathUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type {\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n/**\n * GetPageByPath repository interface\n */\nexport interface IGetPageByPathRepository {\n execute(path: string): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IGetPageByPathRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageByPathRepositoryErrors[keyof IGetPageByPathRepositoryErrors];\n\nexport const GetPageByPathRepository = createAbstraction<IGetPageByPathRepository>(\n \"Wb/GetPageByPathRepository\"\n);\n\nexport namespace GetPageByPathRepository {\n export type Interface = IGetPageByPathRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n}\n\n/**\n * GetPageByPath use case interface\n */\nexport interface IGetPageByPathUseCase {\n execute(path: string): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IGetPageByPathUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageByPathUseCaseErrors[keyof IGetPageByPathUseCaseErrors];\n\nexport const GetPageByPathUseCase =\n createAbstraction<IGetPageByPathUseCase>(\"Wb/GetPageByPathUseCase\");\n\nexport namespace GetPageByPathUseCase {\n export type Interface = IGetPageByPathUseCase;\n export type Error = UseCaseError;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AASvD;AACA;AACA;;AAYA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AAQD;AACA;AACA;;AAaA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { GetPageRevisionsUseCase as UseCaseAbstraction, GetPageRevisionsRepository } from "./abstractions.js";
|
|
2
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
2
3
|
declare class GetPageRevisionsUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
4
|
+
private permissions;
|
|
3
5
|
private repository;
|
|
4
|
-
constructor(repository: GetPageRevisionsRepository.Interface);
|
|
6
|
+
constructor(permissions: WbPermissions.Interface, repository: GetPageRevisionsRepository.Interface);
|
|
5
7
|
execute(entryId: string): UseCaseAbstraction.Return;
|
|
6
8
|
}
|
|
7
9
|
export declare const GetPageRevisionsUseCase: typeof GetPageRevisionsUseCaseImpl & {
|
|
@@ -1,15 +1,34 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
1
2
|
import { GetPageRevisionsUseCase as UseCaseAbstraction, GetPageRevisionsRepository } from "./abstractions.js";
|
|
3
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
|
+
import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
2
5
|
class GetPageRevisionsUseCaseImpl {
|
|
3
|
-
constructor(repository) {
|
|
6
|
+
constructor(permissions, repository) {
|
|
7
|
+
this.permissions = permissions;
|
|
4
8
|
this.repository = repository;
|
|
5
9
|
}
|
|
6
10
|
async execute(entryId) {
|
|
7
|
-
|
|
11
|
+
const hasPermission = await this.permissions.canRead("page");
|
|
12
|
+
if (!hasPermission) {
|
|
13
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
14
|
+
}
|
|
15
|
+
const result = await this.repository.execute(entryId);
|
|
16
|
+
if (result.isFail()) {
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
const pages = result.value;
|
|
20
|
+
if (pages.length > 0) {
|
|
21
|
+
const canAccess = await this.permissions.canAccess("page", pages[0]);
|
|
22
|
+
if (!canAccess) {
|
|
23
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
8
27
|
}
|
|
9
28
|
}
|
|
10
29
|
export const GetPageRevisionsUseCase = UseCaseAbstraction.createImplementation({
|
|
11
30
|
implementation: GetPageRevisionsUseCaseImpl,
|
|
12
|
-
dependencies: [GetPageRevisionsRepository]
|
|
31
|
+
dependencies: [WbPermissions.Abstraction, GetPageRevisionsRepository]
|
|
13
32
|
});
|
|
14
33
|
|
|
15
34
|
//# sourceMappingURL=GetPageRevisionsUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GetPageRevisionsUseCase","UseCaseAbstraction","GetPageRevisionsRepository","GetPageRevisionsUseCaseImpl","constructor","repository","execute","entryId","createImplementation","implementation","dependencies"],"sources":["GetPageRevisionsUseCase.ts"],"sourcesContent":["import {\n GetPageRevisionsUseCase as UseCaseAbstraction,\n GetPageRevisionsRepository\n} from \"./abstractions.js\";\n\nclass GetPageRevisionsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: GetPageRevisionsRepository.Interface) {}\n\n async execute(entryId: string): UseCaseAbstraction.Return {\n return this.repository.execute(entryId);\n }\n}\n\nexport const GetPageRevisionsUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageRevisionsUseCaseImpl,\n dependencies: [GetPageRevisionsRepository]\n});\n"],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"names":["Result","GetPageRevisionsUseCase","UseCaseAbstraction","GetPageRevisionsRepository","WbPermissions","PageNotAuthorizedError","GetPageRevisionsUseCaseImpl","constructor","permissions","repository","execute","entryId","hasPermission","canRead","fail","result","isFail","pages","value","length","canAccess","createImplementation","implementation","dependencies","Abstraction"],"sources":["GetPageRevisionsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n GetPageRevisionsUseCase as UseCaseAbstraction,\n GetPageRevisionsRepository\n} from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass GetPageRevisionsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private repository: GetPageRevisionsRepository.Interface\n ) {}\n\n async execute(entryId: string): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const result = await this.repository.execute(entryId);\n\n if (result.isFail()) {\n return result;\n }\n\n const pages = result.value;\n if (pages.length > 0) {\n const canAccess = await this.permissions.canAccess(\"page\", pages[0]);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n }\n\n return result;\n }\n}\n\nexport const GetPageRevisionsUseCase = UseCaseAbstraction.createImplementation({\n implementation: GetPageRevisionsUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, GetPageRevisionsRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,uBAAuB,IAAIC,kBAAkB,EAC7CC,0BAA0B;AAE9B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,2BAA2B,CAAyC;EACtEC,WAAWA,CACCC,WAAoC,EACpCC,UAAgD,EAC1D;IAAA,KAFUD,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,UAAgD,GAAhDA,UAAgD;EACzD;EAEH,MAAMC,OAAOA,CAACC,OAAe,EAA6B;IACtD,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACJ,WAAW,CAACK,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOZ,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMU,MAAM,GAAG,MAAM,IAAI,CAACN,UAAU,CAACC,OAAO,CAACC,OAAO,CAAC;IAErD,IAAII,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;IAEA,MAAME,KAAK,GAAGF,MAAM,CAACG,KAAK;IAC1B,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;MAClB,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACZ,WAAW,CAACY,SAAS,CAAC,MAAM,EAAEH,KAAK,CAAC,CAAC,CAAC,CAAC;MACpE,IAAI,CAACG,SAAS,EAAE;QACZ,OAAOpB,MAAM,CAACc,IAAI,CAAC,IAAIT,sBAAsB,CAAC,CAAC,CAAC;MACpD;IACJ;IAEA,OAAOU,MAAM;EACjB;AACJ;AAEA,OAAO,MAAMd,uBAAuB,GAAGC,kBAAkB,CAACmB,oBAAoB,CAAC;EAC3EC,cAAc,EAAEhB,2BAA2B;EAC3CiB,YAAY,EAAE,CAACnB,aAAa,CAACoB,WAAW,EAAErB,0BAA0B;AACxE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Result } from "@webiny/feature/api";
|
|
2
2
|
import type { WbPage } from "../../../domain/page/abstractions.js";
|
|
3
|
-
import type { PagePersistenceError } from "../../../domain/page/errors.js";
|
|
3
|
+
import type { PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
4
4
|
/**
|
|
5
5
|
* GetPageRevisions repository interface
|
|
6
6
|
*/
|
|
@@ -24,6 +24,7 @@ export interface IGetPageRevisionsUseCase {
|
|
|
24
24
|
execute(entryId: string): Promise<Result<WbPage[], UseCaseError>>;
|
|
25
25
|
}
|
|
26
26
|
export interface IGetPageRevisionsUseCaseErrors {
|
|
27
|
+
notAuthorized: PageNotAuthorizedError;
|
|
27
28
|
persistence: PagePersistenceError;
|
|
28
29
|
}
|
|
29
30
|
type UseCaseError = IGetPageRevisionsUseCaseErrors[keyof IGetPageRevisionsUseCaseErrors];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","GetPageRevisionsRepository","GetPageRevisionsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError } from \"~/domain/page/errors.js\";\n\n/**\n * GetPageRevisions repository interface\n */\nexport interface IGetPageRevisionsRepository {\n execute(entryId: string): Promise<Result<WbPage[], RepositoryError>>;\n}\n\nexport interface IGetPageRevisionsRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageRevisionsRepositoryErrors[keyof IGetPageRevisionsRepositoryErrors];\n\nexport const GetPageRevisionsRepository = createAbstraction<IGetPageRevisionsRepository>(\n \"Wb/GetPageRevisionsRepository\"\n);\n\nexport namespace GetPageRevisionsRepository {\n export type Interface = IGetPageRevisionsRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage[], RepositoryError>>;\n}\n\n/**\n * GetPageRevisions use case interface\n */\nexport interface IGetPageRevisionsUseCase {\n execute(entryId: string): Promise<Result<WbPage[], UseCaseError>>;\n}\n\nexport interface IGetPageRevisionsUseCaseErrors {\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageRevisionsUseCaseErrors[keyof IGetPageRevisionsUseCaseErrors];\n\nexport const GetPageRevisionsUseCase = createAbstraction<IGetPageRevisionsUseCase>(\n \"Wb/GetPageRevisionsUseCase\"\n);\n\nexport namespace GetPageRevisionsUseCase {\n export type Interface = IGetPageRevisionsUseCase;\n export type Error = UseCaseError;\n export type Return = Promise<Result<WbPage[], UseCaseError>>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAWA,OAAO,MAAMC,0BAA0B,GAAGD,iBAAiB,CACvD,+BACJ,CAAC;;AAQD;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["createAbstraction","GetPageRevisionsRepository","GetPageRevisionsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError, PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\n/**\n * GetPageRevisions repository interface\n */\nexport interface IGetPageRevisionsRepository {\n execute(entryId: string): Promise<Result<WbPage[], RepositoryError>>;\n}\n\nexport interface IGetPageRevisionsRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IGetPageRevisionsRepositoryErrors[keyof IGetPageRevisionsRepositoryErrors];\n\nexport const GetPageRevisionsRepository = createAbstraction<IGetPageRevisionsRepository>(\n \"Wb/GetPageRevisionsRepository\"\n);\n\nexport namespace GetPageRevisionsRepository {\n export type Interface = IGetPageRevisionsRepository;\n export type Error = RepositoryError;\n export type Return = Promise<Result<WbPage[], RepositoryError>>;\n}\n\n/**\n * GetPageRevisions use case interface\n */\nexport interface IGetPageRevisionsUseCase {\n execute(entryId: string): Promise<Result<WbPage[], UseCaseError>>;\n}\n\nexport interface IGetPageRevisionsUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IGetPageRevisionsUseCaseErrors[keyof IGetPageRevisionsUseCaseErrors];\n\nexport const GetPageRevisionsUseCase = createAbstraction<IGetPageRevisionsUseCase>(\n \"Wb/GetPageRevisionsUseCase\"\n);\n\nexport namespace GetPageRevisionsUseCase {\n export type Interface = IGetPageRevisionsUseCase;\n export type Error = UseCaseError;\n export type Return = Promise<Result<WbPage[], UseCaseError>>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAKvD;AACA;AACA;;AAWA,OAAO,MAAMC,0BAA0B,GAAGD,iBAAiB,CACvD,+BACJ,CAAC;;AAQD;AACA;AACA;;AAYA,OAAO,MAAME,uBAAuB,GAAGF,iBAAiB,CACpD,4BACJ,CAAC","ignoreList":[]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { ListPagesRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
2
2
|
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
3
3
|
import { PageModel } from "../../../domain/page/abstractions.js";
|
|
4
|
+
import { CmsWhereMapper } from "@webiny/api-headless-cms/features/whereMapper/abstractions.js";
|
|
5
|
+
import { CmsSortMapper } from "@webiny/api-headless-cms/features/sortMapper/abstractions.js";
|
|
4
6
|
declare class ListPagesRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
5
7
|
private pageModel;
|
|
6
8
|
private listLatestEntries;
|
|
7
|
-
|
|
9
|
+
private whereMapper;
|
|
10
|
+
private sortMapper;
|
|
11
|
+
constructor(pageModel: PageModel.Interface, listLatestEntries: ListLatestEntriesUseCase.Interface, whereMapper: CmsWhereMapper.Interface, sortMapper: CmsSortMapper.Interface);
|
|
8
12
|
execute(params: RepositoryAbstraction.Params): RepositoryAbstraction.Return;
|
|
9
13
|
}
|
|
10
14
|
export declare const ListPagesRepository: typeof ListPagesRepositoryImpl & {
|
|
@@ -4,15 +4,25 @@ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/cont
|
|
|
4
4
|
import { PageModel } from "../../../domain/page/abstractions.js";
|
|
5
5
|
import { EntryToPageMapper } from "../../../domain/page/EntryToPageMapper.js";
|
|
6
6
|
import { PagePersistenceError } from "../../../domain/page/errors.js";
|
|
7
|
+
import { CmsWhereMapper } from "@webiny/api-headless-cms/features/whereMapper/abstractions.js";
|
|
8
|
+
import { CmsSortMapper } from "@webiny/api-headless-cms/features/sortMapper/abstractions.js";
|
|
7
9
|
class ListPagesRepositoryImpl {
|
|
8
|
-
constructor(pageModel, listLatestEntries) {
|
|
10
|
+
constructor(pageModel, listLatestEntries, whereMapper, sortMapper) {
|
|
9
11
|
this.pageModel = pageModel;
|
|
10
12
|
this.listLatestEntries = listLatestEntries;
|
|
13
|
+
this.whereMapper = whereMapper;
|
|
14
|
+
this.sortMapper = sortMapper;
|
|
11
15
|
}
|
|
12
16
|
async execute(params) {
|
|
13
17
|
const result = await this.listLatestEntries.execute(this.pageModel, {
|
|
14
|
-
where:
|
|
15
|
-
|
|
18
|
+
where: this.whereMapper.map({
|
|
19
|
+
fields: this.pageModel.fields,
|
|
20
|
+
input: params.where
|
|
21
|
+
}),
|
|
22
|
+
sort: this.sortMapper.map({
|
|
23
|
+
fields: this.pageModel.fields,
|
|
24
|
+
input: params.sort
|
|
25
|
+
}),
|
|
16
26
|
limit: params.limit,
|
|
17
27
|
after: params.after,
|
|
18
28
|
search: params.search
|
|
@@ -33,7 +43,7 @@ class ListPagesRepositoryImpl {
|
|
|
33
43
|
}
|
|
34
44
|
export const ListPagesRepository = RepositoryAbstraction.createImplementation({
|
|
35
45
|
implementation: ListPagesRepositoryImpl,
|
|
36
|
-
dependencies: [PageModel, ListLatestEntriesUseCase]
|
|
46
|
+
dependencies: [PageModel, ListLatestEntriesUseCase, CmsWhereMapper, CmsSortMapper]
|
|
37
47
|
});
|
|
38
48
|
|
|
39
49
|
//# sourceMappingURL=ListPagesRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","ListPagesRepository","RepositoryAbstraction","ListLatestEntriesUseCase","PageModel","EntryToPageMapper","PagePersistenceError","ListPagesRepositoryImpl","constructor","pageModel","listLatestEntries","execute","params","result","where","sort","limit","after","search","isFail","fail","error","entries","meta","value","pages","
|
|
1
|
+
{"version":3,"names":["Result","ListPagesRepository","RepositoryAbstraction","ListLatestEntriesUseCase","PageModel","EntryToPageMapper","PagePersistenceError","CmsWhereMapper","CmsSortMapper","ListPagesRepositoryImpl","constructor","pageModel","listLatestEntries","whereMapper","sortMapper","execute","params","result","where","map","fields","input","sort","limit","after","search","isFail","fail","error","entries","meta","value","pages","entry","toPage","ok","createImplementation","implementation","dependencies"],"sources":["ListPagesRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListPagesRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { PageModel } from \"~/domain/page/abstractions.js\";\nimport { EntryToPageMapper } from \"~/domain/page/EntryToPageMapper.js\";\nimport { PagePersistenceError } from \"~/domain/page/errors.js\";\nimport { CmsWhereMapper } from \"@webiny/api-headless-cms/features/whereMapper/abstractions.js\";\nimport { CmsSortMapper } from \"@webiny/api-headless-cms/features/sortMapper/abstractions.js\";\n\nclass ListPagesRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private pageModel: PageModel.Interface,\n private listLatestEntries: ListLatestEntriesUseCase.Interface,\n private whereMapper: CmsWhereMapper.Interface,\n private sortMapper: CmsSortMapper.Interface\n ) {}\n\n async execute(params: RepositoryAbstraction.Params): RepositoryAbstraction.Return {\n const result = await this.listLatestEntries.execute(this.pageModel, {\n where: this.whereMapper.map({\n fields: this.pageModel.fields,\n input: params.where\n }),\n sort: this.sortMapper.map({\n fields: this.pageModel.fields,\n input: params.sort\n }),\n limit: params.limit,\n after: params.after,\n search: params.search\n });\n\n if (result.isFail()) {\n return Result.fail(new PagePersistenceError(result.error));\n }\n\n const { entries, meta } = result.value;\n const pages = entries.map(entry => EntryToPageMapper.toPage(entry));\n\n return Result.ok({ pages, meta });\n }\n}\n\nexport const ListPagesRepository = RepositoryAbstraction.createImplementation({\n implementation: ListPagesRepositoryImpl,\n dependencies: [PageModel, ListLatestEntriesUseCase, CmsWhereMapper, CmsSortMapper]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,mBAAmB,IAAIC,qBAAqB;AACrD,SAASC,wBAAwB,QAAQ,4DAA4D;AACrG,SAASC,SAAS;AAClB,SAASC,iBAAiB;AAC1B,SAASC,oBAAoB;AAC7B,SAASC,cAAc,QAAQ,+DAA+D;AAC9F,SAASC,aAAa,QAAQ,8DAA8D;AAE5F,MAAMC,uBAAuB,CAA4C;EACrEC,WAAWA,CACCC,SAA8B,EAC9BC,iBAAqD,EACrDC,WAAqC,EACrCC,UAAmC,EAC7C;IAAA,KAJUH,SAA8B,GAA9BA,SAA8B;IAAA,KAC9BC,iBAAqD,GAArDA,iBAAqD;IAAA,KACrDC,WAAqC,GAArCA,WAAqC;IAAA,KACrCC,UAAmC,GAAnCA,UAAmC;EAC5C;EAEH,MAAMC,OAAOA,CAACC,MAAoC,EAAgC;IAC9E,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACL,iBAAiB,CAACG,OAAO,CAAC,IAAI,CAACJ,SAAS,EAAE;MAChEO,KAAK,EAAE,IAAI,CAACL,WAAW,CAACM,GAAG,CAAC;QACxBC,MAAM,EAAE,IAAI,CAACT,SAAS,CAACS,MAAM;QAC7BC,KAAK,EAAEL,MAAM,CAACE;MAClB,CAAC,CAAC;MACFI,IAAI,EAAE,IAAI,CAACR,UAAU,CAACK,GAAG,CAAC;QACtBC,MAAM,EAAE,IAAI,CAACT,SAAS,CAACS,MAAM;QAC7BC,KAAK,EAAEL,MAAM,CAACM;MAClB,CAAC,CAAC;MACFC,KAAK,EAAEP,MAAM,CAACO,KAAK;MACnBC,KAAK,EAAER,MAAM,CAACQ,KAAK;MACnBC,MAAM,EAAET,MAAM,CAACS;IACnB,CAAC,CAAC;IAEF,IAAIR,MAAM,CAACS,MAAM,CAAC,CAAC,EAAE;MACjB,OAAO1B,MAAM,CAAC2B,IAAI,CAAC,IAAIrB,oBAAoB,CAACW,MAAM,CAACW,KAAK,CAAC,CAAC;IAC9D;IAEA,MAAM;MAAEC,OAAO;MAAEC;IAAK,CAAC,GAAGb,MAAM,CAACc,KAAK;IACtC,MAAMC,KAAK,GAAGH,OAAO,CAACV,GAAG,CAACc,KAAK,IAAI5B,iBAAiB,CAAC6B,MAAM,CAACD,KAAK,CAAC,CAAC;IAEnE,OAAOjC,MAAM,CAACmC,EAAE,CAAC;MAAEH,KAAK;MAAEF;IAAK,CAAC,CAAC;EACrC;AACJ;AAEA,OAAO,MAAM7B,mBAAmB,GAAGC,qBAAqB,CAACkC,oBAAoB,CAAC;EAC1EC,cAAc,EAAE5B,uBAAuB;EACvC6B,YAAY,EAAE,CAAClC,SAAS,EAAED,wBAAwB,EAAEI,cAAc,EAAEC,aAAa;AACrF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from "./abstractions.js";
|
|
2
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
3
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
4
|
declare class ListPagesUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
5
|
+
private permissions;
|
|
6
|
+
private identityContext;
|
|
3
7
|
private repository;
|
|
4
|
-
constructor(repository: ListPagesRepository.Interface);
|
|
8
|
+
constructor(permissions: WbPermissions.Interface, identityContext: IdentityContext.Interface, repository: ListPagesRepository.Interface);
|
|
5
9
|
execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
|
|
6
10
|
}
|
|
7
11
|
export declare const ListPagesUseCase: typeof ListPagesUseCaseImpl & {
|
|
@@ -1,15 +1,35 @@
|
|
|
1
|
+
import { Result } from "@webiny/feature/api";
|
|
1
2
|
import { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from "./abstractions.js";
|
|
3
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
|
+
import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
5
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
2
6
|
class ListPagesUseCaseImpl {
|
|
3
|
-
constructor(repository) {
|
|
7
|
+
constructor(permissions, identityContext, repository) {
|
|
8
|
+
this.permissions = permissions;
|
|
9
|
+
this.identityContext = identityContext;
|
|
4
10
|
this.repository = repository;
|
|
5
11
|
}
|
|
6
|
-
execute(params) {
|
|
7
|
-
|
|
12
|
+
async execute(params) {
|
|
13
|
+
const hasPermission = await this.permissions.canRead("page");
|
|
14
|
+
if (!hasPermission) {
|
|
15
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
16
|
+
}
|
|
17
|
+
const where = {
|
|
18
|
+
...params.where
|
|
19
|
+
};
|
|
20
|
+
if (await this.permissions.onlyOwnRecords("page")) {
|
|
21
|
+
const identity = this.identityContext.getIdentity();
|
|
22
|
+
where.createdBy = identity.id;
|
|
23
|
+
}
|
|
24
|
+
return this.repository.execute({
|
|
25
|
+
...params,
|
|
26
|
+
where
|
|
27
|
+
});
|
|
8
28
|
}
|
|
9
29
|
}
|
|
10
30
|
export const ListPagesUseCase = UseCaseAbstraction.createImplementation({
|
|
11
31
|
implementation: ListPagesUseCaseImpl,
|
|
12
|
-
dependencies: [ListPagesRepository]
|
|
32
|
+
dependencies: [WbPermissions.Abstraction, IdentityContext, ListPagesRepository]
|
|
13
33
|
});
|
|
14
34
|
|
|
15
35
|
//# sourceMappingURL=ListPagesUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ListPagesUseCase","UseCaseAbstraction","ListPagesRepository","ListPagesUseCaseImpl","constructor","repository","execute","params","createImplementation","implementation","dependencies"],"sources":["ListPagesUseCase.ts"],"sourcesContent":["import { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from \"./abstractions.js\";\n\nclass ListPagesUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: ListPagesRepository.Interface) {}\n\n execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n return this.repository.execute(params);\n }\n}\n\nexport const ListPagesUseCase = UseCaseAbstraction.createImplementation({\n implementation: ListPagesUseCaseImpl,\n dependencies: [ListPagesRepository]\n});\n"],"mappings":"AAAA,SAASA,gBAAgB,IAAIC,kBAAkB,EAAEC,mBAAmB;
|
|
1
|
+
{"version":3,"names":["Result","ListPagesUseCase","UseCaseAbstraction","ListPagesRepository","WbPermissions","PageNotAuthorizedError","IdentityContext","ListPagesUseCaseImpl","constructor","permissions","identityContext","repository","execute","params","hasPermission","canRead","fail","where","onlyOwnRecords","identity","getIdentity","createdBy","id","createImplementation","implementation","dependencies","Abstraction"],"sources":["ListPagesUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { ListPagesUseCase as UseCaseAbstraction, ListPagesRepository } from \"./abstractions.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\n\nclass ListPagesUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private identityContext: IdentityContext.Interface,\n private repository: ListPagesRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canRead(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n const where = { ...params.where };\n\n if (await this.permissions.onlyOwnRecords(\"page\")) {\n const identity = this.identityContext.getIdentity();\n where.createdBy = identity.id;\n }\n\n return this.repository.execute({ ...params, where });\n }\n}\n\nexport const ListPagesUseCase = UseCaseAbstraction.createImplementation({\n implementation: ListPagesUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, IdentityContext, ListPagesRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,gBAAgB,IAAIC,kBAAkB,EAAEC,mBAAmB;AACpE,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAC/B,SAASC,eAAe,QAAQ,6DAA6D;AAE7F,MAAMC,oBAAoB,CAAyC;EAC/DC,WAAWA,CACCC,WAAoC,EACpCC,eAA0C,EAC1CC,UAAyC,EACnD;IAAA,KAHUF,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,UAAyC,GAAzCA,UAAyC;EAClD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACL,WAAW,CAACM,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOd,MAAM,CAACgB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAEA,MAAMY,KAAK,GAAG;MAAE,GAAGJ,MAAM,CAACI;IAAM,CAAC;IAEjC,IAAI,MAAM,IAAI,CAACR,WAAW,CAACS,cAAc,CAAC,MAAM,CAAC,EAAE;MAC/C,MAAMC,QAAQ,GAAG,IAAI,CAACT,eAAe,CAACU,WAAW,CAAC,CAAC;MACnDH,KAAK,CAACI,SAAS,GAAGF,QAAQ,CAACG,EAAE;IACjC;IAEA,OAAO,IAAI,CAACX,UAAU,CAACC,OAAO,CAAC;MAAE,GAAGC,MAAM;MAAEI;IAAM,CAAC,CAAC;EACxD;AACJ;AAEA,OAAO,MAAMhB,gBAAgB,GAAGC,kBAAkB,CAACqB,oBAAoB,CAAC;EACpEC,cAAc,EAAEjB,oBAAoB;EACpCkB,YAAY,EAAE,CAACrB,aAAa,CAACsB,WAAW,EAAEpB,eAAe,EAAEH,mBAAmB;AAClF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Result } from "@webiny/feature/api";
|
|
2
2
|
import type { WbPage } from "../../../domain/page/abstractions.js";
|
|
3
|
-
import type { PagePersistenceError } from "../../../domain/page/errors.js";
|
|
3
|
+
import type { PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
4
4
|
import type { CmsEntryListSort, CmsEntryListWhere } from "@webiny/api-headless-cms/types/index.js";
|
|
5
5
|
export interface IListPagesParams {
|
|
6
6
|
where: CmsEntryListWhere;
|
|
@@ -42,6 +42,7 @@ export interface IListPagesUseCase {
|
|
|
42
42
|
execute(params: IListPagesParams): Promise<Result<IListPagesResult, UseCaseError>>;
|
|
43
43
|
}
|
|
44
44
|
export interface IListPagesUseCaseErrors {
|
|
45
|
+
notAuthorized: PageNotAuthorizedError;
|
|
45
46
|
persistence: PagePersistenceError;
|
|
46
47
|
}
|
|
47
48
|
type UseCaseError = IListPagesUseCaseErrors[keyof IListPagesUseCaseErrors];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","ListPagesRepository","ListPagesUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError } from \"~/domain/page/errors.js\";\nimport type { CmsEntryListSort, CmsEntryListWhere } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IListPagesParams {\n where: CmsEntryListWhere;\n sort: CmsEntryListSort;\n limit: number;\n after: string | null;\n search?: string;\n}\n\nexport interface IListPagesMeta {\n hasMoreItems: boolean;\n totalCount: number;\n cursor: string | null;\n}\n\nexport type IListPagesResult = { pages: WbPage[]; meta: IListPagesMeta };\n\n/**\n * ListPages repository interface\n */\nexport interface IListPagesRepository {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\nexport interface IListPagesRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IListPagesRepositoryErrors[keyof IListPagesRepositoryErrors];\n\nexport const ListPagesRepository =\n createAbstraction<IListPagesRepository>(\"Wb/ListPagesRepository\");\n\nexport namespace ListPagesRepository {\n export type Interface = IListPagesRepository;\n export type Error = RepositoryError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\n/**\n * ListPages use case interface\n */\nexport interface IListPagesUseCase {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, UseCaseError>>;\n}\n\nexport interface IListPagesUseCaseErrors {\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IListPagesUseCaseErrors[keyof IListPagesUseCaseErrors];\n\nexport const ListPagesUseCase = createAbstraction<IListPagesUseCase>(\"Wb/ListPagesUseCase\");\n\nexport namespace ListPagesUseCase {\n export type Interface = IListPagesUseCase;\n export type Error = UseCaseError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, UseCaseError>>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAsBvD;AACA;AACA;;AAWA,OAAO,MAAMC,mBAAmB,GAC5BD,iBAAiB,CAAuB,wBAAwB,CAAC;;AASrE;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["createAbstraction","ListPagesRepository","ListPagesUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { Result } from \"@webiny/feature/api\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { PagePersistenceError, PageNotAuthorizedError } from \"~/domain/page/errors.js\";\nimport type { CmsEntryListSort, CmsEntryListWhere } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IListPagesParams {\n where: CmsEntryListWhere;\n sort: CmsEntryListSort;\n limit: number;\n after: string | null;\n search?: string;\n}\n\nexport interface IListPagesMeta {\n hasMoreItems: boolean;\n totalCount: number;\n cursor: string | null;\n}\n\nexport type IListPagesResult = { pages: WbPage[]; meta: IListPagesMeta };\n\n/**\n * ListPages repository interface\n */\nexport interface IListPagesRepository {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\nexport interface IListPagesRepositoryErrors {\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IListPagesRepositoryErrors[keyof IListPagesRepositoryErrors];\n\nexport const ListPagesRepository =\n createAbstraction<IListPagesRepository>(\"Wb/ListPagesRepository\");\n\nexport namespace ListPagesRepository {\n export type Interface = IListPagesRepository;\n export type Error = RepositoryError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, RepositoryError>>;\n}\n\n/**\n * ListPages use case interface\n */\nexport interface IListPagesUseCase {\n execute(params: IListPagesParams): Promise<Result<IListPagesResult, UseCaseError>>;\n}\n\nexport interface IListPagesUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IListPagesUseCaseErrors[keyof IListPagesUseCaseErrors];\n\nexport const ListPagesUseCase = createAbstraction<IListPagesUseCase>(\"Wb/ListPagesUseCase\");\n\nexport namespace ListPagesUseCase {\n export type Interface = IListPagesUseCase;\n export type Error = UseCaseError;\n export type Params = IListPagesParams;\n export type Return = Promise<Result<IListPagesResult, UseCaseError>>;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAsBvD;AACA;AACA;;AAWA,OAAO,MAAMC,mBAAmB,GAC5BD,iBAAiB,CAAuB,wBAAwB,CAAC;;AASrE;AACA;AACA;;AAYA,OAAO,MAAME,gBAAgB,GAAGF,iBAAiB,CAAoB,qBAAqB,CAAC","ignoreList":[]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
|
|
2
2
|
import { MovePageUseCase as UseCaseAbstraction, MovePageRepository } from "./abstractions.js";
|
|
3
3
|
import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
|
|
4
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
5
|
declare class MovePageUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
6
|
+
private permissions;
|
|
5
7
|
private eventPublisher;
|
|
6
8
|
private getPageById;
|
|
7
9
|
private repository;
|
|
8
|
-
constructor(eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: MovePageRepository.Interface);
|
|
10
|
+
constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: MovePageRepository.Interface);
|
|
9
11
|
execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
|
|
10
12
|
}
|
|
11
13
|
export declare const MovePageUseCase: import("@webiny/di").Implementation<typeof MovePageUseCaseImpl>;
|
|
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
|
|
|
3
3
|
import { MovePageUseCase as UseCaseAbstraction, MovePageRepository } from "./abstractions.js";
|
|
4
4
|
import { PageBeforeMoveEvent, PageAfterMoveEvent } from "./events.js";
|
|
5
5
|
import { GetPageByIdUseCase } from "../GetPageById/index.js";
|
|
6
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
7
|
+
import { PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
6
8
|
class MovePageUseCaseImpl {
|
|
7
|
-
constructor(eventPublisher, getPageById, repository) {
|
|
9
|
+
constructor(permissions, eventPublisher, getPageById, repository) {
|
|
10
|
+
this.permissions = permissions;
|
|
8
11
|
this.eventPublisher = eventPublisher;
|
|
9
12
|
this.getPageById = getPageById;
|
|
10
13
|
this.repository = repository;
|
|
11
14
|
}
|
|
12
15
|
async execute(params) {
|
|
16
|
+
const hasPermission = await this.permissions.canEdit("page");
|
|
17
|
+
if (!hasPermission) {
|
|
18
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
19
|
+
}
|
|
20
|
+
|
|
13
21
|
// Get the original page for events
|
|
14
22
|
const getResult = await this.getPageById.execute(params.id);
|
|
15
23
|
if (getResult.isFail()) {
|
|
16
24
|
return getResult;
|
|
17
25
|
}
|
|
18
26
|
const original = getResult.value;
|
|
27
|
+
const canEdit = await this.permissions.canEdit("page", original);
|
|
28
|
+
if (!canEdit) {
|
|
29
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
30
|
+
}
|
|
19
31
|
|
|
20
32
|
// Publish before move event
|
|
21
33
|
const beforeEvent = new PageBeforeMoveEvent({
|
|
@@ -43,7 +55,7 @@ class MovePageUseCaseImpl {
|
|
|
43
55
|
export const MovePageUseCase = createImplementation({
|
|
44
56
|
abstraction: UseCaseAbstraction,
|
|
45
57
|
implementation: MovePageUseCaseImpl,
|
|
46
|
-
dependencies: [EventPublisher, GetPageByIdUseCase, MovePageRepository]
|
|
58
|
+
dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, MovePageRepository]
|
|
47
59
|
});
|
|
48
60
|
|
|
49
61
|
//# sourceMappingURL=MovePageUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","EventPublisher","MovePageUseCase","UseCaseAbstraction","MovePageRepository","PageBeforeMoveEvent","PageAfterMoveEvent","GetPageByIdUseCase","MovePageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","original","value","beforeEvent","input","publish","result","afterEvent","page","ok","abstraction","implementation","dependencies"],"sources":["MovePageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { MovePageUseCase as UseCaseAbstraction, MovePageRepository } from \"./abstractions.js\";\nimport { PageBeforeMoveEvent, PageAfterMoveEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass MovePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: MovePageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the original page for events\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Publish before move event\n const beforeEvent = new PageBeforeMoveEvent({\n original,\n input: params\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the move operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after move event\n const afterEvent = new PageAfterMoveEvent({\n original,\n input: params,\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const MovePageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MovePageUseCaseImpl,\n dependencies: [EventPublisher
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","EventPublisher","MovePageUseCase","UseCaseAbstraction","MovePageRepository","PageBeforeMoveEvent","PageAfterMoveEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","MovePageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","hasPermission","canEdit","fail","getResult","id","isFail","original","value","beforeEvent","input","publish","result","afterEvent","page","ok","abstraction","implementation","dependencies","Abstraction"],"sources":["MovePageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { MovePageUseCase as UseCaseAbstraction, MovePageRepository } from \"./abstractions.js\";\nimport { PageBeforeMoveEvent, PageAfterMoveEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { PageNotAuthorizedError } from \"~/domain/page/errors.js\";\n\nclass MovePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: MovePageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canEdit(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Get the original page for events\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n const canEdit = await this.permissions.canEdit(\"page\", original);\n if (!canEdit) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before move event\n const beforeEvent = new PageBeforeMoveEvent({\n original,\n input: params\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the move operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after move event\n const afterEvent = new PageAfterMoveEvent({\n original,\n input: params,\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const MovePageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: MovePageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n MovePageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SAASC,eAAe,IAAIC,kBAAkB,EAAEC,kBAAkB;AAClE,SAASC,mBAAmB,EAAEC,kBAAkB;AAChD,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,mBAAmB,CAAyC;EAC9DC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAAwC,EAClD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAAwC,GAAxCA,UAAwC;EACjD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACN,WAAW,CAACO,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOnB,MAAM,CAACqB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMY,SAAS,GAAG,MAAM,IAAI,CAACP,WAAW,CAACE,OAAO,CAACC,MAAM,CAACK,EAAE,CAAC;IAE3D,IAAID,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOF,SAAS;IACpB;IAEA,MAAMG,QAAQ,GAAGH,SAAS,CAACI,KAAK;IAEhC,MAAMN,OAAO,GAAG,MAAM,IAAI,CAACP,WAAW,CAACO,OAAO,CAAC,MAAM,EAAEK,QAAQ,CAAC;IAChE,IAAI,CAACL,OAAO,EAAE;MACV,OAAOpB,MAAM,CAACqB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMiB,WAAW,GAAG,IAAIrB,mBAAmB,CAAC;MACxCmB,QAAQ;MACRG,KAAK,EAAEV;IACX,CAAC,CAAC;IAEF,MAAM,IAAI,CAACJ,cAAc,CAACe,OAAO,CAACF,WAAW,CAAC;;IAE9C;IACA,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACd,UAAU,CAACC,OAAO,CAACC,MAAM,CAAC;IAEpD,IAAIY,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIxB,kBAAkB,CAAC;MACtCkB,QAAQ;MACRG,KAAK,EAAEV,MAAM;MACbc,IAAI,EAAEF,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO/B,MAAM,CAACiC,EAAE,CAACH,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,eAAe,GAAGF,oBAAoB,CAAC;EAChDiC,WAAW,EAAE9B,kBAAkB;EAC/B+B,cAAc,EAAExB,mBAAmB;EACnCyB,YAAY,EAAE,CACV3B,aAAa,CAAC4B,WAAW,EACzBnC,cAAc,EACdM,kBAAkB,EAClBH,kBAAkB;AAE1B,CAAC,CAAC","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import { type Result } from "@webiny/feature/api";
|
|
|
2
2
|
import type { IEventHandler } from "@webiny/api-core/features/EventPublisher";
|
|
3
3
|
import type { DomainEvent } from "@webiny/api-core/features/EventPublisher";
|
|
4
4
|
import type { WbPage } from "../../../domain/page/abstractions.js";
|
|
5
|
-
import { PageNotFoundError, PagePersistenceError } from "../../../domain/page/errors.js";
|
|
5
|
+
import { PageNotFoundError, PagePersistenceError, PageNotAuthorizedError } from "../../../domain/page/errors.js";
|
|
6
6
|
export interface IMoveWbPageParams {
|
|
7
7
|
id: string;
|
|
8
8
|
folderId: string;
|
|
@@ -26,6 +26,7 @@ export interface IMovePageUseCase {
|
|
|
26
26
|
execute(params: IMoveWbPageParams): Promise<Result<WbPage, UseCaseError>>;
|
|
27
27
|
}
|
|
28
28
|
export interface IMovePageUseCaseErrors {
|
|
29
|
+
notAuthorized: PageNotAuthorizedError;
|
|
29
30
|
notFound: PageNotFoundError;
|
|
30
31
|
persistence: PagePersistenceError;
|
|
31
32
|
}
|
|
@@ -47,14 +48,14 @@ export interface PageAfterMovePayload {
|
|
|
47
48
|
input: IMoveWbPageParams;
|
|
48
49
|
page: WbPage;
|
|
49
50
|
}
|
|
50
|
-
export declare const
|
|
51
|
-
export declare namespace
|
|
51
|
+
export declare const PageBeforeMoveEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeMovePayload>>>;
|
|
52
|
+
export declare namespace PageBeforeMoveEventHandler {
|
|
52
53
|
type Interface = IEventHandler<DomainEvent<PageBeforeMovePayload>>;
|
|
53
54
|
type Event = DomainEvent<PageBeforeMovePayload>;
|
|
54
55
|
type Page = WbPage;
|
|
55
56
|
}
|
|
56
|
-
export declare const
|
|
57
|
-
export declare namespace
|
|
57
|
+
export declare const PageAfterMoveEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterMovePayload>>>;
|
|
58
|
+
export declare namespace PageAfterMoveEventHandler {
|
|
58
59
|
type Interface = IEventHandler<DomainEvent<PageAfterMovePayload>>;
|
|
59
60
|
type Event = DomainEvent<PageAfterMovePayload>;
|
|
60
61
|
type Page = WbPage;
|
|
@@ -24,7 +24,7 @@ export const MovePageUseCase = createAbstraction("Wb/MovePageUseCase");
|
|
|
24
24
|
// Event Handler Abstractions
|
|
25
25
|
// ============================================================================
|
|
26
26
|
|
|
27
|
-
export const
|
|
28
|
-
export const
|
|
27
|
+
export const PageBeforeMoveEventHandler = createAbstraction("Wb/PageBeforeMoveEventHandler");
|
|
28
|
+
export const PageAfterMoveEventHandler = createAbstraction("Wb/PageAfterMoveEventHandler");
|
|
29
29
|
|
|
30
30
|
//# sourceMappingURL=abstractions.js.map
|