@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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","MovePageRepository","MovePageUseCase","
|
|
1
|
+
{"version":3,"names":["createAbstraction","MovePageRepository","MovePageUseCase","PageBeforeMoveEventHandler","PageAfterMoveEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport {\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IMoveWbPageParams {\n id: string;\n folderId: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IMovePageRepository {\n execute(params: IMoveWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IMovePageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IMovePageRepositoryErrors[keyof IMovePageRepositoryErrors];\n\nexport const MovePageRepository = createAbstraction<IMovePageRepository>(\"Wb/MovePageRepository\");\n\nexport namespace MovePageRepository {\n export type Interface = IMovePageRepository;\n export type Params = IMoveWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IMovePageUseCase {\n execute(params: IMoveWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IMovePageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IMovePageUseCaseErrors[keyof IMovePageUseCaseErrors];\n\nexport const MovePageUseCase = createAbstraction<IMovePageUseCase>(\"Wb/MovePageUseCase\");\n\nexport namespace MovePageUseCase {\n export type Interface = IMovePageUseCase;\n export type Params = IMoveWbPageParams;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforeMovePayload {\n original: WbPage;\n input: IMoveWbPageParams;\n}\n\nexport interface PageAfterMovePayload {\n original: WbPage;\n input: IMoveWbPageParams;\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeMoveEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeMovePayload>>\n>(\"Wb/PageBeforeMoveEventHandler\");\n\nexport namespace PageBeforeMoveEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeMovePayload>>;\n export type Event = DomainEvent<PageBeforeMovePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterMoveEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterMovePayload>>\n>(\"Wb/PageAfterMoveEventHandler\");\n\nexport namespace PageAfterMoveEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterMovePayload>>;\n export type Event = DomainEvent<PageAfterMovePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAOA;AACA;AACA;;AAaA,OAAO,MAAMC,kBAAkB,GAAGD,iBAAiB,CAAsB,uBAAuB,CAAC;;AASjG;AACA;AACA;;AAcA,OAAO,MAAME,eAAe,GAAGF,iBAAiB,CAAmB,oBAAoB,CAAC;;AAUxF;AACA;AACA;;AAaA;AACA;AACA;;AAEA,OAAO,MAAMG,0BAA0B,GAAGH,iBAAiB,CAEzD,+BAA+B,CAAC;AAQlC,OAAO,MAAMI,yBAAyB,GAAGJ,iBAAiB,CAExD,8BAA8B,CAAC","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
|
|
2
|
-
import {
|
|
2
|
+
import { PageBeforeMoveEventHandler, PageAfterMoveEventHandler } from "./abstractions.js";
|
|
3
3
|
// PageBeforeMove Event
|
|
4
4
|
export class PageBeforeMoveEvent extends DomainEvent {
|
|
5
5
|
eventType = "page.beforeMove";
|
|
6
6
|
getHandlerAbstraction() {
|
|
7
|
-
return
|
|
7
|
+
return PageBeforeMoveEventHandler;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ export class PageBeforeMoveEvent extends DomainEvent {
|
|
|
12
12
|
export class PageAfterMoveEvent extends DomainEvent {
|
|
13
13
|
eventType = "page.afterMove";
|
|
14
14
|
getHandlerAbstraction() {
|
|
15
|
-
return
|
|
15
|
+
return PageAfterMoveEventHandler;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DomainEvent","
|
|
1
|
+
{"version":3,"names":["DomainEvent","PageBeforeMoveEventHandler","PageAfterMoveEventHandler","PageBeforeMoveEvent","eventType","getHandlerAbstraction","PageAfterMoveEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeMoveEventHandler, PageAfterMoveEventHandler } from \"./abstractions.js\";\nimport type { PageBeforeMovePayload, PageAfterMovePayload } from \"./abstractions.js\";\n\n// PageBeforeMove Event\nexport class PageBeforeMoveEvent extends DomainEvent<PageBeforeMovePayload> {\n eventType = \"page.beforeMove\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeMoveEventHandler;\n }\n}\n\n// PageAfterMove Event\nexport class PageAfterMoveEvent extends DomainEvent<PageAfterMovePayload> {\n eventType = \"page.afterMove\" as const;\n\n getHandlerAbstraction() {\n return PageAfterMoveEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,0BAA0B,EAAEC,yBAAyB;AAG9D;AACA,OAAO,MAAMC,mBAAmB,SAASH,WAAW,CAAwB;EACxEI,SAAS,GAAG,iBAAiB;EAE7BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,0BAA0B;EACrC;AACJ;;AAEA;AACA,OAAO,MAAMK,kBAAkB,SAASN,WAAW,CAAuB;EACtEI,SAAS,GAAG,gBAAgB;EAE5BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,yBAAyB;EACpC;AACJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { PageAfterMoveEventHandler, PageBeforeMoveEventHandler, MovePageUseCase } from "./abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["PageAfterMoveEventHandler","PageBeforeMoveEventHandler","MovePageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterMoveEventHandler,\n PageBeforeMoveEventHandler,\n MovePageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,yBAAyB,EACzBC,0BAA0B,EAC1BC,eAAe","ignoreList":[]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
|
|
2
2
|
import { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from "./abstractions.js";
|
|
3
3
|
import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
|
|
4
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
5
|
declare class PublishPageUseCaseImpl 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: PublishPageRepository.Interface);
|
|
10
|
+
constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: PublishPageRepository.Interface);
|
|
9
11
|
execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
|
|
10
12
|
}
|
|
11
13
|
export declare const PublishPageUseCase: import("@webiny/di").Implementation<typeof PublishPageUseCaseImpl>;
|
|
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
|
|
|
3
3
|
import { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from "./abstractions.js";
|
|
4
4
|
import { PageBeforePublishEvent, PageAfterPublishEvent } 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 PublishPageUseCaseImpl {
|
|
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.canPublish("page");
|
|
17
|
+
if (!hasPermission) {
|
|
18
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
19
|
+
}
|
|
20
|
+
|
|
13
21
|
// Get the page first for the before event
|
|
14
22
|
const getResult = await this.getPageById.execute(params.id);
|
|
15
23
|
if (getResult.isFail()) {
|
|
16
24
|
return getResult;
|
|
17
25
|
}
|
|
18
26
|
const page = getResult.value;
|
|
27
|
+
const canAccess = await this.permissions.canAccess("page", page);
|
|
28
|
+
if (!canAccess) {
|
|
29
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
30
|
+
}
|
|
19
31
|
|
|
20
32
|
// Publish before publish event
|
|
21
33
|
const beforeEvent = new PageBeforePublishEvent({
|
|
@@ -40,7 +52,7 @@ class PublishPageUseCaseImpl {
|
|
|
40
52
|
export const PublishPageUseCase = createImplementation({
|
|
41
53
|
abstraction: UseCaseAbstraction,
|
|
42
54
|
implementation: PublishPageUseCaseImpl,
|
|
43
|
-
dependencies: [EventPublisher, GetPageByIdUseCase, PublishPageRepository]
|
|
55
|
+
dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, PublishPageRepository]
|
|
44
56
|
});
|
|
45
57
|
|
|
46
58
|
//# sourceMappingURL=PublishPageUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","EventPublisher","PublishPageUseCase","UseCaseAbstraction","PublishPageRepository","PageBeforePublishEvent","PageAfterPublishEvent","GetPageByIdUseCase","PublishPageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","page","value","beforeEvent","publish","result","afterEvent","ok","abstraction","implementation","dependencies"],"sources":["PublishPageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from \"./abstractions.js\";\nimport { PageBeforePublishEvent, PageAfterPublishEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass PublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: PublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n // Publish before publish event\n const beforeEvent = new PageBeforePublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the publish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after publish event\n const afterEvent = new PageAfterPublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const PublishPageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: PublishPageUseCaseImpl,\n dependencies: [EventPublisher
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","EventPublisher","PublishPageUseCase","UseCaseAbstraction","PublishPageRepository","PageBeforePublishEvent","PageAfterPublishEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","PublishPageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","hasPermission","canPublish","fail","getResult","id","isFail","page","value","canAccess","beforeEvent","publish","result","afterEvent","ok","abstraction","implementation","dependencies","Abstraction"],"sources":["PublishPageUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { PublishPageUseCase as UseCaseAbstraction, PublishPageRepository } from \"./abstractions.js\";\nimport { PageBeforePublishEvent, PageAfterPublishEvent } 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 PublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: PublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canPublish(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n const canAccess = await this.permissions.canAccess(\"page\", page);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before publish event\n const beforeEvent = new PageBeforePublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the publish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after publish event\n const afterEvent = new PageAfterPublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const PublishPageUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: PublishPageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n PublishPageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SAASC,kBAAkB,IAAIC,kBAAkB,EAAEC,qBAAqB;AACxE,SAASC,sBAAsB,EAAEC,qBAAqB;AACtD,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,sBAAsB,CAAyC;EACjEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA2C,EACrD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA2C,GAA3CA,UAA2C;EACpD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACN,WAAW,CAACO,UAAU,CAAC,MAAM,CAAC;IAC/D,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,IAAI,GAAGH,SAAS,CAACI,KAAK;IAE5B,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACd,WAAW,CAACc,SAAS,CAAC,MAAM,EAAEF,IAAI,CAAC;IAChE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAO3B,MAAM,CAACqB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMkB,WAAW,GAAG,IAAItB,sBAAsB,CAAC;MAC3CmB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACX,cAAc,CAACe,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,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,qBAAqB,CAAC;MACzCkB,IAAI,EAAEK,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO/B,MAAM,CAACgC,EAAE,CAACF,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,kBAAkB,GAAGF,oBAAoB,CAAC;EACnDgC,WAAW,EAAE7B,kBAAkB;EAC/B8B,cAAc,EAAEvB,sBAAsB;EACtCwB,YAAY,EAAE,CACV1B,aAAa,CAAC2B,WAAW,EACzBlC,cAAc,EACdM,kBAAkB,EAClBH,qBAAqB;AAE7B,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 IPublishWbPageParams {
|
|
7
7
|
id: string;
|
|
8
8
|
}
|
|
@@ -25,6 +25,7 @@ export interface IPublishPageUseCase {
|
|
|
25
25
|
execute(params: IPublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;
|
|
26
26
|
}
|
|
27
27
|
export interface IPublishPageUseCaseErrors {
|
|
28
|
+
notAuthorized: PageNotAuthorizedError;
|
|
28
29
|
notFound: PageNotFoundError;
|
|
29
30
|
persistence: PagePersistenceError;
|
|
30
31
|
}
|
|
@@ -43,14 +44,14 @@ export interface PageBeforePublishPayload {
|
|
|
43
44
|
export interface PageAfterPublishPayload {
|
|
44
45
|
page: WbPage;
|
|
45
46
|
}
|
|
46
|
-
export declare const
|
|
47
|
-
export declare namespace
|
|
47
|
+
export declare const PageBeforePublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforePublishPayload>>>;
|
|
48
|
+
export declare namespace PageBeforePublishEventHandler {
|
|
48
49
|
type Interface = IEventHandler<DomainEvent<PageBeforePublishPayload>>;
|
|
49
50
|
type Event = DomainEvent<PageBeforePublishPayload>;
|
|
50
51
|
type Page = WbPage;
|
|
51
52
|
}
|
|
52
|
-
export declare const
|
|
53
|
-
export declare namespace
|
|
53
|
+
export declare const PageAfterPublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterPublishPayload>>>;
|
|
54
|
+
export declare namespace PageAfterPublishEventHandler {
|
|
54
55
|
type Interface = IEventHandler<DomainEvent<PageAfterPublishPayload>>;
|
|
55
56
|
type Event = DomainEvent<PageAfterPublishPayload>;
|
|
56
57
|
type Page = WbPage;
|
|
@@ -24,7 +24,7 @@ export const PublishPageUseCase = createAbstraction("Wb/PublishPageUseCase");
|
|
|
24
24
|
// Event Handler Abstractions
|
|
25
25
|
// ============================================================================
|
|
26
26
|
|
|
27
|
-
export const
|
|
28
|
-
export const
|
|
27
|
+
export const PageBeforePublishEventHandler = createAbstraction("Wb/PageBeforePublishEventHandler");
|
|
28
|
+
export const PageAfterPublishEventHandler = createAbstraction("Wb/PageAfterPublishEventHandler");
|
|
29
29
|
|
|
30
30
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","PublishPageRepository","PublishPageUseCase","
|
|
1
|
+
{"version":3,"names":["createAbstraction","PublishPageRepository","PublishPageUseCase","PageBeforePublishEventHandler","PageAfterPublishEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport {\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IPublishWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IPublishPageRepository {\n execute(params: IPublishWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IPublishPageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IPublishPageRepositoryErrors[keyof IPublishPageRepositoryErrors];\n\nexport const PublishPageRepository = createAbstraction<IPublishPageRepository>(\n \"Wb/PublishPageRepository\"\n);\n\nexport namespace PublishPageRepository {\n export type Interface = IPublishPageRepository;\n export type Params = IPublishWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IPublishPageUseCase {\n execute(params: IPublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IPublishPageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IPublishPageUseCaseErrors[keyof IPublishPageUseCaseErrors];\n\nexport const PublishPageUseCase = createAbstraction<IPublishPageUseCase>(\"Wb/PublishPageUseCase\");\n\nexport namespace PublishPageUseCase {\n export type Interface = IPublishPageUseCase;\n export type Params = IPublishWbPageParams;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforePublishPayload {\n page: WbPage;\n}\n\nexport interface PageAfterPublishPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforePublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforePublishPayload>>\n>(\"Wb/PageBeforePublishEventHandler\");\n\nexport namespace PageBeforePublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforePublishPayload>>;\n export type Event = DomainEvent<PageBeforePublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterPublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterPublishPayload>>\n>(\"Wb/PageAfterPublishEventHandler\");\n\nexport namespace PageAfterPublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterPublishPayload>>;\n export type Event = DomainEvent<PageAfterPublishPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,qBAAqB,GAAGD,iBAAiB,CAClD,0BACJ,CAAC;;AASD;AACA;AACA;;AAcA,OAAO,MAAME,kBAAkB,GAAGF,iBAAiB,CAAsB,uBAAuB,CAAC;;AAUjG;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,6BAA6B,GAAGH,iBAAiB,CAE5D,kCAAkC,CAAC;AAQrC,OAAO,MAAMI,4BAA4B,GAAGJ,iBAAiB,CAE3D,iCAAiC,CAAC","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
|
|
2
|
-
import {
|
|
2
|
+
import { PageBeforePublishEventHandler, PageAfterPublishEventHandler } from "./abstractions.js";
|
|
3
3
|
// PageBeforePublish Event
|
|
4
4
|
export class PageBeforePublishEvent extends DomainEvent {
|
|
5
5
|
eventType = "page.beforePublish";
|
|
6
6
|
getHandlerAbstraction() {
|
|
7
|
-
return
|
|
7
|
+
return PageBeforePublishEventHandler;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ export class PageBeforePublishEvent extends DomainEvent {
|
|
|
12
12
|
export class PageAfterPublishEvent extends DomainEvent {
|
|
13
13
|
eventType = "page.afterPublish";
|
|
14
14
|
getHandlerAbstraction() {
|
|
15
|
-
return
|
|
15
|
+
return PageAfterPublishEventHandler;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DomainEvent","
|
|
1
|
+
{"version":3,"names":["DomainEvent","PageBeforePublishEventHandler","PageAfterPublishEventHandler","PageBeforePublishEvent","eventType","getHandlerAbstraction","PageAfterPublishEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforePublishEventHandler, PageAfterPublishEventHandler } from \"./abstractions.js\";\nimport type { PageBeforePublishPayload, PageAfterPublishPayload } from \"./abstractions.js\";\n\n// PageBeforePublish Event\nexport class PageBeforePublishEvent extends DomainEvent<PageBeforePublishPayload> {\n eventType = \"page.beforePublish\" as const;\n\n getHandlerAbstraction() {\n return PageBeforePublishEventHandler;\n }\n}\n\n// PageAfterPublish Event\nexport class PageAfterPublishEvent extends DomainEvent<PageAfterPublishPayload> {\n eventType = \"page.afterPublish\" as const;\n\n getHandlerAbstraction() {\n return PageAfterPublishEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,6BAA6B,EAAEC,4BAA4B;AAGpE;AACA,OAAO,MAAMC,sBAAsB,SAASH,WAAW,CAA2B;EAC9EI,SAAS,GAAG,oBAAoB;EAEhCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,6BAA6B;EACxC;AACJ;;AAEA;AACA,OAAO,MAAMK,qBAAqB,SAASN,WAAW,CAA0B;EAC5EI,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,4BAA4B;EACvC;AACJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { PageAfterPublishEventHandler, PageBeforePublishEventHandler, PublishPageUseCase } from "./abstractions.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["PageAfterPublishEventHandler","PageBeforePublishEventHandler","PublishPageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterPublishEventHandler,\n PageBeforePublishEventHandler,\n PublishPageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,4BAA4B,EAC5BC,6BAA6B,EAC7BC,kBAAkB","ignoreList":[]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
|
|
2
2
|
import { UnpublishPageUseCase as UseCaseAbstraction, UnpublishPageRepository } from "./abstractions.js";
|
|
3
3
|
import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
|
|
4
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
5
|
declare class UnpublishPageUseCaseImpl 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: UnpublishPageRepository.Interface);
|
|
10
|
+
constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: UnpublishPageRepository.Interface);
|
|
9
11
|
execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
|
|
10
12
|
}
|
|
11
13
|
export declare const UnpublishPageUseCase: typeof UnpublishPageUseCaseImpl & {
|
|
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
|
|
|
3
3
|
import { UnpublishPageUseCase as UseCaseAbstraction, UnpublishPageRepository } from "./abstractions.js";
|
|
4
4
|
import { PageBeforeUnpublishEvent, PageAfterUnpublishEvent } 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 UnpublishPageUseCaseImpl {
|
|
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.canUnpublish("page");
|
|
17
|
+
if (!hasPermission) {
|
|
18
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
19
|
+
}
|
|
20
|
+
|
|
13
21
|
// Get the page first for the before event
|
|
14
22
|
const getResult = await this.getPageById.execute(params.id);
|
|
15
23
|
if (getResult.isFail()) {
|
|
16
24
|
return getResult;
|
|
17
25
|
}
|
|
18
26
|
const page = getResult.value;
|
|
27
|
+
const canAccess = await this.permissions.canAccess("page", page);
|
|
28
|
+
if (!canAccess) {
|
|
29
|
+
return Result.fail(new PageNotAuthorizedError());
|
|
30
|
+
}
|
|
19
31
|
|
|
20
32
|
// Publish before unpublish event
|
|
21
33
|
const beforeEvent = new PageBeforeUnpublishEvent({
|
|
@@ -39,7 +51,7 @@ class UnpublishPageUseCaseImpl {
|
|
|
39
51
|
}
|
|
40
52
|
export const UnpublishPageUseCase = UseCaseAbstraction.createImplementation({
|
|
41
53
|
implementation: UnpublishPageUseCaseImpl,
|
|
42
|
-
dependencies: [EventPublisher, GetPageByIdUseCase, UnpublishPageRepository]
|
|
54
|
+
dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, UnpublishPageRepository]
|
|
43
55
|
});
|
|
44
56
|
|
|
45
57
|
//# sourceMappingURL=UnpublishPageUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","EventPublisher","UnpublishPageUseCase","UseCaseAbstraction","UnpublishPageRepository","PageBeforeUnpublishEvent","PageAfterUnpublishEvent","GetPageByIdUseCase","UnpublishPageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","params","getResult","id","isFail","page","value","beforeEvent","publish","result","afterEvent","ok","createImplementation","implementation","dependencies"],"sources":["UnpublishPageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n UnpublishPageUseCase as UseCaseAbstraction,\n UnpublishPageRepository\n} from \"./abstractions.js\";\nimport { PageBeforeUnpublishEvent, PageAfterUnpublishEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass UnpublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UnpublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n // Publish before unpublish event\n const beforeEvent = new PageBeforeUnpublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the unpublish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after unpublish event\n const afterEvent = new PageAfterUnpublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UnpublishPageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UnpublishPageUseCaseImpl,\n dependencies: [EventPublisher
|
|
1
|
+
{"version":3,"names":["Result","EventPublisher","UnpublishPageUseCase","UseCaseAbstraction","UnpublishPageRepository","PageBeforeUnpublishEvent","PageAfterUnpublishEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","UnpublishPageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","params","hasPermission","canUnpublish","fail","getResult","id","isFail","page","value","canAccess","beforeEvent","publish","result","afterEvent","ok","createImplementation","implementation","dependencies","Abstraction"],"sources":["UnpublishPageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n UnpublishPageUseCase as UseCaseAbstraction,\n UnpublishPageRepository\n} from \"./abstractions.js\";\nimport { PageBeforeUnpublishEvent, PageAfterUnpublishEvent } 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 UnpublishPageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UnpublishPageRepository.Interface\n ) {}\n\n async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canUnpublish(\"page\");\n if (!hasPermission) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Get the page first for the before event\n const getResult = await this.getPageById.execute(params.id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const page = getResult.value;\n\n const canAccess = await this.permissions.canAccess(\"page\", page);\n if (!canAccess) {\n return Result.fail(new PageNotAuthorizedError());\n }\n\n // Publish before unpublish event\n const beforeEvent = new PageBeforeUnpublishEvent({\n page\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the unpublish operation\n const result = await this.repository.execute(params);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after unpublish event\n const afterEvent = new PageAfterUnpublishEvent({\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UnpublishPageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UnpublishPageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n UnpublishPageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,oBAAoB,IAAIC,kBAAkB,EAC1CC,uBAAuB;AAE3B,SAASC,wBAAwB,EAAEC,uBAAuB;AAC1D,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,wBAAwB,CAAyC;EACnEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA6C,EACvD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA6C,GAA7CA,UAA6C;EACtD;EAEH,MAAMC,OAAOA,CAACC,MAAiC,EAA6B;IACxE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACN,WAAW,CAACO,YAAY,CAAC,MAAM,CAAC;IACjE,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOlB,MAAM,CAACoB,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,IAAI,GAAGH,SAAS,CAACI,KAAK;IAE5B,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACd,WAAW,CAACc,SAAS,CAAC,MAAM,EAAEF,IAAI,CAAC;IAChE,IAAI,CAACE,SAAS,EAAE;MACZ,OAAO1B,MAAM,CAACoB,IAAI,CAAC,IAAIX,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMkB,WAAW,GAAG,IAAItB,wBAAwB,CAAC;MAC7CmB;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,CAACX,cAAc,CAACe,OAAO,CAACD,WAAW,CAAC;;IAE9C;IACA,MAAME,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,uBAAuB,CAAC;MAC3CkB,IAAI,EAAEK,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO9B,MAAM,CAAC+B,EAAE,CAACF,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,oBAAoB,GAAGC,kBAAkB,CAAC6B,oBAAoB,CAAC;EACxEC,cAAc,EAAEvB,wBAAwB;EACxCwB,YAAY,EAAE,CACV1B,aAAa,CAAC2B,WAAW,EACzBlC,cAAc,EACdM,kBAAkB,EAClBH,uBAAuB;AAE/B,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 IUnpublishWbPageParams {
|
|
7
7
|
id: string;
|
|
8
8
|
}
|
|
@@ -25,6 +25,7 @@ export interface IUnpublishPageUseCase {
|
|
|
25
25
|
execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;
|
|
26
26
|
}
|
|
27
27
|
export interface IUnpublishPageUseCaseErrors {
|
|
28
|
+
notAuthorized: PageNotAuthorizedError;
|
|
28
29
|
notFound: PageNotFoundError;
|
|
29
30
|
persistence: PagePersistenceError;
|
|
30
31
|
}
|
|
@@ -43,14 +44,14 @@ export interface PageBeforeUnpublishPayload {
|
|
|
43
44
|
export interface PageAfterUnpublishPayload {
|
|
44
45
|
page: WbPage;
|
|
45
46
|
}
|
|
46
|
-
export declare const
|
|
47
|
-
export declare namespace
|
|
47
|
+
export declare const PageBeforeUnpublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>>;
|
|
48
|
+
export declare namespace PageBeforeUnpublishEventHandler {
|
|
48
49
|
type Interface = IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>;
|
|
49
50
|
type Event = DomainEvent<PageBeforeUnpublishPayload>;
|
|
50
51
|
type Page = WbPage;
|
|
51
52
|
}
|
|
52
|
-
export declare const
|
|
53
|
-
export declare namespace
|
|
53
|
+
export declare const PageAfterUnpublishEventHandler: import("@webiny/di").Abstraction<IEventHandler<DomainEvent<PageAfterUnpublishPayload>>>;
|
|
54
|
+
export declare namespace PageAfterUnpublishEventHandler {
|
|
54
55
|
type Interface = IEventHandler<DomainEvent<PageAfterUnpublishPayload>>;
|
|
55
56
|
type Event = DomainEvent<PageAfterUnpublishPayload>;
|
|
56
57
|
type Page = WbPage;
|
|
@@ -24,7 +24,7 @@ export const UnpublishPageUseCase = createAbstraction("Wb/UnpublishPageUseCase")
|
|
|
24
24
|
// Event Handler Abstractions
|
|
25
25
|
// ============================================================================
|
|
26
26
|
|
|
27
|
-
export const
|
|
28
|
-
export const
|
|
27
|
+
export const PageBeforeUnpublishEventHandler = createAbstraction("Wb/PageBeforeUnpublishEventHandler");
|
|
28
|
+
export const PageAfterUnpublishEventHandler = createAbstraction("Wb/PageAfterUnpublishEventHandler");
|
|
29
29
|
|
|
30
30
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","UnpublishPageRepository","UnpublishPageUseCase","
|
|
1
|
+
{"version":3,"names":["createAbstraction","UnpublishPageRepository","UnpublishPageUseCase","PageBeforeUnpublishEventHandler","PageAfterUnpublishEventHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport {\n PageNotFoundError,\n PagePersistenceError,\n PageNotAuthorizedError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IUnpublishWbPageParams {\n id: string;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IUnpublishPageRepository {\n execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IUnpublishPageRepositoryErrors {\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IUnpublishPageRepositoryErrors[keyof IUnpublishPageRepositoryErrors];\n\nexport const UnpublishPageRepository = createAbstraction<IUnpublishPageRepository>(\n \"Wb/UnpublishPageRepository\"\n);\n\nexport namespace UnpublishPageRepository {\n export type Interface = IUnpublishPageRepository;\n export type Params = IUnpublishWbPageParams;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IUnpublishPageUseCase {\n execute(params: IUnpublishWbPageParams): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IUnpublishPageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IUnpublishPageUseCaseErrors[keyof IUnpublishPageUseCaseErrors];\n\nexport const UnpublishPageUseCase =\n createAbstraction<IUnpublishPageUseCase>(\"Wb/UnpublishPageUseCase\");\n\nexport namespace UnpublishPageUseCase {\n export type Interface = IUnpublishPageUseCase;\n export type Params = IUnpublishWbPageParams;\n export type Return = Promise<Result<WbPage, UseCaseError>>;\n export type Error = UseCaseError;\n export type Page = WbPage;\n}\n\n// ============================================================================\n// Event Payload Types\n// ============================================================================\n\nexport interface PageBeforeUnpublishPayload {\n page: WbPage;\n}\n\nexport interface PageAfterUnpublishPayload {\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeUnpublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>\n>(\"Wb/PageBeforeUnpublishEventHandler\");\n\nexport namespace PageBeforeUnpublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>;\n export type Event = DomainEvent<PageBeforeUnpublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterUnpublishEventHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterUnpublishPayload>>\n>(\"Wb/PageAfterUnpublishEventHandler\");\n\nexport namespace PageAfterUnpublishEventHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterUnpublishPayload>>;\n export type Event = DomainEvent<PageAfterUnpublishPayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAUpE;AACA;AACA;;AAMA;AACA;AACA;;AAaA,OAAO,MAAMC,uBAAuB,GAAGD,iBAAiB,CACpD,4BACJ,CAAC;;AASD;AACA;AACA;;AAcA,OAAO,MAAME,oBAAoB,GAC7BF,iBAAiB,CAAwB,yBAAyB,CAAC;;AAUvE;AACA;AACA;;AAUA;AACA;AACA;;AAEA,OAAO,MAAMG,+BAA+B,GAAGH,iBAAiB,CAE9D,oCAAoC,CAAC;AAQvC,OAAO,MAAMI,8BAA8B,GAAGJ,iBAAiB,CAE7D,mCAAmC,CAAC","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DomainEvent } from "@webiny/api-core/features/EventPublisher";
|
|
2
|
-
import {
|
|
2
|
+
import { PageBeforeUnpublishEventHandler, PageAfterUnpublishEventHandler } from "./abstractions.js";
|
|
3
3
|
// PageBeforeUnpublish Event
|
|
4
4
|
export class PageBeforeUnpublishEvent extends DomainEvent {
|
|
5
5
|
eventType = "page.beforeUnpublish";
|
|
6
6
|
getHandlerAbstraction() {
|
|
7
|
-
return
|
|
7
|
+
return PageBeforeUnpublishEventHandler;
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ export class PageBeforeUnpublishEvent extends DomainEvent {
|
|
|
12
12
|
export class PageAfterUnpublishEvent extends DomainEvent {
|
|
13
13
|
eventType = "page.afterUnpublish";
|
|
14
14
|
getHandlerAbstraction() {
|
|
15
|
-
return
|
|
15
|
+
return PageAfterUnpublishEventHandler;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DomainEvent","
|
|
1
|
+
{"version":3,"names":["DomainEvent","PageBeforeUnpublishEventHandler","PageAfterUnpublishEventHandler","PageBeforeUnpublishEvent","eventType","getHandlerAbstraction","PageAfterUnpublishEvent"],"sources":["events.ts"],"sourcesContent":["import { DomainEvent } from \"@webiny/api-core/features/EventPublisher\";\nimport { PageBeforeUnpublishEventHandler, PageAfterUnpublishEventHandler } from \"./abstractions.js\";\nimport type { PageBeforeUnpublishPayload, PageAfterUnpublishPayload } from \"./abstractions.js\";\n\n// PageBeforeUnpublish Event\nexport class PageBeforeUnpublishEvent extends DomainEvent<PageBeforeUnpublishPayload> {\n eventType = \"page.beforeUnpublish\" as const;\n\n getHandlerAbstraction() {\n return PageBeforeUnpublishEventHandler;\n }\n}\n\n// PageAfterUnpublish Event\nexport class PageAfterUnpublishEvent extends DomainEvent<PageAfterUnpublishPayload> {\n eventType = \"page.afterUnpublish\" as const;\n\n getHandlerAbstraction() {\n return PageAfterUnpublishEventHandler;\n }\n}\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE,SAASC,+BAA+B,EAAEC,8BAA8B;AAGxE;AACA,OAAO,MAAMC,wBAAwB,SAASH,WAAW,CAA6B;EAClFI,SAAS,GAAG,sBAAsB;EAElCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOJ,+BAA+B;EAC1C;AACJ;;AAEA;AACA,OAAO,MAAMK,uBAAuB,SAASN,WAAW,CAA4B;EAChFI,SAAS,GAAG,qBAAqB;EAEjCC,qBAAqBA,CAAA,EAAG;IACpB,OAAOH,8BAA8B;EACzC;AACJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { PageAfterUnpublishEventHandler, PageBeforeUnpublishEventHandler, UnpublishPageUseCase } from "./abstractions.js";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { PageAfterUnpublishEventHandler, PageBeforeUnpublishEventHandler, UnpublishPageUseCase } from "./abstractions.js";
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["PageAfterUnpublishEventHandler","PageBeforeUnpublishEventHandler","UnpublishPageUseCase"],"sources":["index.ts"],"sourcesContent":["export {\n PageAfterUnpublishEventHandler,\n PageBeforeUnpublishEventHandler,\n UnpublishPageUseCase\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,8BAA8B,EAC9BC,+BAA+B,EAC/BC,oBAAoB","ignoreList":[]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
|
|
2
2
|
import { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from "./abstractions.js";
|
|
3
3
|
import { GetPageByIdUseCase } from "../../../features/pages/GetPageById/index.js";
|
|
4
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
4
5
|
declare class UpdatePageUseCaseImpl 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: UpdatePageRepository.Interface);
|
|
10
|
+
constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, getPageById: GetPageByIdUseCase.Interface, repository: UpdatePageRepository.Interface);
|
|
9
11
|
execute(id: string, data: UseCaseAbstraction.UpdateData): UseCaseAbstraction.Return;
|
|
10
12
|
}
|
|
11
13
|
export declare const UpdatePageUseCase: typeof UpdatePageUseCaseImpl & {
|
|
@@ -3,19 +3,31 @@ import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
|
|
|
3
3
|
import { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from "./abstractions.js";
|
|
4
4
|
import { PageBeforeUpdateEvent, PageAfterUpdateEvent } 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 UpdatePageUseCaseImpl {
|
|
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(id, data) {
|
|
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(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 update event
|
|
21
33
|
const beforeEvent = new PageBeforeUpdateEvent({
|
|
@@ -48,7 +60,7 @@ class UpdatePageUseCaseImpl {
|
|
|
48
60
|
}
|
|
49
61
|
export const UpdatePageUseCase = UseCaseAbstraction.createImplementation({
|
|
50
62
|
implementation: UpdatePageUseCaseImpl,
|
|
51
|
-
dependencies: [EventPublisher, GetPageByIdUseCase, UpdatePageRepository]
|
|
63
|
+
dependencies: [WbPermissions.Abstraction, EventPublisher, GetPageByIdUseCase, UpdatePageRepository]
|
|
52
64
|
});
|
|
53
65
|
|
|
54
66
|
//# sourceMappingURL=UpdatePageUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","EventPublisher","UpdatePageUseCase","UseCaseAbstraction","UpdatePageRepository","PageBeforeUpdateEvent","PageAfterUpdateEvent","GetPageByIdUseCase","UpdatePageUseCaseImpl","constructor","eventPublisher","getPageById","repository","execute","id","data","getResult","isFail","original","value","beforeEvent","input","publish","result","afterEvent","page","ok","createImplementation","implementation","dependencies"],"sources":["UpdatePageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from \"./abstractions.js\";\nimport { PageBeforeUpdateEvent, PageAfterUpdateEvent } from \"./events.js\";\nimport { GetPageByIdUseCase } from \"~/features/pages/GetPageById/index.js\";\n\nclass UpdatePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UpdatePageRepository.Interface\n ) {}\n\n async execute(id: string, data: UseCaseAbstraction.UpdateData): UseCaseAbstraction.Return {\n // Get the original page for events\n const getResult = await this.getPageById.execute(id);\n\n if (getResult.isFail()) {\n return getResult;\n }\n\n const original = getResult.value;\n\n // Publish before update event\n const beforeEvent = new PageBeforeUpdateEvent({\n original,\n input: { id, data }\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the update operation\n const result = await this.repository.execute(id, data);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after update event\n const afterEvent = new PageAfterUpdateEvent({\n original,\n input: { id, data },\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UpdatePageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdatePageUseCaseImpl,\n dependencies: [EventPublisher
|
|
1
|
+
{"version":3,"names":["Result","EventPublisher","UpdatePageUseCase","UseCaseAbstraction","UpdatePageRepository","PageBeforeUpdateEvent","PageAfterUpdateEvent","GetPageByIdUseCase","WbPermissions","PageNotAuthorizedError","UpdatePageUseCaseImpl","constructor","permissions","eventPublisher","getPageById","repository","execute","id","data","hasPermission","canEdit","fail","getResult","isFail","original","value","beforeEvent","input","publish","result","afterEvent","page","ok","createImplementation","implementation","dependencies","Abstraction"],"sources":["UpdatePageUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport { UpdatePageUseCase as UseCaseAbstraction, UpdatePageRepository } from \"./abstractions.js\";\nimport { PageBeforeUpdateEvent, PageAfterUpdateEvent } 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 UpdatePageUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private getPageById: GetPageByIdUseCase.Interface,\n private repository: UpdatePageRepository.Interface\n ) {}\n\n async execute(id: string, data: UseCaseAbstraction.UpdateData): 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(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 update event\n const beforeEvent = new PageBeforeUpdateEvent({\n original,\n input: { id, data }\n });\n\n await this.eventPublisher.publish(beforeEvent);\n\n // Execute the update operation\n const result = await this.repository.execute(id, data);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after update event\n const afterEvent = new PageAfterUpdateEvent({\n original,\n input: { id, data },\n page: result.value\n });\n\n await this.eventPublisher.publish(afterEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const UpdatePageUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdatePageUseCaseImpl,\n dependencies: [\n WbPermissions.Abstraction,\n EventPublisher,\n GetPageByIdUseCase,\n UpdatePageRepository\n ]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SACIC,cAAc,QAEX,0CAA0C;AACjD,SAASC,iBAAiB,IAAIC,kBAAkB,EAAEC,oBAAoB;AACtE,SAASC,qBAAqB,EAAEC,oBAAoB;AACpD,SAASC,kBAAkB;AAC3B,SAASC,aAAa;AACtB,SAASC,sBAAsB;AAE/B,MAAMC,qBAAqB,CAAyC;EAChEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,WAAyC,EACzCC,UAA0C,EACpD;IAAA,KAJUH,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,WAAyC,GAAzCA,WAAyC;IAAA,KACzCC,UAA0C,GAA1CA,UAA0C;EACnD;EAEH,MAAMC,OAAOA,CAACC,EAAU,EAAEC,IAAmC,EAA6B;IACtF,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACP,WAAW,CAACQ,OAAO,CAAC,MAAM,CAAC;IAC5D,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOnB,MAAM,CAACqB,IAAI,CAAC,IAAIZ,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMa,SAAS,GAAG,MAAM,IAAI,CAACR,WAAW,CAACE,OAAO,CAACC,EAAE,CAAC;IAEpD,IAAIK,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;MACpB,OAAOD,SAAS;IACpB;IAEA,MAAME,QAAQ,GAAGF,SAAS,CAACG,KAAK;IAEhC,MAAML,OAAO,GAAG,MAAM,IAAI,CAACR,WAAW,CAACQ,OAAO,CAAC,MAAM,EAAEI,QAAQ,CAAC;IAChE,IAAI,CAACJ,OAAO,EAAE;MACV,OAAOpB,MAAM,CAACqB,IAAI,CAAC,IAAIZ,sBAAsB,CAAC,CAAC,CAAC;IACpD;;IAEA;IACA,MAAMiB,WAAW,GAAG,IAAIrB,qBAAqB,CAAC;MAC1CmB,QAAQ;MACRG,KAAK,EAAE;QAAEV,EAAE;QAAEC;MAAK;IACtB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACL,cAAc,CAACe,OAAO,CAACF,WAAW,CAAC;;IAE9C;IACA,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACd,UAAU,CAACC,OAAO,CAACC,EAAE,EAAEC,IAAI,CAAC;IAEtD,IAAIW,MAAM,CAACN,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOM,MAAM;IACjB;;IAEA;IACA,MAAMC,UAAU,GAAG,IAAIxB,oBAAoB,CAAC;MACxCkB,QAAQ;MACRG,KAAK,EAAE;QAAEV,EAAE;QAAEC;MAAK,CAAC;MACnBa,IAAI,EAAEF,MAAM,CAACJ;IACjB,CAAC,CAAC;IAEF,MAAM,IAAI,CAACZ,cAAc,CAACe,OAAO,CAACE,UAAU,CAAC;IAE7C,OAAO9B,MAAM,CAACgC,EAAE,CAACH,MAAM,CAACJ,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMvB,iBAAiB,GAAGC,kBAAkB,CAAC8B,oBAAoB,CAAC;EACrEC,cAAc,EAAExB,qBAAqB;EACrCyB,YAAY,EAAE,CACV3B,aAAa,CAAC4B,WAAW,EACzBnC,cAAc,EACdM,kBAAkB,EAClBH,oBAAoB;AAE5B,CAAC,CAAC","ignoreList":[]}
|