@webiny/api-website-builder 0.0.0-unstable.df7a8bb475 → 0.0.0-unstable.e2758ee1cf
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/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 +2 -1
- package/features/pages/CreatePage/abstractions.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 +2 -1
- package/features/pages/CreatePageRevisionFrom/abstractions.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 +2 -1
- package/features/pages/DeletePage/abstractions.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 +2 -1
- package/features/pages/DuplicatePage/abstractions.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 +2 -1
- package/features/pages/MovePage/abstractions.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 +2 -1
- package/features/pages/PublishPage/abstractions.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 +2 -1
- package/features/pages/UnpublishPage/abstractions.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 +5 -5
- package/features/pages/UpdatePage/abstractions.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 +2 -1
- package/features/redirects/CreateRedirect/abstractions.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 +2 -1
- package/features/redirects/DeleteRedirect/abstractions.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/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 +2 -1
- package/features/redirects/MoveRedirect/abstractions.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 +2 -1
- package/features/redirects/UpdateRedirect/abstractions.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
|
@@ -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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","MovePageRepository","MovePageUseCase","PageBeforeMoveHandler","PageAfterMoveHandler"],"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 {
|
|
1
|
+
{"version":3,"names":["createAbstraction","MovePageRepository","MovePageUseCase","PageBeforeMoveHandler","PageAfterMoveHandler"],"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 PageBeforeMoveHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeMovePayload>>\n>(\"Wb/PageBeforeMoveHandler\");\n\nexport namespace PageBeforeMoveHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeMovePayload>>;\n export type Event = DomainEvent<PageBeforeMovePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterMoveHandler =\n createAbstraction<IEventHandler<DomainEvent<PageAfterMovePayload>>>(\"Wb/PageAfterMoveHandler\");\n\nexport namespace PageAfterMoveHandler {\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,qBAAqB,GAAGH,iBAAiB,CAEpD,0BAA0B,CAAC;AAQ7B,OAAO,MAAMI,oBAAoB,GAC7BJ,iBAAiB,CAAmD,yBAAyB,CAAC","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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","PublishPageRepository","PublishPageUseCase","PageBeforePublishHandler","PageAfterPublishHandler"],"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 {
|
|
1
|
+
{"version":3,"names":["createAbstraction","PublishPageRepository","PublishPageUseCase","PageBeforePublishHandler","PageAfterPublishHandler"],"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 PageBeforePublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforePublishPayload>>\n>(\"Wb/PageBeforePublishHandler\");\n\nexport namespace PageBeforePublishHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforePublishPayload>>;\n export type Event = DomainEvent<PageBeforePublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterPublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterPublishPayload>>\n>(\"Wb/PageAfterPublishHandler\");\n\nexport namespace PageAfterPublishHandler {\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,wBAAwB,GAAGH,iBAAiB,CAEvD,6BAA6B,CAAC;AAQhC,OAAO,MAAMI,uBAAuB,GAAGJ,iBAAiB,CAEtD,4BAA4B,CAAC","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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","UnpublishPageRepository","UnpublishPageUseCase","PageBeforeUnpublishHandler","PageAfterUnpublishHandler"],"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 {
|
|
1
|
+
{"version":3,"names":["createAbstraction","UnpublishPageRepository","UnpublishPageUseCase","PageBeforeUnpublishHandler","PageAfterUnpublishHandler"],"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 PageBeforeUnpublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>\n>(\"Wb/PageBeforeUnpublishHandler\");\n\nexport namespace PageBeforeUnpublishHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeUnpublishPayload>>;\n export type Event = DomainEvent<PageBeforeUnpublishPayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterUnpublishHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterUnpublishPayload>>\n>(\"Wb/PageAfterUnpublishHandler\");\n\nexport namespace PageAfterUnpublishHandler {\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,0BAA0B,GAAGH,iBAAiB,CAEzD,+BAA+B,CAAC;AAQlC,OAAO,MAAMI,yBAAyB,GAAGJ,iBAAiB,CAExD,8BAA8B,CAAC","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":[]}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { type Result } from "@webiny/feature/api";
|
|
2
|
-
import type { IEventHandler } from "@webiny/api-core/features/EventPublisher";
|
|
3
|
-
import type { DomainEvent } from "@webiny/api-core/features/EventPublisher";
|
|
2
|
+
import type { DomainEvent, IEventHandler } from "@webiny/api-core/features/EventPublisher";
|
|
4
3
|
import type { WbPage } from "../../../domain/page/abstractions.js";
|
|
5
4
|
import type { WbLocation } from "../../../domain/shared/abstractions.js";
|
|
6
|
-
import type {
|
|
7
|
-
import {
|
|
5
|
+
import type { ICmsEntrySystem } from "@webiny/api-headless-cms/types/index.js";
|
|
6
|
+
import { PageNotAuthorizedError, PageNotFoundError, PagePersistenceError, PageValidationError } from "../../../domain/page/errors.js";
|
|
8
7
|
export interface IUpdateWbPageData {
|
|
9
8
|
location?: WbLocation;
|
|
10
9
|
properties?: Record<string, any>;
|
|
11
10
|
metadata?: Record<string, any>;
|
|
12
11
|
bindings?: Record<string, any>;
|
|
13
12
|
elements?: Record<string, any>;
|
|
14
|
-
|
|
13
|
+
system?: ICmsEntrySystem;
|
|
15
14
|
}
|
|
16
15
|
export interface IUpdatePageRepository {
|
|
17
16
|
execute(id: string, data: IUpdateWbPageData): Promise<Result<WbPage, RepositoryError>>;
|
|
@@ -33,6 +32,7 @@ export interface IUpdatePageUseCase {
|
|
|
33
32
|
execute(id: string, data: IUpdateWbPageData): Promise<Result<WbPage, UseCaseError>>;
|
|
34
33
|
}
|
|
35
34
|
export interface IUpdatePageUseCaseErrors {
|
|
35
|
+
notAuthorized: PageNotAuthorizedError;
|
|
36
36
|
validation: PageValidationError;
|
|
37
37
|
notFound: PageNotFoundError;
|
|
38
38
|
persistence: PagePersistenceError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","UpdatePageRepository","UpdatePageUseCase","PageBeforeUpdateHandler","PageAfterUpdateHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type {
|
|
1
|
+
{"version":3,"names":["createAbstraction","UpdatePageRepository","UpdatePageUseCase","PageBeforeUpdateHandler","PageAfterUpdateHandler"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, type Result } from \"@webiny/feature/api\";\nimport type { DomainEvent, IEventHandler } from \"@webiny/api-core/features/EventPublisher\";\nimport type { WbPage } from \"~/domain/page/abstractions.js\";\nimport type { WbLocation } from \"~/domain/shared/abstractions.js\";\nimport type { ICmsEntrySystem } from \"@webiny/api-headless-cms/types/index.js\";\nimport {\n PageNotAuthorizedError,\n PageNotFoundError,\n PagePersistenceError,\n PageValidationError\n} from \"~/domain/page/errors.js\";\n\n// ============================================================================\n// Type Definitions\n// ============================================================================\n\nexport interface IUpdateWbPageData {\n location?: WbLocation;\n properties?: Record<string, any>;\n metadata?: Record<string, any>;\n bindings?: Record<string, any>;\n elements?: Record<string, any>;\n system?: ICmsEntrySystem;\n}\n\n// ============================================================================\n// Repository Abstraction\n// ============================================================================\n\nexport interface IUpdatePageRepository {\n execute(id: string, data: IUpdateWbPageData): Promise<Result<WbPage, RepositoryError>>;\n}\n\nexport interface IUpdatePageRepositoryErrors {\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype RepositoryError = IUpdatePageRepositoryErrors[keyof IUpdatePageRepositoryErrors];\n\nexport const UpdatePageRepository =\n createAbstraction<IUpdatePageRepository>(\"Wb/UpdatePageRepository\");\n\nexport namespace UpdatePageRepository {\n export type Interface = IUpdatePageRepository;\n export type UpdateData = IUpdateWbPageData;\n export type Return = Promise<Result<WbPage, RepositoryError>>;\n export type Error = RepositoryError;\n}\n\n// ============================================================================\n// Use Case Abstraction\n// ============================================================================\n\nexport interface IUpdatePageUseCase {\n execute(id: string, data: IUpdateWbPageData): Promise<Result<WbPage, UseCaseError>>;\n}\n\nexport interface IUpdatePageUseCaseErrors {\n notAuthorized: PageNotAuthorizedError;\n validation: PageValidationError;\n notFound: PageNotFoundError;\n persistence: PagePersistenceError;\n}\n\ntype UseCaseError = IUpdatePageUseCaseErrors[keyof IUpdatePageUseCaseErrors];\n\nexport const UpdatePageUseCase = createAbstraction<IUpdatePageUseCase>(\"Wb/UpdatePageUseCase\");\n\nexport namespace UpdatePageUseCase {\n export type Interface = IUpdatePageUseCase;\n export type UpdateData = IUpdateWbPageData;\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 PageBeforeUpdatePayload {\n original: WbPage;\n input: {\n id: string;\n data: IUpdateWbPageData;\n };\n}\n\nexport interface PageAfterUpdatePayload {\n original: WbPage;\n input: {\n id: string;\n data: IUpdateWbPageData;\n };\n page: WbPage;\n}\n\n// ============================================================================\n// Event Handler Abstractions\n// ============================================================================\n\nexport const PageBeforeUpdateHandler = createAbstraction<\n IEventHandler<DomainEvent<PageBeforeUpdatePayload>>\n>(\"Wb/PageBeforeUpdateHandler\");\n\nexport namespace PageBeforeUpdateHandler {\n export type Interface = IEventHandler<DomainEvent<PageBeforeUpdatePayload>>;\n export type Event = DomainEvent<PageBeforeUpdatePayload>;\n export type Page = WbPage;\n}\n\nexport const PageAfterUpdateHandler = createAbstraction<\n IEventHandler<DomainEvent<PageAfterUpdatePayload>>\n>(\"Wb/PageAfterUpdateHandler\");\n\nexport namespace PageAfterUpdateHandler {\n export type Interface = IEventHandler<DomainEvent<PageAfterUpdatePayload>>;\n export type Event = DomainEvent<PageAfterUpdatePayload>;\n export type Page = WbPage;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAqB,qBAAqB;;AAYpE;AACA;AACA;;AAWA;AACA;AACA;;AAcA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,yBAAyB,CAAC;;AASvE;AACA;AACA;;AAeA,OAAO,MAAME,iBAAiB,GAAGF,iBAAiB,CAAqB,sBAAsB,CAAC;;AAU9F;AACA;AACA;;AAmBA;AACA;AACA;;AAEA,OAAO,MAAMG,uBAAuB,GAAGH,iBAAiB,CAEtD,4BAA4B,CAAC;AAQ/B,OAAO,MAAMI,sBAAsB,GAAGJ,iBAAiB,CAErD,2BAA2B,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { EventPublisher as EventPublisherAbstraction } from "@webiny/api-core/features/EventPublisher";
|
|
2
2
|
import { CreateRedirectUseCase as UseCaseAbstraction, CreateRedirectRepository } from "./abstractions.js";
|
|
3
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
3
4
|
declare class CreateRedirectUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
5
|
+
private permissions;
|
|
4
6
|
private eventPublisher;
|
|
5
7
|
private repository;
|
|
6
|
-
constructor(eventPublisher: EventPublisherAbstraction.Interface, repository: CreateRedirectRepository.Interface);
|
|
8
|
+
constructor(permissions: WbPermissions.Interface, eventPublisher: EventPublisherAbstraction.Interface, repository: CreateRedirectRepository.Interface);
|
|
7
9
|
execute(data: UseCaseAbstraction.Params): UseCaseAbstraction.Return;
|
|
8
10
|
}
|
|
9
11
|
export declare const CreateRedirectUseCase: import("@webiny/di").Implementation<typeof CreateRedirectUseCaseImpl>;
|
|
@@ -2,12 +2,20 @@ import { Result, createImplementation } from "@webiny/feature/api";
|
|
|
2
2
|
import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
|
|
3
3
|
import { CreateRedirectUseCase as UseCaseAbstraction, CreateRedirectRepository } from "./abstractions.js";
|
|
4
4
|
import { RedirectBeforeCreateEvent, RedirectAfterCreateEvent } from "./events.js";
|
|
5
|
+
import { WbPermissions } from "../../../domain/permissions.js";
|
|
6
|
+
import { RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
|
|
5
7
|
class CreateRedirectUseCaseImpl {
|
|
6
|
-
constructor(eventPublisher, repository) {
|
|
8
|
+
constructor(permissions, eventPublisher, repository) {
|
|
9
|
+
this.permissions = permissions;
|
|
7
10
|
this.eventPublisher = eventPublisher;
|
|
8
11
|
this.repository = repository;
|
|
9
12
|
}
|
|
10
13
|
async execute(data) {
|
|
14
|
+
const hasPermission = await this.permissions.canCreate("redirect");
|
|
15
|
+
if (!hasPermission) {
|
|
16
|
+
return Result.fail(new RedirectNotAuthorizedError());
|
|
17
|
+
}
|
|
18
|
+
|
|
11
19
|
// Publish before create event
|
|
12
20
|
const beforeCreateEvent = new RedirectBeforeCreateEvent({
|
|
13
21
|
input: data
|
|
@@ -31,7 +39,7 @@ class CreateRedirectUseCaseImpl {
|
|
|
31
39
|
export const CreateRedirectUseCase = createImplementation({
|
|
32
40
|
abstraction: UseCaseAbstraction,
|
|
33
41
|
implementation: CreateRedirectUseCaseImpl,
|
|
34
|
-
dependencies: [EventPublisher, CreateRedirectRepository]
|
|
42
|
+
dependencies: [WbPermissions.Abstraction, EventPublisher, CreateRedirectRepository]
|
|
35
43
|
});
|
|
36
44
|
|
|
37
45
|
//# sourceMappingURL=CreateRedirectUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Result","createImplementation","EventPublisher","CreateRedirectUseCase","UseCaseAbstraction","CreateRedirectRepository","RedirectBeforeCreateEvent","RedirectAfterCreateEvent","CreateRedirectUseCaseImpl","constructor","eventPublisher","repository","execute","data","beforeCreateEvent","input","publish","result","isFail","afterCreateEvent","redirect","value","ok","abstraction","implementation","dependencies"],"sources":["CreateRedirectUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n CreateRedirectUseCase as UseCaseAbstraction,\n CreateRedirectRepository\n} from \"./abstractions.js\";\nimport { RedirectBeforeCreateEvent, RedirectAfterCreateEvent } from \"./events.js\";\n\nclass CreateRedirectUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private eventPublisher: EventPublisherAbstraction.Interface,\n private repository: CreateRedirectRepository.Interface\n ) {}\n\n async execute(data: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n // Publish before create event\n const beforeCreateEvent = new RedirectBeforeCreateEvent({ input: data });\n await this.eventPublisher.publish(beforeCreateEvent);\n\n // Execute the create operation\n const result = await this.repository.execute(data);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after create event\n const afterCreateEvent = new RedirectAfterCreateEvent({ redirect: result.value });\n await this.eventPublisher.publish(afterCreateEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const CreateRedirectUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateRedirectUseCaseImpl,\n dependencies: [EventPublisher, CreateRedirectRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,qBAAqB,IAAIC,kBAAkB,EAC3CC,wBAAwB;AAE5B,SAASC,yBAAyB,EAAEC,wBAAwB;
|
|
1
|
+
{"version":3,"names":["Result","createImplementation","EventPublisher","CreateRedirectUseCase","UseCaseAbstraction","CreateRedirectRepository","RedirectBeforeCreateEvent","RedirectAfterCreateEvent","WbPermissions","RedirectNotAuthorizedError","CreateRedirectUseCaseImpl","constructor","permissions","eventPublisher","repository","execute","data","hasPermission","canCreate","fail","beforeCreateEvent","input","publish","result","isFail","afterCreateEvent","redirect","value","ok","abstraction","implementation","dependencies","Abstraction"],"sources":["CreateRedirectUseCase.ts"],"sourcesContent":["import { Result, createImplementation } from \"@webiny/feature/api\";\nimport {\n EventPublisher,\n EventPublisher as EventPublisherAbstraction\n} from \"@webiny/api-core/features/EventPublisher\";\nimport {\n CreateRedirectUseCase as UseCaseAbstraction,\n CreateRedirectRepository\n} from \"./abstractions.js\";\nimport { RedirectBeforeCreateEvent, RedirectAfterCreateEvent } from \"./events.js\";\nimport { WbPermissions } from \"~/domain/permissions.js\";\nimport { RedirectNotAuthorizedError } from \"~/domain/redirect/errors.js\";\n\nclass CreateRedirectUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private permissions: WbPermissions.Interface,\n private eventPublisher: EventPublisherAbstraction.Interface,\n private repository: CreateRedirectRepository.Interface\n ) {}\n\n async execute(data: UseCaseAbstraction.Params): UseCaseAbstraction.Return {\n const hasPermission = await this.permissions.canCreate(\"redirect\");\n if (!hasPermission) {\n return Result.fail(new RedirectNotAuthorizedError());\n }\n\n // Publish before create event\n const beforeCreateEvent = new RedirectBeforeCreateEvent({ input: data });\n await this.eventPublisher.publish(beforeCreateEvent);\n\n // Execute the create operation\n const result = await this.repository.execute(data);\n\n if (result.isFail()) {\n return result;\n }\n\n // Publish after create event\n const afterCreateEvent = new RedirectAfterCreateEvent({ redirect: result.value });\n await this.eventPublisher.publish(afterCreateEvent);\n\n return Result.ok(result.value);\n }\n}\n\nexport const CreateRedirectUseCase = createImplementation({\n abstraction: UseCaseAbstraction,\n implementation: CreateRedirectUseCaseImpl,\n dependencies: [WbPermissions.Abstraction, EventPublisher, CreateRedirectRepository]\n});\n"],"mappings":"AAAA,SAASA,MAAM,EAAEC,oBAAoB,QAAQ,qBAAqB;AAClE,SACIC,cAAc,QAEX,0CAA0C;AACjD,SACIC,qBAAqB,IAAIC,kBAAkB,EAC3CC,wBAAwB;AAE5B,SAASC,yBAAyB,EAAEC,wBAAwB;AAC5D,SAASC,aAAa;AACtB,SAASC,0BAA0B;AAEnC,MAAMC,yBAAyB,CAAyC;EACpEC,WAAWA,CACCC,WAAoC,EACpCC,cAAmD,EACnDC,UAA8C,EACxD;IAAA,KAHUF,WAAoC,GAApCA,WAAoC;IAAA,KACpCC,cAAmD,GAAnDA,cAAmD;IAAA,KACnDC,UAA8C,GAA9CA,UAA8C;EACvD;EAEH,MAAMC,OAAOA,CAACC,IAA+B,EAA6B;IACtE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACL,WAAW,CAACM,SAAS,CAAC,UAAU,CAAC;IAClE,IAAI,CAACD,aAAa,EAAE;MAChB,OAAOjB,MAAM,CAACmB,IAAI,CAAC,IAAIV,0BAA0B,CAAC,CAAC,CAAC;IACxD;;IAEA;IACA,MAAMW,iBAAiB,GAAG,IAAId,yBAAyB,CAAC;MAAEe,KAAK,EAAEL;IAAK,CAAC,CAAC;IACxE,MAAM,IAAI,CAACH,cAAc,CAACS,OAAO,CAACF,iBAAiB,CAAC;;IAEpD;IACA,MAAMG,MAAM,GAAG,MAAM,IAAI,CAACT,UAAU,CAACC,OAAO,CAACC,IAAI,CAAC;IAElD,IAAIO,MAAM,CAACC,MAAM,CAAC,CAAC,EAAE;MACjB,OAAOD,MAAM;IACjB;;IAEA;IACA,MAAME,gBAAgB,GAAG,IAAIlB,wBAAwB,CAAC;MAAEmB,QAAQ,EAAEH,MAAM,CAACI;IAAM,CAAC,CAAC;IACjF,MAAM,IAAI,CAACd,cAAc,CAACS,OAAO,CAACG,gBAAgB,CAAC;IAEnD,OAAOzB,MAAM,CAAC4B,EAAE,CAACL,MAAM,CAACI,KAAK,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMxB,qBAAqB,GAAGF,oBAAoB,CAAC;EACtD4B,WAAW,EAAEzB,kBAAkB;EAC/B0B,cAAc,EAAEpB,yBAAyB;EACzCqB,YAAY,EAAE,CAACvB,aAAa,CAACwB,WAAW,EAAE9B,cAAc,EAAEG,wBAAwB;AACtF,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 { WbRedirect } from "../../../domain/redirect/abstractions.js";
|
|
5
|
-
import { RedirectPersistenceError, RedirectValidationError } from "../../../domain/redirect/errors.js";
|
|
5
|
+
import { RedirectPersistenceError, RedirectValidationError, RedirectNotAuthorizedError } from "../../../domain/redirect/errors.js";
|
|
6
6
|
export type ICreateWbRedirectData = Pick<WbRedirect, "redirectFrom" | "redirectTo" | "redirectType" | "isEnabled" | "location">;
|
|
7
7
|
export interface ICreateRedirectRepository {
|
|
8
8
|
execute(data: ICreateWbRedirectData): Promise<Result<WbRedirect, RepositoryError>>;
|
|
@@ -24,6 +24,7 @@ export interface ICreateRedirectUseCase {
|
|
|
24
24
|
execute(data: ICreateWbRedirectData): Promise<Result<WbRedirect, UseCaseError>>;
|
|
25
25
|
}
|
|
26
26
|
export interface ICreateRedirectUseCaseErrors {
|
|
27
|
+
notAuthorized: RedirectNotAuthorizedError;
|
|
27
28
|
validation: RedirectValidationError;
|
|
28
29
|
persistence: RedirectPersistenceError;
|
|
29
30
|
}
|