@webiny/tenant-manager 6.3.0 → 6.4.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/TenantManager.js +8 -9
- package/TenantManager.js.map +1 -1
- package/admin/CurrentTenant/CurrentTenant.js +15 -24
- package/admin/CurrentTenant/CurrentTenant.js.map +1 -1
- package/admin/CurrentTenant/CurrentTenantGateway.js +18 -19
- package/admin/CurrentTenant/CurrentTenantGateway.js.map +1 -1
- package/admin/CurrentTenant/CurrentTenantPresenter.js +26 -23
- package/admin/CurrentTenant/CurrentTenantPresenter.js.map +1 -1
- package/admin/CurrentTenant/CurrentTenantRepository.js +30 -29
- package/admin/CurrentTenant/CurrentTenantRepository.js.map +1 -1
- package/admin/CurrentTenant/abstractions.js +4 -12
- package/admin/CurrentTenant/abstractions.js.map +1 -1
- package/admin/CurrentTenant/feature.js +15 -14
- package/admin/CurrentTenant/feature.js.map +1 -1
- package/admin/CurrentTenant/useCurrentTenant.js +11 -16
- package/admin/CurrentTenant/useCurrentTenant.js.map +1 -1
- package/admin/CurrentTenantProvider.js +5 -8
- package/admin/CurrentTenantProvider.js.map +1 -1
- package/admin/DisableTenant/DisableTenantGateway.js +21 -22
- package/admin/DisableTenant/DisableTenantGateway.js.map +1 -1
- package/admin/DisableTenant/DisableTenantRepository.js +13 -10
- package/admin/DisableTenant/DisableTenantRepository.js.map +1 -1
- package/admin/DisableTenant/DisableTenantUseCase.js +13 -10
- package/admin/DisableTenant/DisableTenantUseCase.js.map +1 -1
- package/admin/DisableTenant/abstractions.js +4 -12
- package/admin/DisableTenant/abstractions.js.map +1 -1
- package/admin/DisableTenant/feature.js +15 -14
- package/admin/DisableTenant/feature.js.map +1 -1
- package/admin/DisableTenant/index.js +0 -2
- package/admin/DisableTenant/useDisableTenant.js +20 -20
- package/admin/DisableTenant/useDisableTenant.js.map +1 -1
- package/admin/EnableTenant/EnableTenantGateway.js +21 -22
- package/admin/EnableTenant/EnableTenantGateway.js.map +1 -1
- package/admin/EnableTenant/EnableTenantRepository.js +13 -10
- package/admin/EnableTenant/EnableTenantRepository.js.map +1 -1
- package/admin/EnableTenant/EnableTenantUseCase.js +13 -10
- package/admin/EnableTenant/EnableTenantUseCase.js.map +1 -1
- package/admin/EnableTenant/abstractions.js +4 -12
- package/admin/EnableTenant/abstractions.js.map +1 -1
- package/admin/EnableTenant/feature.js +15 -14
- package/admin/EnableTenant/feature.js.map +1 -1
- package/admin/EnableTenant/index.js +0 -2
- package/admin/EnableTenant/useEnableTenant.js +19 -18
- package/admin/EnableTenant/useEnableTenant.js.map +1 -1
- package/admin/Extension.js +32 -36
- package/admin/Extension.js.map +1 -1
- package/admin/IsRootTenant.js +14 -32
- package/admin/IsRootTenant.js.map +1 -1
- package/admin/SecurityPermission.js +11 -14
- package/admin/SecurityPermission.js.map +1 -1
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js +36 -37
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js.map +1 -1
- package/admin/TenantEntryList/EnableTenant/EnableTenant.js +10 -14
- package/admin/TenantEntryList/EnableTenant/EnableTenant.js.map +1 -1
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js +34 -33
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js.map +1 -1
- package/admin/TenantEntryList/FolderNameCell.js +19 -24
- package/admin/TenantEntryList/FolderNameCell.js.map +1 -1
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js +10 -14
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js.map +1 -1
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js +3 -2
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js.map +1 -1
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js +34 -38
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js.map +1 -1
- package/admin/TenantEntryList/ManageTenant.js +15 -16
- package/admin/TenantEntryList/ManageTenant.js.map +1 -1
- package/admin/TenantEntryList/TenantCell.js +15 -30
- package/admin/TenantEntryList/TenantCell.js.map +1 -1
- package/admin/TenantEntryList/TenantNameCell.js +35 -45
- package/admin/TenantEntryList/TenantNameCell.js.map +1 -1
- package/admin/TenantEntryList.js +43 -60
- package/admin/TenantEntryList.js.map +1 -1
- package/admin/TenantSelector.js +31 -35
- package/admin/TenantSelector.js.map +1 -1
- package/admin/domain/permissionsSchema.js +4 -3
- package/admin/domain/permissionsSchema.js.map +1 -1
- package/admin/features/permissions/abstractions.js +2 -1
- package/admin/features/permissions/abstractions.js.map +1 -1
- package/admin/features/permissions/feature.js +2 -1
- package/admin/features/permissions/feature.js.map +1 -1
- package/admin/types.js +0 -3
- package/api/Extension.js +20 -23
- package/api/Extension.js.map +1 -1
- package/api/domain/TenantId.js +5 -7
- package/api/domain/TenantId.js.map +1 -1
- package/api/domain/TenantModel.js +59 -37
- package/api/domain/TenantModel.js.map +1 -1
- package/api/domain/TenantModelExtension.js +2 -2
- package/api/domain/TenantModelExtension.js.map +1 -1
- package/api/domain/errors.js +49 -54
- package/api/domain/errors.js.map +1 -1
- package/api/features/AddCmsPermissions/AddCmsPermissions.js +40 -31
- package/api/features/AddCmsPermissions/AddCmsPermissions.js.map +1 -1
- package/api/features/AddCmsPermissions/feature.js +6 -5
- package/api/features/AddCmsPermissions/feature.js.map +1 -1
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js +67 -85
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js.map +1 -1
- package/api/features/CreateAndInstallTenant/abstractions.js +2 -6
- package/api/features/CreateAndInstallTenant/abstractions.js.map +1 -1
- package/api/features/CreateAndInstallTenant/feature.js +6 -6
- package/api/features/CreateAndInstallTenant/feature.js.map +1 -1
- package/api/features/CreateTenant/CreateTenantRepository.js +33 -38
- package/api/features/CreateTenant/CreateTenantRepository.js.map +1 -1
- package/api/features/CreateTenant/CreateTenantUseCase.js +29 -32
- package/api/features/CreateTenant/CreateTenantUseCase.js.map +1 -1
- package/api/features/CreateTenant/abstractions.js +3 -8
- package/api/features/CreateTenant/abstractions.js.map +1 -1
- package/api/features/CreateTenant/feature.js +7 -9
- package/api/features/CreateTenant/feature.js.map +1 -1
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js +17 -27
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js.map +1 -1
- package/api/features/DeleteTenantOnEntryDelete/feature.js +6 -6
- package/api/features/DeleteTenantOnEntryDelete/feature.js.map +1 -1
- package/api/features/DisableTenant/DisableTenantUseCase.js +41 -53
- package/api/features/DisableTenant/DisableTenantUseCase.js.map +1 -1
- package/api/features/DisableTenant/abstractions.js +2 -1
- package/api/features/DisableTenant/abstractions.js.map +1 -1
- package/api/features/DisableTenant/events.js +17 -12
- package/api/features/DisableTenant/events.js.map +1 -1
- package/api/features/DisableTenant/feature.js +6 -6
- package/api/features/DisableTenant/feature.js.map +1 -1
- package/api/features/EnableTenant/EnableTenantUseCase.js +43 -55
- package/api/features/EnableTenant/EnableTenantUseCase.js.map +1 -1
- package/api/features/EnableTenant/abstractions.js +2 -1
- package/api/features/EnableTenant/abstractions.js.map +1 -1
- package/api/features/EnableTenant/events.js +17 -12
- package/api/features/EnableTenant/events.js.map +1 -1
- package/api/features/EnableTenant/feature.js +6 -6
- package/api/features/EnableTenant/feature.js.map +1 -1
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js +21 -24
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js.map +1 -1
- package/api/features/GetCurrentTenant/abstractions.js +2 -7
- package/api/features/GetCurrentTenant/abstractions.js.map +1 -1
- package/api/features/GetCurrentTenant/feature.js +6 -6
- package/api/features/GetCurrentTenant/feature.js.map +1 -1
- package/api/features/GetTenantById/GetTenantByIdRepository.js +31 -36
- package/api/features/GetTenantById/GetTenantByIdRepository.js.map +1 -1
- package/api/features/GetTenantById/GetTenantByIdUseCase.js +15 -19
- package/api/features/GetTenantById/GetTenantByIdUseCase.js.map +1 -1
- package/api/features/GetTenantById/abstractions.js +3 -12
- package/api/features/GetTenantById/abstractions.js.map +1 -1
- package/api/features/GetTenantById/feature.js +7 -9
- package/api/features/GetTenantById/feature.js.map +1 -1
- package/api/features/UpdateTenant/UpdateTenantRepository.js +40 -47
- package/api/features/UpdateTenant/UpdateTenantRepository.js.map +1 -1
- package/api/features/UpdateTenant/UpdateTenantUseCase.js +15 -15
- package/api/features/UpdateTenant/UpdateTenantUseCase.js.map +1 -1
- package/api/features/UpdateTenant/abstractions.js +3 -12
- package/api/features/UpdateTenant/abstractions.js.map +1 -1
- package/api/features/UpdateTenant/feature.js +7 -9
- package/api/features/UpdateTenant/feature.js.map +1 -1
- package/api/graphql/CreateTenantSchema.js +53 -55
- package/api/graphql/CreateTenantSchema.js.map +1 -1
- package/api/graphql/DisableTenantSchema.js +20 -24
- package/api/graphql/DisableTenantSchema.js.map +1 -1
- package/api/graphql/EnableTenantSchema.js +20 -24
- package/api/graphql/EnableTenantSchema.js.map +1 -1
- package/api/graphql/GetCurrentTenantSchema.js +24 -28
- package/api/graphql/GetCurrentTenantSchema.js.map +1 -1
- package/api/graphql/InstallTenantSchema.js +26 -33
- package/api/graphql/InstallTenantSchema.js.map +1 -1
- package/exports/admin/tenancy.js +1 -5
- package/exports/api/tenant-manager.js +0 -2
- package/index.js +0 -2
- package/package.json +16 -16
- package/shared/Tenant.js +23 -22
- package/shared/Tenant.js.map +1 -1
- package/shared/constants.js +2 -1
- package/shared/constants.js.map +1 -1
- package/admin/DisableTenant/index.js.map +0 -1
- package/admin/EnableTenant/index.js.map +0 -1
- package/admin/types.js.map +0 -1
- package/exports/admin/tenancy.js.map +0 -1
- package/exports/api/tenant-manager.js.map +0 -1
- package/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/DisableTenant/DisableTenantUseCase.js","sources":["../../../../src/api/features/DisableTenant/DisableTenantUseCase.ts"],"sourcesContent":["import { DisableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { UpdateTenantUseCase as ApiCoreUpdateTenant } from \"@webiny/api-core/features/tenancy/UpdateTenant\";\nimport { UpdateTenantUseCase as TenantManagerUpdateTenant } from \"../UpdateTenant/abstractions.js\";\nimport { GetTenantByIdUseCase } from \"../GetTenantById/abstractions.js\";\nimport { TenantBeforeDisableEvent, TenantAfterDisableEvent } from \"./events.js\";\nimport { TenantPersistenceError } from \"../../domain/errors.js\";\n\nclass DisableTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private coreUpdateTenant: ApiCoreUpdateTenant.Interface,\n private tmUpdateTenant: TenantManagerUpdateTenant.Interface,\n private tmGetTenantById: GetTenantByIdUseCase.Interface\n ) {}\n\n async execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Authorization checks\n if (!this.identityContext.getPermission(\"tm.tenant\")) {\n return Result.fail(new NotAuthorizedError());\n }\n\n // Get current tenant to verify it exists\n const getTenantResult = await this.tmGetTenantById.execute(tenantId);\n if (getTenantResult.isFail()) {\n return Result.fail(getTenantResult.error);\n }\n\n const tenant = getTenantResult.value;\n\n // Publish before event\n await this.eventPublisher.publish(new TenantBeforeDisableEvent({ tenant }));\n\n // Update api-core tenant first\n const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {\n status: \"disabled\"\n });\n if (apiCoreResult.isFail()) {\n return Result.fail(\n new TenantPersistenceError(\n new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)\n )\n );\n }\n\n // Update tenant-manager CMS entry\n const updateResult = await this.tmUpdateTenant.execute(tenantId, {\n status: \"disabled\"\n });\n\n if (updateResult.isFail()) {\n return Result.fail(updateResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new TenantAfterDisableEvent({ tenant: updateResult.value })\n );\n\n return Result.ok();\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: DisableTenantUseCase,\n dependencies: [\n IdentityContext,\n EventPublisher,\n ApiCoreUpdateTenant,\n TenantManagerUpdateTenant,\n GetTenantByIdUseCase\n ]\n});\n"],"names":["DisableTenantUseCase","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","tenantId","Result","NotAuthorizedError","getTenantResult","tenant","TenantBeforeDisableEvent","apiCoreResult","TenantPersistenceError","Error","updateResult","TenantAfterDisableEvent","UseCaseAbstraction","IdentityContext","EventPublisher","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase"],"mappings":";;;;;;;;;;AAWA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,gBAA+C,EAC/CC,cAAmD,EACnDC,eAA+C,CACzD;aALUJ,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,gBAAgB,GAAhBA;aACAC,cAAc,GAAdA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,QAAQC,QAAgB,EAAmD;QAE7E,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,cACpC,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMC,kBAAkB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACH;QAC3D,IAAIG,gBAAgB,MAAM,IACtB,OAAOF,OAAO,IAAI,CAACE,gBAAgB,KAAK;QAG5C,MAAMC,SAASD,gBAAgB,KAAK;QAGpC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIE,yBAAyB;YAAED;QAAO;QAGxE,MAAME,gBAAgB,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAACN,UAAU;YAChE,QAAQ;QACZ;QACA,IAAIM,cAAc,MAAM,IACpB,OAAOL,OAAO,IAAI,CACd,IAAIM,uBACA,IAAIC,MAAM,CAAC,kCAAkC,EAAEF,cAAc,KAAK,EAAE;QAMhF,MAAMG,eAAe,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAACT,UAAU;YAC7D,QAAQ;QACZ;QAEA,IAAIS,aAAa,MAAM,IACnB,OAAOR,OAAO,IAAI,CAACQ,aAAa,KAAK;QAIzC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,wBAAwB;YAAE,QAAQD,aAAa,KAAK;QAAC;QAG7D,OAAOR,OAAO,EAAE;IACpB;AACJ;AAEA,2CAAeU,qBAAAA,oBAAuC,CAAC;IACnD,gBAAgBjB;IAChB,cAAc;QACVkB;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
2
|
+
const DisableTenantUseCase = createAbstraction("TenantManager/DisableTenantUseCase");
|
|
3
|
+
export { DisableTenantUseCase };
|
|
3
4
|
|
|
4
5
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/DisableTenant/abstractions.js","sources":["../../../../src/api/features/DisableTenant/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport {\n TenantModelNotFoundError,\n TenantNotFoundError,\n TenantPersistenceError\n} from \"../../domain/errors.js\";\n\nexport interface IDisableTenantUseCase {\n execute(tenantId: string): Promise<Result<void, DisableTenantUseCase.Error>>;\n}\n\nexport interface IDisableTenantUseCaseErrors {\n notAuthorized: NotAuthorizedError;\n notFound: TenantNotFoundError;\n persistence: TenantPersistenceError;\n modelNotFound: TenantModelNotFoundError;\n}\n\ntype UseCaseError = IDisableTenantUseCaseErrors[keyof IDisableTenantUseCaseErrors];\n\nexport const DisableTenantUseCase = createAbstraction<IDisableTenantUseCase>(\n \"TenantManager/DisableTenantUseCase\"\n);\n\nexport namespace DisableTenantUseCase {\n export type Interface = IDisableTenantUseCase;\n export type Error = UseCaseError;\n}\n"],"names":["DisableTenantUseCase","createAbstraction"],"mappings":";AAsBO,MAAMA,uBAAuBC,kBAChC"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
2
|
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
class TenantBeforeDisableEvent extends DomainEvent {
|
|
4
|
+
getHandlerAbstraction() {
|
|
5
|
+
return TenantBeforeDisableEventHandler;
|
|
6
|
+
}
|
|
7
|
+
constructor(...args){
|
|
8
|
+
super(...args), this.eventType = "tenant.beforeDisable";
|
|
9
|
+
}
|
|
8
10
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const TenantBeforeDisableEventHandler = createAbstraction("TenantManager/TenantBeforeDisableEventHandler");
|
|
12
|
+
class TenantAfterDisableEvent extends DomainEvent {
|
|
13
|
+
getHandlerAbstraction() {
|
|
14
|
+
return TenantAfterDisableEventHandler;
|
|
15
|
+
}
|
|
16
|
+
constructor(...args){
|
|
17
|
+
super(...args), this.eventType = "tenant.afterDisable";
|
|
18
|
+
}
|
|
15
19
|
}
|
|
16
|
-
|
|
20
|
+
const TenantAfterDisableEventHandler = createAbstraction("TenantManager/TenantAfterDisableEventHandler");
|
|
21
|
+
export { TenantAfterDisableEvent, TenantAfterDisableEventHandler, TenantBeforeDisableEvent, TenantBeforeDisableEventHandler };
|
|
17
22
|
|
|
18
23
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/DisableTenant/events.js","sources":["../../../../src/api/features/DisableTenant/events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/shared/Tenant.js\";\n\nexport interface TenantBeforeDisablePayload {\n tenant: Tenant;\n}\n\nexport interface TenantAfterDisablePayload {\n tenant: Tenant;\n}\n\nexport class TenantBeforeDisableEvent extends DomainEvent<TenantBeforeDisablePayload> {\n eventType = \"tenant.beforeDisable\" as const;\n\n getHandlerAbstraction() {\n return TenantBeforeDisableEventHandler;\n }\n}\n\nexport const TenantBeforeDisableEventHandler = createAbstraction<\n IEventHandler<TenantBeforeDisableEvent>\n>(\"TenantManager/TenantBeforeDisableEventHandler\");\n\nexport namespace TenantBeforeDisableEventHandler {\n export type Interface = IEventHandler<TenantBeforeDisableEvent>;\n export type Event = TenantBeforeDisableEvent;\n}\n\nexport class TenantAfterDisableEvent extends DomainEvent<TenantAfterDisablePayload> {\n eventType = \"tenant.afterDisable\" as const;\n\n getHandlerAbstraction() {\n return TenantAfterDisableEventHandler;\n }\n}\n\nexport const TenantAfterDisableEventHandler = createAbstraction<\n IEventHandler<TenantAfterDisableEvent>\n>(\"TenantManager/TenantAfterDisableEventHandler\");\n\nexport namespace TenantAfterDisableEventHandler {\n export type Interface = IEventHandler<TenantAfterDisableEvent>;\n export type Event = TenantAfterDisableEvent;\n}\n"],"names":["TenantBeforeDisableEvent","DomainEvent","TenantBeforeDisableEventHandler","createAbstraction","TenantAfterDisableEvent","TenantAfterDisableEventHandler"],"mappings":";;AAaO,MAAMA,iCAAiCC;IAG1C,wBAAwB;QACpB,OAAOC;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,kCAAkCC,kBAE7C;AAOK,MAAMC,gCAAgCH;IAGzC,wBAAwB;QACpB,OAAOI;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,iCAAiCF,kBAE5C"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import DisableTenantUseCase from "./DisableTenantUseCase.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
3
|
+
const DisableTenantFeature = createFeature({
|
|
4
|
+
name: "DisableTenant",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(DisableTenantUseCase);
|
|
7
|
+
}
|
|
9
8
|
});
|
|
9
|
+
export { DisableTenantFeature };
|
|
10
10
|
|
|
11
11
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/DisableTenant/feature.js","sources":["../../../../src/api/features/DisableTenant/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport DisableTenantUseCase from \"./DisableTenantUseCase.js\";\n\nexport const DisableTenantFeature = createFeature({\n name: \"DisableTenant\",\n register(container) {\n // Register use case (transient scope)\n container.register(DisableTenantUseCase);\n }\n});\n"],"names":["DisableTenantFeature","createFeature","container","DisableTenantUseCase"],"mappings":";;AAGO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QAEdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -1,67 +1,55 @@
|
|
|
1
|
-
import { EnableTenantUseCase
|
|
1
|
+
import { EnableTenantUseCase } from "./abstractions.js";
|
|
2
2
|
import { Result } from "@webiny/feature/api";
|
|
3
3
|
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
4
4
|
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
5
5
|
import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
|
|
6
|
-
import { UpdateTenantUseCase
|
|
7
|
-
import { UpdateTenantUseCase as
|
|
6
|
+
import { UpdateTenantUseCase } from "@webiny/api-core/features/tenancy/UpdateTenant";
|
|
7
|
+
import { UpdateTenantUseCase as abstractions_js_UpdateTenantUseCase } from "../UpdateTenant/abstractions.js";
|
|
8
8
|
import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
|
|
9
|
-
import {
|
|
9
|
+
import { TenantAfterEnableEvent, TenantBeforeEnableEvent } from "./events.js";
|
|
10
10
|
import { TenantPersistenceError } from "../../domain/errors.js";
|
|
11
|
-
class
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
async execute(tenantId) {
|
|
20
|
-
// Authorization checks
|
|
21
|
-
if (!this.identityContext.getPermission("tm.tenant")) {
|
|
22
|
-
return Result.fail(new NotAuthorizedError({
|
|
23
|
-
message: "Not authorized to enable tenants."
|
|
24
|
-
}));
|
|
11
|
+
class EnableTenantUseCase_EnableTenantUseCase {
|
|
12
|
+
constructor(identityContext, eventPublisher, coreUpdateTenant, tmUpdateTenant, tmGetTenantById){
|
|
13
|
+
this.identityContext = identityContext;
|
|
14
|
+
this.eventPublisher = eventPublisher;
|
|
15
|
+
this.coreUpdateTenant = coreUpdateTenant;
|
|
16
|
+
this.tmUpdateTenant = tmUpdateTenant;
|
|
17
|
+
this.tmGetTenantById = tmGetTenantById;
|
|
25
18
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
19
|
+
async execute(tenantId) {
|
|
20
|
+
if (!this.identityContext.getPermission("tm.tenant")) return Result.fail(new NotAuthorizedError({
|
|
21
|
+
message: "Not authorized to enable tenants."
|
|
22
|
+
}));
|
|
23
|
+
const getTenantResult = await this.tmGetTenantById.execute(tenantId);
|
|
24
|
+
if (getTenantResult.isFail()) return Result.fail(getTenantResult.error);
|
|
25
|
+
const tenant = getTenantResult.value;
|
|
26
|
+
await this.eventPublisher.publish(new TenantBeforeEnableEvent({
|
|
27
|
+
tenant
|
|
28
|
+
}));
|
|
29
|
+
const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {
|
|
30
|
+
status: "enabled"
|
|
31
|
+
});
|
|
32
|
+
if (apiCoreResult.isFail()) return Result.fail(new TenantPersistenceError(new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)));
|
|
33
|
+
const updatedTenantResult = await this.tmUpdateTenant.execute(tenantId, {
|
|
34
|
+
status: "enabled"
|
|
35
|
+
});
|
|
36
|
+
if (updatedTenantResult.isFail()) return Result.fail(updatedTenantResult.error);
|
|
37
|
+
await this.eventPublisher.publish(new TenantAfterEnableEvent({
|
|
38
|
+
tenant: updatedTenantResult.value
|
|
39
|
+
}));
|
|
40
|
+
return Result.ok();
|
|
45
41
|
}
|
|
46
|
-
|
|
47
|
-
// Update tenant-manager CMS entry
|
|
48
|
-
const updatedTenantResult = await this.tmUpdateTenant.execute(tenantId, {
|
|
49
|
-
status: "enabled"
|
|
50
|
-
});
|
|
51
|
-
if (updatedTenantResult.isFail()) {
|
|
52
|
-
return Result.fail(updatedTenantResult.error);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Publish after event
|
|
56
|
-
await this.eventPublisher.publish(new TenantAfterEnableEvent({
|
|
57
|
-
tenant: updatedTenantResult.value
|
|
58
|
-
}));
|
|
59
|
-
return Result.ok();
|
|
60
|
-
}
|
|
61
42
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
43
|
+
const EnableTenant_EnableTenantUseCase = EnableTenantUseCase.createImplementation({
|
|
44
|
+
implementation: EnableTenantUseCase_EnableTenantUseCase,
|
|
45
|
+
dependencies: [
|
|
46
|
+
IdentityContext,
|
|
47
|
+
EventPublisher,
|
|
48
|
+
UpdateTenantUseCase,
|
|
49
|
+
abstractions_js_UpdateTenantUseCase,
|
|
50
|
+
GetTenantByIdUseCase
|
|
51
|
+
]
|
|
65
52
|
});
|
|
53
|
+
export default EnableTenant_EnableTenantUseCase;
|
|
66
54
|
|
|
67
55
|
//# sourceMappingURL=EnableTenantUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/EnableTenant/EnableTenantUseCase.js","sources":["../../../../src/api/features/EnableTenant/EnableTenantUseCase.ts"],"sourcesContent":["import { EnableTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport { UpdateTenantUseCase as ApiCoreUpdateTenant } from \"@webiny/api-core/features/tenancy/UpdateTenant\";\nimport { UpdateTenantUseCase as TenantManagerUpdateTenant } from \"../UpdateTenant/abstractions.js\";\nimport { GetTenantByIdUseCase } from \"../GetTenantById/abstractions.js\";\nimport { TenantBeforeEnableEvent, TenantAfterEnableEvent } from \"./events.js\";\nimport { TenantPersistenceError } from \"../../domain/errors.js\";\n\nclass EnableTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private coreUpdateTenant: ApiCoreUpdateTenant.Interface,\n private tmUpdateTenant: TenantManagerUpdateTenant.Interface,\n private tmGetTenantById: GetTenantByIdUseCase.Interface\n ) {}\n\n async execute(tenantId: string): Promise<Result<void, UseCaseAbstraction.Error>> {\n // Authorization checks\n if (!this.identityContext.getPermission(\"tm.tenant\")) {\n return Result.fail(\n new NotAuthorizedError({ message: \"Not authorized to enable tenants.\" })\n );\n }\n\n // Get current tenant to verify it exists\n const getTenantResult = await this.tmGetTenantById.execute(tenantId);\n if (getTenantResult.isFail()) {\n return Result.fail(getTenantResult.error);\n }\n\n const tenant = getTenantResult.value;\n\n // Publish before event\n await this.eventPublisher.publish(new TenantBeforeEnableEvent({ tenant }));\n\n // Update api-core tenant first\n const apiCoreResult = await this.coreUpdateTenant.execute(tenantId, {\n status: \"enabled\"\n });\n\n if (apiCoreResult.isFail()) {\n return Result.fail(\n new TenantPersistenceError(\n new Error(`Failed to update api-core tenant: ${apiCoreResult.error}`)\n )\n );\n }\n\n // Update tenant-manager CMS entry\n const updatedTenantResult = await this.tmUpdateTenant.execute(tenantId, {\n status: \"enabled\"\n });\n\n if (updatedTenantResult.isFail()) {\n return Result.fail(updatedTenantResult.error);\n }\n\n // Publish after event\n await this.eventPublisher.publish(\n new TenantAfterEnableEvent({ tenant: updatedTenantResult.value })\n );\n\n return Result.ok();\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: EnableTenantUseCase,\n dependencies: [\n IdentityContext,\n EventPublisher,\n ApiCoreUpdateTenant,\n TenantManagerUpdateTenant,\n GetTenantByIdUseCase\n ]\n});\n"],"names":["EnableTenantUseCase","identityContext","eventPublisher","coreUpdateTenant","tmUpdateTenant","tmGetTenantById","tenantId","Result","NotAuthorizedError","getTenantResult","tenant","TenantBeforeEnableEvent","apiCoreResult","TenantPersistenceError","Error","updatedTenantResult","TenantAfterEnableEvent","UseCaseAbstraction","IdentityContext","EventPublisher","ApiCoreUpdateTenant","TenantManagerUpdateTenant","GetTenantByIdUseCase"],"mappings":";;;;;;;;;;AAWA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,cAAwC,EACxCC,gBAA+C,EAC/CC,cAAmD,EACnDC,eAA+C,CACzD;aALUJ,eAAe,GAAfA;aACAC,cAAc,GAAdA;aACAC,gBAAgB,GAAhBA;aACAC,cAAc,GAAdA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,QAAQC,QAAgB,EAAmD;QAE7E,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,cACpC,OAAOC,OAAO,IAAI,CACd,IAAIC,mBAAmB;YAAE,SAAS;QAAoC;QAK9E,MAAMC,kBAAkB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACH;QAC3D,IAAIG,gBAAgB,MAAM,IACtB,OAAOF,OAAO,IAAI,CAACE,gBAAgB,KAAK;QAG5C,MAAMC,SAASD,gBAAgB,KAAK;QAGpC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAIE,wBAAwB;YAAED;QAAO;QAGvE,MAAME,gBAAgB,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAACN,UAAU;YAChE,QAAQ;QACZ;QAEA,IAAIM,cAAc,MAAM,IACpB,OAAOL,OAAO,IAAI,CACd,IAAIM,uBACA,IAAIC,MAAM,CAAC,kCAAkC,EAAEF,cAAc,KAAK,EAAE;QAMhF,MAAMG,sBAAsB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAACT,UAAU;YACpE,QAAQ;QACZ;QAEA,IAAIS,oBAAoB,MAAM,IAC1B,OAAOR,OAAO,IAAI,CAACQ,oBAAoB,KAAK;QAIhD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIC,uBAAuB;YAAE,QAAQD,oBAAoB,KAAK;QAAC;QAGnE,OAAOR,OAAO,EAAE;IACpB;AACJ;AAEA,yCAAeU,oBAAAA,oBAAuC,CAAC;IACnD,gBAAgBjB;IAChB,cAAc;QACVkB;QACAC;QACAC;QACAC;QACAC;KACH;AACL"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
2
|
+
const EnableTenantUseCase = createAbstraction("TenantManager/EnableTenantUseCase");
|
|
3
|
+
export { EnableTenantUseCase };
|
|
3
4
|
|
|
4
5
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/EnableTenant/abstractions.js","sources":["../../../../src/api/features/EnableTenant/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport {\n TenantModelNotFoundError,\n TenantNotFoundError,\n TenantPersistenceError\n} from \"../../domain/errors.js\";\n\nexport interface IEnableTenantUseCase {\n execute(tenantId: string): Promise<Result<void, EnableTenantUseCase.Error>>;\n}\n\nexport interface IEnableTenantUseCaseErrors {\n notAuthorized: NotAuthorizedError;\n notFound: TenantNotFoundError;\n persistence: TenantPersistenceError;\n modelNotFound: TenantModelNotFoundError;\n}\n\ntype UseCaseError = IEnableTenantUseCaseErrors[keyof IEnableTenantUseCaseErrors];\n\nexport const EnableTenantUseCase = createAbstraction<IEnableTenantUseCase>(\n \"TenantManager/EnableTenantUseCase\"\n);\n\nexport namespace EnableTenantUseCase {\n export type Interface = IEnableTenantUseCase;\n export type Error = UseCaseError;\n}\n"],"names":["EnableTenantUseCase","createAbstraction"],"mappings":";AAsBO,MAAMA,sBAAsBC,kBAC/B"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
2
|
import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
class TenantBeforeEnableEvent extends DomainEvent {
|
|
4
|
+
getHandlerAbstraction() {
|
|
5
|
+
return TenantBeforeEnableEventHandler;
|
|
6
|
+
}
|
|
7
|
+
constructor(...args){
|
|
8
|
+
super(...args), this.eventType = "tenant.beforeEnable";
|
|
9
|
+
}
|
|
8
10
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const TenantBeforeEnableEventHandler = createAbstraction("TenantManager/TenantBeforeEnableEventHandler");
|
|
12
|
+
class TenantAfterEnableEvent extends DomainEvent {
|
|
13
|
+
getHandlerAbstraction() {
|
|
14
|
+
return TenantAfterEnableEventHandler;
|
|
15
|
+
}
|
|
16
|
+
constructor(...args){
|
|
17
|
+
super(...args), this.eventType = "tenant.afterEnable";
|
|
18
|
+
}
|
|
15
19
|
}
|
|
16
|
-
|
|
20
|
+
const TenantAfterEnableEventHandler = createAbstraction("TenantManager/TenantAfterEnableEventHandler");
|
|
21
|
+
export { TenantAfterEnableEvent, TenantAfterEnableEventHandler, TenantBeforeEnableEvent, TenantBeforeEnableEventHandler };
|
|
17
22
|
|
|
18
23
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/EnableTenant/events.js","sources":["../../../../src/api/features/EnableTenant/events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport type { Tenant } from \"~/shared/Tenant.js\";\n\nexport interface TenantBeforeEnablePayload {\n tenant: Tenant;\n}\n\nexport interface TenantAfterEnablePayload {\n tenant: Tenant;\n}\n\nexport class TenantBeforeEnableEvent extends DomainEvent<TenantBeforeEnablePayload> {\n eventType = \"tenant.beforeEnable\" as const;\n\n getHandlerAbstraction() {\n return TenantBeforeEnableEventHandler;\n }\n}\n\nexport const TenantBeforeEnableEventHandler = createAbstraction<\n IEventHandler<TenantBeforeEnableEvent>\n>(\"TenantManager/TenantBeforeEnableEventHandler\");\n\nexport namespace TenantBeforeEnableEventHandler {\n export type Interface = IEventHandler<TenantBeforeEnableEvent>;\n export type Event = TenantBeforeEnableEvent;\n}\n\nexport class TenantAfterEnableEvent extends DomainEvent<TenantAfterEnablePayload> {\n eventType = \"tenant.afterEnable\" as const;\n\n getHandlerAbstraction() {\n return TenantAfterEnableEventHandler;\n }\n}\n\nexport const TenantAfterEnableEventHandler = createAbstraction<\n IEventHandler<TenantAfterEnableEvent>\n>(\"TenantManager/TenantAfterEnableEventHandler\");\n\nexport namespace TenantAfterEnableEventHandler {\n export type Interface = IEventHandler<TenantAfterEnableEvent>;\n export type Event = TenantAfterEnableEvent;\n}\n"],"names":["TenantBeforeEnableEvent","DomainEvent","TenantBeforeEnableEventHandler","createAbstraction","TenantAfterEnableEvent","TenantAfterEnableEventHandler"],"mappings":";;AAaO,MAAMA,gCAAgCC;IAGzC,wBAAwB;QACpB,OAAOC;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,iCAAiCC,kBAE5C;AAOK,MAAMC,+BAA+BH;IAGxC,wBAAwB;QACpB,OAAOI;IACX;;QALG,qBACH,SAAS,GAAG;;AAKhB;AAEO,MAAMA,gCAAgCF,kBAE3C"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import EnableTenantUseCase from "./EnableTenantUseCase.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
3
|
+
const EnableTenantFeature = createFeature({
|
|
4
|
+
name: "EnableTenant",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(EnableTenantUseCase);
|
|
7
|
+
}
|
|
9
8
|
});
|
|
9
|
+
export { EnableTenantFeature };
|
|
10
10
|
|
|
11
11
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/EnableTenant/feature.js","sources":["../../../../src/api/features/EnableTenant/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport EnableTenantUseCase from \"./EnableTenantUseCase.js\";\n\nexport const EnableTenantFeature = createFeature({\n name: \"EnableTenant\",\n register(container) {\n // Register use case (transient scope)\n container.register(EnableTenantUseCase);\n }\n});\n"],"names":["EnableTenantFeature","createFeature","container","EnableTenantUseCase"],"mappings":";;AAGO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAS;QAEdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -1,35 +1,32 @@
|
|
|
1
1
|
import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
|
|
2
|
-
import { GetCurrentTenantUseCase
|
|
2
|
+
import { GetCurrentTenantUseCase } from "./abstractions.js";
|
|
3
3
|
import { TenantContext } from "@webiny/api-core/exports/api/tenancy.js";
|
|
4
4
|
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
5
5
|
import { Result } from "@webiny/feature/api";
|
|
6
6
|
import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/index.js";
|
|
7
|
-
class
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
async execute() {
|
|
14
|
-
const identity = this.identityContext.getIdentity();
|
|
15
|
-
if (identity.isAnonymous()) {
|
|
16
|
-
return Result.fail(new NotAuthorizedError());
|
|
7
|
+
class GetCurrentTenantUseCase_GetCurrentTenantUseCase {
|
|
8
|
+
constructor(tenantContext, identityContext, getTenantByIdUseCase){
|
|
9
|
+
this.tenantContext = tenantContext;
|
|
10
|
+
this.identityContext = identityContext;
|
|
11
|
+
this.getTenantByIdUseCase = getTenantByIdUseCase;
|
|
17
12
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return Result.fail(result.error);
|
|
13
|
+
async execute() {
|
|
14
|
+
const identity = this.identityContext.getIdentity();
|
|
15
|
+
if (identity.isAnonymous()) return Result.fail(new NotAuthorizedError());
|
|
16
|
+
const currentTenant = this.tenantContext.getTenant();
|
|
17
|
+
const result = await this.identityContext.withoutAuthorization(()=>this.getTenantByIdUseCase.execute(currentTenant.id));
|
|
18
|
+
if (result.isFail()) return Result.fail(result.error);
|
|
19
|
+
return Result.ok(result.value);
|
|
26
20
|
}
|
|
27
|
-
return Result.ok(result.value);
|
|
28
|
-
}
|
|
29
21
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
const GetCurrentTenant_GetCurrentTenantUseCase = GetCurrentTenantUseCase.createImplementation({
|
|
23
|
+
implementation: GetCurrentTenantUseCase_GetCurrentTenantUseCase,
|
|
24
|
+
dependencies: [
|
|
25
|
+
TenantContext,
|
|
26
|
+
IdentityContext,
|
|
27
|
+
GetTenantByIdUseCase
|
|
28
|
+
]
|
|
33
29
|
});
|
|
30
|
+
export default GetCurrentTenant_GetCurrentTenantUseCase;
|
|
34
31
|
|
|
35
32
|
//# sourceMappingURL=GetCurrentTenantUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/GetCurrentTenant/GetCurrentTenantUseCase.js","sources":["../../../../src/api/features/GetCurrentTenant/GetCurrentTenantUseCase.ts"],"sourcesContent":["import { Tenant } from \"~/shared/Tenant.js\";\nimport { GetTenantByIdUseCase } from \"../GetTenantById/abstractions.js\";\nimport { GetCurrentTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/exports/api/tenancy.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\n\nclass GetCurrentTenantUseCase implements UseCaseAbstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private identityContext: IdentityContext.Interface,\n private getTenantByIdUseCase: GetTenantByIdUseCase.Interface\n ) {}\n\n async execute(): Promise<Result<Tenant, UseCaseAbstraction.Error>> {\n const identity = this.identityContext.getIdentity();\n if (identity.isAnonymous()) {\n return Result.fail(new NotAuthorizedError());\n }\n\n // Get the current tenant from context\n const currentTenant = this.tenantContext.getTenant();\n\n const result = await this.identityContext.withoutAuthorization(() => {\n return this.getTenantByIdUseCase.execute(currentTenant.id);\n });\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok(result.value);\n }\n}\n\nexport default UseCaseAbstraction.createImplementation({\n implementation: GetCurrentTenantUseCase,\n dependencies: [TenantContext, IdentityContext, GetTenantByIdUseCase]\n});\n"],"names":["GetCurrentTenantUseCase","tenantContext","identityContext","getTenantByIdUseCase","identity","Result","NotAuthorizedError","currentTenant","result","UseCaseAbstraction","TenantContext","IdentityContext","GetTenantByIdUseCase"],"mappings":";;;;;;AAQA,MAAMA;IACF,YACYC,aAAsC,EACtCC,eAA0C,EAC1CC,oBAAoD,CAC9D;aAHUF,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,oBAAoB,GAApBA;IACT;IAEH,MAAM,UAA6D;QAC/D,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,IAAIA,SAAS,WAAW,IACpB,OAAOC,OAAO,IAAI,CAAC,IAAIC;QAI3B,MAAMC,gBAAgB,IAAI,CAAC,aAAa,CAAC,SAAS;QAElD,MAAMC,SAAS,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IACpD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAACD,cAAc,EAAE;QAG7D,IAAIC,OAAO,MAAM,IACb,OAAOH,OAAO,IAAI,CAACG,OAAO,KAAK;QAGnC,OAAOH,OAAO,EAAE,CAACG,OAAO,KAAK;IACjC;AACJ;AAEA,iDAAeC,wBAAAA,oBAAuC,CAAC;IACnD,gBAAgBT;IAChB,cAAc;QAACU;QAAeC;QAAiBC;KAAqB;AACxE"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* GetCurrentTenant Use Case
|
|
5
|
-
* Gets the tenant associated with the current tenant context
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export const GetCurrentTenantUseCase = createAbstraction("TenantManager/GetCurrentTenantUseCase");
|
|
2
|
+
const GetCurrentTenantUseCase = createAbstraction("TenantManager/GetCurrentTenantUseCase");
|
|
3
|
+
export { GetCurrentTenantUseCase };
|
|
9
4
|
|
|
10
5
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/GetCurrentTenant/abstractions.js","sources":["../../../../src/api/features/GetCurrentTenant/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/errors.js\";\nimport type { Tenant } from \"~/shared/Tenant.js\";\nimport type {\n TenantModelNotFoundError,\n TenantNotFoundError,\n TenantPersistenceError\n} from \"../../domain/errors.js\";\n\n/**\n * GetCurrentTenant Use Case\n * Gets the tenant associated with the current tenant context\n */\nexport interface IGetCurrentTenantUseCase {\n execute(): Promise<Result<Tenant, UseCaseError>>;\n}\n\nexport interface IGetCurrentTenantUseCaseErrors {\n notFound: TenantNotFoundError;\n notAuthorized: NotAuthorizedError;\n persistence: TenantPersistenceError;\n modelNotFoundError: TenantModelNotFoundError;\n}\n\ntype UseCaseError = IGetCurrentTenantUseCaseErrors[keyof IGetCurrentTenantUseCaseErrors];\n\nexport const GetCurrentTenantUseCase = createAbstraction<IGetCurrentTenantUseCase>(\n \"TenantManager/GetCurrentTenantUseCase\"\n);\n\nexport namespace GetCurrentTenantUseCase {\n export type Interface = IGetCurrentTenantUseCase;\n export type Error = UseCaseError;\n}\n"],"names":["GetCurrentTenantUseCase","createAbstraction"],"mappings":";AA2BO,MAAMA,0BAA0BC,kBACnC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import GetCurrentTenantUseCase from "./GetCurrentTenantUseCase.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
3
|
+
const GetCurrentTenantFeature = createFeature({
|
|
4
|
+
name: "GetCurrentTenant",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(GetCurrentTenantUseCase);
|
|
7
|
+
}
|
|
9
8
|
});
|
|
9
|
+
export { GetCurrentTenantFeature };
|
|
10
10
|
|
|
11
11
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"api/features/GetCurrentTenant/feature.js","sources":["../../../../src/api/features/GetCurrentTenant/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport GetCurrentTenantUseCase from \"./GetCurrentTenantUseCase.js\";\n\nexport const GetCurrentTenantFeature = createFeature({\n name: \"GetCurrentTenant\",\n register(container) {\n // Register use case (transient scope)\n container.register(GetCurrentTenantUseCase);\n }\n});\n"],"names":["GetCurrentTenantFeature","createFeature","container","GetCurrentTenantUseCase"],"mappings":";;AAGO,MAAMA,0BAA0BC,cAAc;IACjD,MAAM;IACN,UAASC,SAAS;QAEdA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
|
|
@@ -2,48 +2,43 @@ import { Result } from "@webiny/feature/api";
|
|
|
2
2
|
import { Tenant } from "../../../shared/Tenant.js";
|
|
3
3
|
import { TENANT_MODEL_ID } from "../../../shared/constants.js";
|
|
4
4
|
import { TenantModelNotFoundError, TenantNotFoundError, TenantPersistenceError } from "../../domain/errors.js";
|
|
5
|
-
import { GetTenantByIdRepository
|
|
5
|
+
import { GetTenantByIdRepository } from "./abstractions.js";
|
|
6
6
|
import { TenantContext } from "@webiny/api-core/exports/api/tenancy.js";
|
|
7
7
|
import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js";
|
|
8
8
|
import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/abstractions.js";
|
|
9
9
|
import { EntryId } from "@webiny/api-headless-cms/domain/contentEntry/EntryId.js";
|
|
10
|
-
class
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
const tenantEntry = entryResult.value;
|
|
34
|
-
const tenantDto = {
|
|
35
|
-
id: tenantEntry.entryId,
|
|
36
|
-
values: tenantEntry.values
|
|
37
|
-
};
|
|
38
|
-
return Result.ok(Tenant.from(tenantDto));
|
|
39
|
-
} catch (error) {
|
|
40
|
-
return Result.fail(new TenantPersistenceError(error));
|
|
10
|
+
class GetTenantByIdRepository_GetTenantByIdRepository {
|
|
11
|
+
constructor(tenantContext, getModelUseCase, getEntryUseCase){
|
|
12
|
+
this.tenantContext = tenantContext;
|
|
13
|
+
this.getModelUseCase = getModelUseCase;
|
|
14
|
+
this.getEntryUseCase = getEntryUseCase;
|
|
15
|
+
}
|
|
16
|
+
async execute(id) {
|
|
17
|
+
try {
|
|
18
|
+
const entryId = EntryId.from(id);
|
|
19
|
+
const modelResult = await this.getModelUseCase.execute(TENANT_MODEL_ID);
|
|
20
|
+
if (modelResult.isFail()) return Result.fail(new TenantModelNotFoundError());
|
|
21
|
+
const entryResult = await this.tenantContext.withRootTenant(()=>this.getEntryUseCase.execute(modelResult.value, entryId.toString()));
|
|
22
|
+
if (entryResult.isFail()) return Result.fail(new TenantNotFoundError(id));
|
|
23
|
+
const tenantEntry = entryResult.value;
|
|
24
|
+
const tenantDto = {
|
|
25
|
+
id: tenantEntry.entryId,
|
|
26
|
+
values: tenantEntry.values
|
|
27
|
+
};
|
|
28
|
+
return Result.ok(Tenant.from(tenantDto));
|
|
29
|
+
} catch (error) {
|
|
30
|
+
return Result.fail(new TenantPersistenceError(error));
|
|
31
|
+
}
|
|
41
32
|
}
|
|
42
|
-
}
|
|
43
33
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
34
|
+
const GetTenantById_GetTenantByIdRepository = GetTenantByIdRepository.createImplementation({
|
|
35
|
+
implementation: GetTenantByIdRepository_GetTenantByIdRepository,
|
|
36
|
+
dependencies: [
|
|
37
|
+
TenantContext,
|
|
38
|
+
GetModelUseCase,
|
|
39
|
+
GetEntryByIdUseCase
|
|
40
|
+
]
|
|
47
41
|
});
|
|
42
|
+
export default GetTenantById_GetTenantByIdRepository;
|
|
48
43
|
|
|
49
44
|
//# sourceMappingURL=GetTenantByIdRepository.js.map
|