@webiny/tenant-manager 0.0.0-unstable.0d717d18dd

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.
Files changed (275) hide show
  1. package/LICENSE +36 -0
  2. package/README.md +11 -0
  3. package/TenantManager.d.ts +2 -0
  4. package/TenantManager.js +11 -0
  5. package/TenantManager.js.map +1 -0
  6. package/admin/CurrentTenant/CurrentTenant.d.ts +10 -0
  7. package/admin/CurrentTenant/CurrentTenant.js +25 -0
  8. package/admin/CurrentTenant/CurrentTenant.js.map +1 -0
  9. package/admin/CurrentTenant/CurrentTenantGateway.d.ts +12 -0
  10. package/admin/CurrentTenant/CurrentTenantGateway.js +43 -0
  11. package/admin/CurrentTenant/CurrentTenantGateway.js.map +1 -0
  12. package/admin/CurrentTenant/CurrentTenantPresenter.d.ts +12 -0
  13. package/admin/CurrentTenant/CurrentTenantPresenter.js +33 -0
  14. package/admin/CurrentTenant/CurrentTenantPresenter.js.map +1 -0
  15. package/admin/CurrentTenant/CurrentTenantRepository.d.ts +15 -0
  16. package/admin/CurrentTenant/CurrentTenantRepository.js +38 -0
  17. package/admin/CurrentTenant/CurrentTenantRepository.js.map +1 -0
  18. package/admin/CurrentTenant/abstractions.d.ts +31 -0
  19. package/admin/CurrentTenant/abstractions.js +7 -0
  20. package/admin/CurrentTenant/abstractions.js.map +1 -0
  21. package/admin/CurrentTenant/feature.d.ts +3 -0
  22. package/admin/CurrentTenant/feature.js +21 -0
  23. package/admin/CurrentTenant/feature.js.map +1 -0
  24. package/admin/CurrentTenant/useCurrentTenant.d.ts +4 -0
  25. package/admin/CurrentTenant/useCurrentTenant.js +18 -0
  26. package/admin/CurrentTenant/useCurrentTenant.js.map +1 -0
  27. package/admin/CurrentTenantProvider.d.ts +2 -0
  28. package/admin/CurrentTenantProvider.js +9 -0
  29. package/admin/CurrentTenantProvider.js.map +1 -0
  30. package/admin/DisableTenant/DisableTenantGateway.d.ts +11 -0
  31. package/admin/DisableTenant/DisableTenantGateway.js +42 -0
  32. package/admin/DisableTenant/DisableTenantGateway.js.map +1 -0
  33. package/admin/DisableTenant/DisableTenantRepository.d.ts +12 -0
  34. package/admin/DisableTenant/DisableTenantRepository.js +33 -0
  35. package/admin/DisableTenant/DisableTenantRepository.js.map +1 -0
  36. package/admin/DisableTenant/DisableTenantUseCase.d.ts +10 -0
  37. package/admin/DisableTenant/DisableTenantUseCase.js +18 -0
  38. package/admin/DisableTenant/DisableTenantUseCase.js.map +1 -0
  39. package/admin/DisableTenant/abstractions.d.ts +21 -0
  40. package/admin/DisableTenant/abstractions.js +7 -0
  41. package/admin/DisableTenant/abstractions.js.map +1 -0
  42. package/admin/DisableTenant/feature.d.ts +3 -0
  43. package/admin/DisableTenant/feature.js +21 -0
  44. package/admin/DisableTenant/feature.js.map +1 -0
  45. package/admin/DisableTenant/index.d.ts +2 -0
  46. package/admin/DisableTenant/index.js +2 -0
  47. package/admin/DisableTenant/useDisableTenant.d.ts +4 -0
  48. package/admin/DisableTenant/useDisableTenant.js +18 -0
  49. package/admin/DisableTenant/useDisableTenant.js.map +1 -0
  50. package/admin/EnableTenant/EnableTenantGateway.d.ts +11 -0
  51. package/admin/EnableTenant/EnableTenantGateway.js +42 -0
  52. package/admin/EnableTenant/EnableTenantGateway.js.map +1 -0
  53. package/admin/EnableTenant/EnableTenantRepository.d.ts +12 -0
  54. package/admin/EnableTenant/EnableTenantRepository.js +33 -0
  55. package/admin/EnableTenant/EnableTenantRepository.js.map +1 -0
  56. package/admin/EnableTenant/EnableTenantUseCase.d.ts +10 -0
  57. package/admin/EnableTenant/EnableTenantUseCase.js +18 -0
  58. package/admin/EnableTenant/EnableTenantUseCase.js.map +1 -0
  59. package/admin/EnableTenant/abstractions.d.ts +21 -0
  60. package/admin/EnableTenant/abstractions.js +7 -0
  61. package/admin/EnableTenant/abstractions.js.map +1 -0
  62. package/admin/EnableTenant/feature.d.ts +3 -0
  63. package/admin/EnableTenant/feature.js +21 -0
  64. package/admin/EnableTenant/feature.js.map +1 -0
  65. package/admin/EnableTenant/index.d.ts +2 -0
  66. package/admin/EnableTenant/index.js +2 -0
  67. package/admin/EnableTenant/useEnableTenant.d.ts +4 -0
  68. package/admin/EnableTenant/useEnableTenant.js +24 -0
  69. package/admin/EnableTenant/useEnableTenant.js.map +1 -0
  70. package/admin/Extension.d.ts +2 -0
  71. package/admin/Extension.js +49 -0
  72. package/admin/Extension.js.map +1 -0
  73. package/admin/InstallTenant/InstallTenantGateway.d.ts +11 -0
  74. package/admin/InstallTenant/InstallTenantGateway.js +42 -0
  75. package/admin/InstallTenant/InstallTenantGateway.js.map +1 -0
  76. package/admin/InstallTenant/InstallTenantRepository.d.ts +12 -0
  77. package/admin/InstallTenant/InstallTenantRepository.js +34 -0
  78. package/admin/InstallTenant/InstallTenantRepository.js.map +1 -0
  79. package/admin/InstallTenant/InstallTenantUseCase.d.ts +10 -0
  80. package/admin/InstallTenant/InstallTenantUseCase.js +18 -0
  81. package/admin/InstallTenant/InstallTenantUseCase.js.map +1 -0
  82. package/admin/InstallTenant/abstractions.d.ts +21 -0
  83. package/admin/InstallTenant/abstractions.js +7 -0
  84. package/admin/InstallTenant/abstractions.js.map +1 -0
  85. package/admin/InstallTenant/feature.d.ts +3 -0
  86. package/admin/InstallTenant/feature.js +21 -0
  87. package/admin/InstallTenant/feature.js.map +1 -0
  88. package/admin/InstallTenant/index.d.ts +2 -0
  89. package/admin/InstallTenant/index.js +2 -0
  90. package/admin/InstallTenant/useInstallTenant.d.ts +4 -0
  91. package/admin/InstallTenant/useInstallTenant.js +24 -0
  92. package/admin/InstallTenant/useInstallTenant.js.map +1 -0
  93. package/admin/IsRootTenant.d.ts +13 -0
  94. package/admin/IsRootTenant.js +19 -0
  95. package/admin/IsRootTenant.js.map +1 -0
  96. package/admin/SecurityPermission.d.ts +2 -0
  97. package/admin/SecurityPermission.js +15 -0
  98. package/admin/SecurityPermission.js.map +1 -0
  99. package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.d.ts +8 -0
  100. package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js +41 -0
  101. package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js.map +1 -0
  102. package/admin/TenantEntryList/EnableTenant/EnableTenant.d.ts +7 -0
  103. package/admin/TenantEntryList/EnableTenant/EnableTenant.js +15 -0
  104. package/admin/TenantEntryList/EnableTenant/EnableTenant.js.map +1 -0
  105. package/admin/TenantEntryList/EnableTenant/useEnableTenant.d.ts +5 -0
  106. package/admin/TenantEntryList/EnableTenant/useEnableTenant.js +31 -0
  107. package/admin/TenantEntryList/EnableTenant/useEnableTenant.js.map +1 -0
  108. package/admin/TenantEntryList/FolderNameCell.d.ts +7 -0
  109. package/admin/TenantEntryList/FolderNameCell.js +24 -0
  110. package/admin/TenantEntryList/FolderNameCell.js.map +1 -0
  111. package/admin/TenantEntryList/InstallTenantButton/InstallTenant.d.ts +7 -0
  112. package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js +15 -0
  113. package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js.map +1 -0
  114. package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.d.ts +5 -0
  115. package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js +31 -0
  116. package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js.map +1 -0
  117. package/admin/TenantEntryList/ManageTenant.d.ts +7 -0
  118. package/admin/TenantEntryList/ManageTenant.js +19 -0
  119. package/admin/TenantEntryList/ManageTenant.js.map +1 -0
  120. package/admin/TenantEntryList/TenantCell.d.ts +2 -0
  121. package/admin/TenantEntryList/TenantCell.js +24 -0
  122. package/admin/TenantEntryList/TenantCell.js.map +1 -0
  123. package/admin/TenantEntryList/TenantNameCell.d.ts +2 -0
  124. package/admin/TenantEntryList/TenantNameCell.js +51 -0
  125. package/admin/TenantEntryList/TenantNameCell.js.map +1 -0
  126. package/admin/TenantEntryList.d.ts +2 -0
  127. package/admin/TenantEntryList.js +59 -0
  128. package/admin/TenantEntryList.js.map +1 -0
  129. package/admin/TenantSelector.d.ts +2 -0
  130. package/admin/TenantSelector.js +35 -0
  131. package/admin/TenantSelector.js.map +1 -0
  132. package/admin/domain/permissionsSchema.d.ts +4 -0
  133. package/admin/domain/permissionsSchema.js +8 -0
  134. package/admin/domain/permissionsSchema.js.map +1 -0
  135. package/admin/features/permissions/abstractions.d.ts +17 -0
  136. package/admin/features/permissions/abstractions.js +6 -0
  137. package/admin/features/permissions/abstractions.js.map +1 -0
  138. package/admin/features/permissions/feature.d.ts +14 -0
  139. package/admin/features/permissions/feature.js +7 -0
  140. package/admin/features/permissions/feature.js.map +1 -0
  141. package/admin/types.d.ts +7 -0
  142. package/admin/types.js +0 -0
  143. package/api/Extension.d.ts +4 -0
  144. package/api/Extension.js +39 -0
  145. package/api/Extension.js.map +1 -0
  146. package/api/domain/TenantId.d.ts +3 -0
  147. package/api/domain/TenantId.js +10 -0
  148. package/api/domain/TenantId.js.map +1 -0
  149. package/api/domain/TenantModel.d.ts +11 -0
  150. package/api/domain/TenantModel.js +68 -0
  151. package/api/domain/TenantModel.js.map +1 -0
  152. package/api/domain/TenantModelExtension.d.ts +11 -0
  153. package/api/domain/TenantModelExtension.js +5 -0
  154. package/api/domain/TenantModelExtension.js.map +1 -0
  155. package/api/domain/errors.d.ts +33 -0
  156. package/api/domain/errors.js +58 -0
  157. package/api/domain/errors.js.map +1 -0
  158. package/api/features/AddCmsPermissions/AddCmsPermissions.d.ts +8 -0
  159. package/api/features/AddCmsPermissions/AddCmsPermissions.js +48 -0
  160. package/api/features/AddCmsPermissions/AddCmsPermissions.js.map +1 -0
  161. package/api/features/AddCmsPermissions/feature.d.ts +4 -0
  162. package/api/features/AddCmsPermissions/feature.js +11 -0
  163. package/api/features/AddCmsPermissions/feature.js.map +1 -0
  164. package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.d.ts +24 -0
  165. package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js +81 -0
  166. package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js.map +1 -0
  167. package/api/features/CreateAndInstallTenant/abstractions.d.ts +26 -0
  168. package/api/features/CreateAndInstallTenant/abstractions.js +5 -0
  169. package/api/features/CreateAndInstallTenant/abstractions.js.map +1 -0
  170. package/api/features/CreateAndInstallTenant/feature.d.ts +4 -0
  171. package/api/features/CreateAndInstallTenant/feature.js +11 -0
  172. package/api/features/CreateAndInstallTenant/feature.js.map +1 -0
  173. package/api/features/CreateTenant/CreateTenantRepository.d.ts +15 -0
  174. package/api/features/CreateTenant/CreateTenantRepository.js +43 -0
  175. package/api/features/CreateTenant/CreateTenantRepository.js.map +1 -0
  176. package/api/features/CreateTenant/CreateTenantUseCase.d.ts +14 -0
  177. package/api/features/CreateTenant/CreateTenantUseCase.js +40 -0
  178. package/api/features/CreateTenant/CreateTenantUseCase.js.map +1 -0
  179. package/api/features/CreateTenant/abstractions.d.ts +41 -0
  180. package/api/features/CreateTenant/abstractions.js +6 -0
  181. package/api/features/CreateTenant/abstractions.js.map +1 -0
  182. package/api/features/CreateTenant/feature.d.ts +4 -0
  183. package/api/features/CreateTenant/feature.js +13 -0
  184. package/api/features/CreateTenant/feature.js.map +1 -0
  185. package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.d.ts +11 -0
  186. package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js +27 -0
  187. package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js.map +1 -0
  188. package/api/features/DeleteTenantOnEntryDelete/feature.d.ts +4 -0
  189. package/api/features/DeleteTenantOnEntryDelete/feature.js +11 -0
  190. package/api/features/DeleteTenantOnEntryDelete/feature.js.map +1 -0
  191. package/api/features/DisableTenant/DisableTenantUseCase.d.ts +20 -0
  192. package/api/features/DisableTenant/DisableTenantUseCase.js +53 -0
  193. package/api/features/DisableTenant/DisableTenantUseCase.js.map +1 -0
  194. package/api/features/DisableTenant/abstractions.d.ts +19 -0
  195. package/api/features/DisableTenant/abstractions.js +5 -0
  196. package/api/features/DisableTenant/abstractions.js.map +1 -0
  197. package/api/features/DisableTenant/events.d.ts +27 -0
  198. package/api/features/DisableTenant/events.js +23 -0
  199. package/api/features/DisableTenant/events.js.map +1 -0
  200. package/api/features/DisableTenant/feature.d.ts +4 -0
  201. package/api/features/DisableTenant/feature.js +11 -0
  202. package/api/features/DisableTenant/feature.js.map +1 -0
  203. package/api/features/EnableTenant/EnableTenantUseCase.d.ts +20 -0
  204. package/api/features/EnableTenant/EnableTenantUseCase.js +55 -0
  205. package/api/features/EnableTenant/EnableTenantUseCase.js.map +1 -0
  206. package/api/features/EnableTenant/abstractions.d.ts +19 -0
  207. package/api/features/EnableTenant/abstractions.js +5 -0
  208. package/api/features/EnableTenant/abstractions.js.map +1 -0
  209. package/api/features/EnableTenant/events.d.ts +27 -0
  210. package/api/features/EnableTenant/events.js +23 -0
  211. package/api/features/EnableTenant/events.js.map +1 -0
  212. package/api/features/EnableTenant/feature.d.ts +4 -0
  213. package/api/features/EnableTenant/feature.js +11 -0
  214. package/api/features/EnableTenant/feature.js.map +1 -0
  215. package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.d.ts +17 -0
  216. package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js +32 -0
  217. package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js.map +1 -0
  218. package/api/features/GetCurrentTenant/abstractions.d.ts +24 -0
  219. package/api/features/GetCurrentTenant/abstractions.js +5 -0
  220. package/api/features/GetCurrentTenant/abstractions.js.map +1 -0
  221. package/api/features/GetCurrentTenant/feature.d.ts +4 -0
  222. package/api/features/GetCurrentTenant/feature.js +11 -0
  223. package/api/features/GetCurrentTenant/feature.js.map +1 -0
  224. package/api/features/GetTenantById/GetTenantByIdRepository.d.ts +17 -0
  225. package/api/features/GetTenantById/GetTenantByIdRepository.js +44 -0
  226. package/api/features/GetTenantById/GetTenantByIdRepository.js.map +1 -0
  227. package/api/features/GetTenantById/GetTenantByIdUseCase.d.ts +12 -0
  228. package/api/features/GetTenantById/GetTenantByIdUseCase.js +23 -0
  229. package/api/features/GetTenantById/GetTenantByIdUseCase.js.map +1 -0
  230. package/api/features/GetTenantById/abstractions.d.ts +38 -0
  231. package/api/features/GetTenantById/abstractions.js +6 -0
  232. package/api/features/GetTenantById/abstractions.js.map +1 -0
  233. package/api/features/GetTenantById/feature.d.ts +4 -0
  234. package/api/features/GetTenantById/feature.js +13 -0
  235. package/api/features/GetTenantById/feature.js.map +1 -0
  236. package/api/features/UpdateTenant/UpdateTenantRepository.d.ts +17 -0
  237. package/api/features/UpdateTenant/UpdateTenantRepository.js +51 -0
  238. package/api/features/UpdateTenant/UpdateTenantRepository.js.map +1 -0
  239. package/api/features/UpdateTenant/UpdateTenantUseCase.d.ts +12 -0
  240. package/api/features/UpdateTenant/UpdateTenantUseCase.js +21 -0
  241. package/api/features/UpdateTenant/UpdateTenantUseCase.js.map +1 -0
  242. package/api/features/UpdateTenant/abstractions.d.ts +39 -0
  243. package/api/features/UpdateTenant/abstractions.js +6 -0
  244. package/api/features/UpdateTenant/abstractions.js.map +1 -0
  245. package/api/features/UpdateTenant/feature.d.ts +4 -0
  246. package/api/features/UpdateTenant/feature.js +13 -0
  247. package/api/features/UpdateTenant/feature.js.map +1 -0
  248. package/api/graphql/CreateTenantSchema.d.ts +16 -0
  249. package/api/graphql/CreateTenantSchema.js +83 -0
  250. package/api/graphql/CreateTenantSchema.js.map +1 -0
  251. package/api/graphql/DisableTenantSchema.d.ts +8 -0
  252. package/api/graphql/DisableTenantSchema.js +31 -0
  253. package/api/graphql/DisableTenantSchema.js.map +1 -0
  254. package/api/graphql/EnableTenantSchema.d.ts +8 -0
  255. package/api/graphql/EnableTenantSchema.js +31 -0
  256. package/api/graphql/EnableTenantSchema.js.map +1 -0
  257. package/api/graphql/GetCurrentTenantSchema.d.ts +8 -0
  258. package/api/graphql/GetCurrentTenantSchema.js +49 -0
  259. package/api/graphql/GetCurrentTenantSchema.js.map +1 -0
  260. package/api/graphql/InstallTenantSchema.d.ts +8 -0
  261. package/api/graphql/InstallTenantSchema.js +43 -0
  262. package/api/graphql/InstallTenantSchema.js.map +1 -0
  263. package/exports/admin/tenancy.d.ts +7 -0
  264. package/exports/admin/tenancy.js +4 -0
  265. package/exports/api/tenant-manager.d.ts +9 -0
  266. package/exports/api/tenant-manager.js +8 -0
  267. package/index.d.ts +1 -0
  268. package/index.js +1 -0
  269. package/package.json +46 -0
  270. package/shared/Tenant.d.ts +21 -0
  271. package/shared/Tenant.js +27 -0
  272. package/shared/Tenant.js.map +1 -0
  273. package/shared/constants.d.ts +1 -0
  274. package/shared/constants.js +4 -0
  275. package/shared/constants.js.map +1 -0
@@ -0,0 +1,55 @@
1
+ import { EnableTenantUseCase } from "./abstractions.js";
2
+ import { Result } from "@webiny/feature/api";
3
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
4
+ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
5
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
6
+ import { UpdateTenantUseCase } from "@webiny/api-core/features/tenancy/UpdateTenant";
7
+ import { UpdateTenantUseCase as abstractions_js_UpdateTenantUseCase } from "../UpdateTenant/abstractions.js";
8
+ import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
9
+ import { TenantAfterEnableEvent, TenantBeforeEnableEvent } from "./events.js";
10
+ import { TenantPersistenceError } from "../../domain/errors.js";
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;
18
+ }
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();
41
+ }
42
+ }
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
+ ]
52
+ });
53
+ export default EnableTenant_EnableTenantUseCase;
54
+
55
+ //# sourceMappingURL=EnableTenantUseCase.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,19 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
3
+ import { TenantModelNotFoundError, TenantNotFoundError, TenantPersistenceError } from "../../domain/errors.js";
4
+ export interface IEnableTenantUseCase {
5
+ execute(tenantId: string): Promise<Result<void, EnableTenantUseCase.Error>>;
6
+ }
7
+ export interface IEnableTenantUseCaseErrors {
8
+ notAuthorized: NotAuthorizedError;
9
+ notFound: TenantNotFoundError;
10
+ persistence: TenantPersistenceError;
11
+ modelNotFound: TenantModelNotFoundError;
12
+ }
13
+ type UseCaseError = IEnableTenantUseCaseErrors[keyof IEnableTenantUseCaseErrors];
14
+ export declare const EnableTenantUseCase: import("@webiny/di").Abstraction<IEnableTenantUseCase>;
15
+ export declare namespace EnableTenantUseCase {
16
+ type Interface = IEnableTenantUseCase;
17
+ type Error = UseCaseError;
18
+ }
19
+ export {};
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const EnableTenantUseCase = createAbstraction("TenantManager/EnableTenantUseCase");
3
+ export { EnableTenantUseCase };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,27 @@
1
+ import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
2
+ import type { IEventHandler } from "@webiny/api-core/features/eventPublisher/index.js";
3
+ import type { Tenant } from "../../../shared/Tenant.js";
4
+ export interface TenantBeforeEnablePayload {
5
+ tenant: Tenant;
6
+ }
7
+ export interface TenantAfterEnablePayload {
8
+ tenant: Tenant;
9
+ }
10
+ export declare class TenantBeforeEnableEvent extends DomainEvent<TenantBeforeEnablePayload> {
11
+ eventType: "tenant.beforeEnable";
12
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TenantBeforeEnableEvent>>;
13
+ }
14
+ export declare const TenantBeforeEnableEventHandler: import("@webiny/di").Abstraction<IEventHandler<TenantBeforeEnableEvent>>;
15
+ export declare namespace TenantBeforeEnableEventHandler {
16
+ type Interface = IEventHandler<TenantBeforeEnableEvent>;
17
+ type Event = TenantBeforeEnableEvent;
18
+ }
19
+ export declare class TenantAfterEnableEvent extends DomainEvent<TenantAfterEnablePayload> {
20
+ eventType: "tenant.afterEnable";
21
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TenantAfterEnableEvent>>;
22
+ }
23
+ export declare const TenantAfterEnableEventHandler: import("@webiny/di").Abstraction<IEventHandler<TenantAfterEnableEvent>>;
24
+ export declare namespace TenantAfterEnableEventHandler {
25
+ type Interface = IEventHandler<TenantAfterEnableEvent>;
26
+ type Event = TenantAfterEnableEvent;
27
+ }
@@ -0,0 +1,23 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ import { DomainEvent } from "@webiny/api-core/features/eventPublisher/index.js";
3
+ class TenantBeforeEnableEvent extends DomainEvent {
4
+ getHandlerAbstraction() {
5
+ return TenantBeforeEnableEventHandler;
6
+ }
7
+ constructor(...args){
8
+ super(...args), this.eventType = "tenant.beforeEnable";
9
+ }
10
+ }
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
+ }
19
+ }
20
+ const TenantAfterEnableEventHandler = createAbstraction("TenantManager/TenantAfterEnableEventHandler");
21
+ export { TenantAfterEnableEvent, TenantAfterEnableEventHandler, TenantBeforeEnableEvent, TenantBeforeEnableEventHandler };
22
+
23
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,4 @@
1
+ export declare const EnableTenantFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import EnableTenantUseCase from "./EnableTenantUseCase.js";
3
+ const EnableTenantFeature = createFeature({
4
+ name: "EnableTenant",
5
+ register (container) {
6
+ container.register(EnableTenantUseCase);
7
+ }
8
+ });
9
+ export { EnableTenantFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,17 @@
1
+ import { Tenant } from "../../../shared/Tenant.js";
2
+ import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
3
+ import { GetCurrentTenantUseCase as UseCaseAbstraction } from "./abstractions.js";
4
+ import { TenantContext } from "@webiny/api-core/exports/api/tenancy.js";
5
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
6
+ import { Result } from "@webiny/feature/api";
7
+ declare class GetCurrentTenantUseCase implements UseCaseAbstraction.Interface {
8
+ private tenantContext;
9
+ private identityContext;
10
+ private getTenantByIdUseCase;
11
+ constructor(tenantContext: TenantContext.Interface, identityContext: IdentityContext.Interface, getTenantByIdUseCase: GetTenantByIdUseCase.Interface);
12
+ execute(): Promise<Result<Tenant, UseCaseAbstraction.Error>>;
13
+ }
14
+ declare const _default: typeof GetCurrentTenantUseCase & {
15
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetCurrentTenantUseCase>;
16
+ };
17
+ export default _default;
@@ -0,0 +1,32 @@
1
+ import { GetTenantByIdUseCase } from "../GetTenantById/abstractions.js";
2
+ import { GetCurrentTenantUseCase } from "./abstractions.js";
3
+ import { TenantContext } from "@webiny/api-core/exports/api/tenancy.js";
4
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
5
+ import { Result } from "@webiny/feature/api";
6
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/index.js";
7
+ class GetCurrentTenantUseCase_GetCurrentTenantUseCase {
8
+ constructor(tenantContext, identityContext, getTenantByIdUseCase){
9
+ this.tenantContext = tenantContext;
10
+ this.identityContext = identityContext;
11
+ this.getTenantByIdUseCase = getTenantByIdUseCase;
12
+ }
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);
20
+ }
21
+ }
22
+ const GetCurrentTenant_GetCurrentTenantUseCase = GetCurrentTenantUseCase.createImplementation({
23
+ implementation: GetCurrentTenantUseCase_GetCurrentTenantUseCase,
24
+ dependencies: [
25
+ TenantContext,
26
+ IdentityContext,
27
+ GetTenantByIdUseCase
28
+ ]
29
+ });
30
+ export default GetCurrentTenant_GetCurrentTenantUseCase;
31
+
32
+ //# sourceMappingURL=GetCurrentTenantUseCase.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,24 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/errors.js";
3
+ import type { Tenant } from "../../../shared/Tenant.js";
4
+ import type { TenantModelNotFoundError, TenantNotFoundError, TenantPersistenceError } from "../../domain/errors.js";
5
+ /**
6
+ * GetCurrentTenant Use Case
7
+ * Gets the tenant associated with the current tenant context
8
+ */
9
+ export interface IGetCurrentTenantUseCase {
10
+ execute(): Promise<Result<Tenant, UseCaseError>>;
11
+ }
12
+ export interface IGetCurrentTenantUseCaseErrors {
13
+ notFound: TenantNotFoundError;
14
+ notAuthorized: NotAuthorizedError;
15
+ persistence: TenantPersistenceError;
16
+ modelNotFoundError: TenantModelNotFoundError;
17
+ }
18
+ type UseCaseError = IGetCurrentTenantUseCaseErrors[keyof IGetCurrentTenantUseCaseErrors];
19
+ export declare const GetCurrentTenantUseCase: import("@webiny/di").Abstraction<IGetCurrentTenantUseCase>;
20
+ export declare namespace GetCurrentTenantUseCase {
21
+ type Interface = IGetCurrentTenantUseCase;
22
+ type Error = UseCaseError;
23
+ }
24
+ export {};
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const GetCurrentTenantUseCase = createAbstraction("TenantManager/GetCurrentTenantUseCase");
3
+ export { GetCurrentTenantUseCase };
4
+
5
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,4 @@
1
+ export declare const GetCurrentTenantFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,11 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import GetCurrentTenantUseCase from "./GetCurrentTenantUseCase.js";
3
+ const GetCurrentTenantFeature = createFeature({
4
+ name: "GetCurrentTenant",
5
+ register (container) {
6
+ container.register(GetCurrentTenantUseCase);
7
+ }
8
+ });
9
+ export { GetCurrentTenantFeature };
10
+
11
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,17 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { Tenant } from "../../../shared/Tenant.js";
3
+ import { GetTenantByIdRepository as RepositoryAbstraction } from "./abstractions.js";
4
+ import { TenantContext } from "@webiny/api-core/exports/api/tenancy.js";
5
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js";
6
+ import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/abstractions.js";
7
+ declare class GetTenantByIdRepository implements RepositoryAbstraction.Interface {
8
+ private tenantContext;
9
+ private getModelUseCase;
10
+ private getEntryUseCase;
11
+ constructor(tenantContext: TenantContext.Interface, getModelUseCase: GetModelUseCase.Interface, getEntryUseCase: GetEntryByIdUseCase.Interface);
12
+ execute(id: string): Promise<Result<Tenant, RepositoryAbstraction.Error>>;
13
+ }
14
+ declare const _default: typeof GetTenantByIdRepository & {
15
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetTenantByIdRepository>;
16
+ };
17
+ export default _default;
@@ -0,0 +1,44 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { Tenant } from "../../../shared/Tenant.js";
3
+ import { TENANT_MODEL_ID } from "../../../shared/constants.js";
4
+ import { TenantModelNotFoundError, TenantNotFoundError, TenantPersistenceError } from "../../domain/errors.js";
5
+ import { GetTenantByIdRepository } from "./abstractions.js";
6
+ import { TenantContext } from "@webiny/api-core/exports/api/tenancy.js";
7
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js";
8
+ import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/abstractions.js";
9
+ import { EntryId } from "@webiny/api-headless-cms/domain/contentEntry/EntryId.js";
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
+ }
32
+ }
33
+ }
34
+ const GetTenantById_GetTenantByIdRepository = GetTenantByIdRepository.createImplementation({
35
+ implementation: GetTenantByIdRepository_GetTenantByIdRepository,
36
+ dependencies: [
37
+ TenantContext,
38
+ GetModelUseCase,
39
+ GetEntryByIdUseCase
40
+ ]
41
+ });
42
+ export default GetTenantById_GetTenantByIdRepository;
43
+
44
+ //# sourceMappingURL=GetTenantByIdRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/GetTenantById/GetTenantByIdRepository.js","sources":["../../../../src/api/features/GetTenantById/GetTenantByIdRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { Tenant, TenantDto, TenantValues } from \"~/shared/Tenant.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport {\n TenantModelNotFoundError,\n TenantNotFoundError,\n TenantPersistenceError\n} from \"../../domain/errors.js\";\nimport { GetTenantByIdRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { TenantContext } from \"@webiny/api-core/exports/api/tenancy.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/abstractions.js\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById/abstractions.js\";\nimport { EntryId } from \"@webiny/api-headless-cms/domain/contentEntry/EntryId.js\";\n\nclass GetTenantByIdRepository implements RepositoryAbstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryUseCase: GetEntryByIdUseCase.Interface\n ) {}\n\n async execute(id: string): Promise<Result<Tenant, RepositoryAbstraction.Error>> {\n try {\n const entryId = EntryId.from(id);\n\n // Get the tenant model\n const modelResult = await this.getModelUseCase.execute(TENANT_MODEL_ID);\n if (modelResult.isFail()) {\n return Result.fail(new TenantModelNotFoundError());\n }\n\n // Get the tenant entry\n const entryResult = await this.tenantContext.withRootTenant(() => {\n return this.getEntryUseCase.execute<TenantValues>(\n modelResult.value,\n entryId.toString()\n );\n });\n\n if (entryResult.isFail()) {\n return Result.fail(new TenantNotFoundError(id));\n }\n\n const tenantEntry = entryResult.value;\n\n const tenantDto: TenantDto = {\n id: tenantEntry.entryId,\n values: tenantEntry.values\n };\n\n return Result.ok(Tenant.from(tenantDto));\n } catch (error) {\n return Result.fail(new TenantPersistenceError(error as Error));\n }\n }\n}\n\nexport default RepositoryAbstraction.createImplementation({\n implementation: GetTenantByIdRepository,\n dependencies: [TenantContext, GetModelUseCase, GetEntryByIdUseCase]\n});\n"],"names":["GetTenantByIdRepository","tenantContext","getModelUseCase","getEntryUseCase","id","entryId","EntryId","modelResult","TENANT_MODEL_ID","Result","TenantModelNotFoundError","entryResult","TenantNotFoundError","tenantEntry","tenantDto","Tenant","error","TenantPersistenceError","RepositoryAbstraction","TenantContext","GetModelUseCase","GetEntryByIdUseCase"],"mappings":";;;;;;;;;AAcA,MAAMA;IACF,YACYC,aAAsC,EACtCC,eAA0C,EAC1CC,eAA8C,CACxD;aAHUF,aAAa,GAAbA;aACAC,eAAe,GAAfA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAM,QAAQC,EAAU,EAAwD;QAC5E,IAAI;YACA,MAAMC,UAAUC,QAAQ,IAAI,CAACF;YAG7B,MAAMG,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACC;YACvD,IAAID,YAAY,MAAM,IAClB,OAAOE,OAAO,IAAI,CAAC,IAAIC;YAI3B,MAAMC,cAAc,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IACjD,IAAI,CAAC,eAAe,CAAC,OAAO,CAC/BJ,YAAY,KAAK,EACjBF,QAAQ,QAAQ;YAIxB,IAAIM,YAAY,MAAM,IAClB,OAAOF,OAAO,IAAI,CAAC,IAAIG,oBAAoBR;YAG/C,MAAMS,cAAcF,YAAY,KAAK;YAErC,MAAMG,YAAuB;gBACzB,IAAID,YAAY,OAAO;gBACvB,QAAQA,YAAY,MAAM;YAC9B;YAEA,OAAOJ,OAAO,EAAE,CAACM,OAAO,IAAI,CAACD;QACjC,EAAE,OAAOE,OAAO;YACZ,OAAOP,OAAO,IAAI,CAAC,IAAIQ,uBAAuBD;QAClD;IACJ;AACJ;AAEA,8CAAeE,wBAAAA,oBAA0C,CAAC;IACtD,gBAAgBlB;IAChB,cAAc;QAACmB;QAAeC;QAAiBC;KAAoB;AACvE"}
@@ -0,0 +1,12 @@
1
+ import { Tenant } from "../../../shared/Tenant.js";
2
+ import { GetTenantByIdUseCase as UseCaseAbstraction, GetTenantByIdRepository } from "./abstractions.js";
3
+ import { Result } from "@webiny/feature/api";
4
+ declare class GetTenantByIdUseCase implements UseCaseAbstraction.Interface {
5
+ private repository;
6
+ constructor(repository: GetTenantByIdRepository.Interface);
7
+ execute(id: string): Promise<Result<Tenant, UseCaseAbstraction.Error>>;
8
+ }
9
+ declare const _default: typeof GetTenantByIdUseCase & {
10
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IGetTenantByIdUseCase>;
11
+ };
12
+ export default _default;
@@ -0,0 +1,23 @@
1
+ import { Tenant, rootTenantDto } from "../../../shared/Tenant.js";
2
+ import { GetTenantByIdRepository, GetTenantByIdUseCase } from "./abstractions.js";
3
+ import { Result } from "@webiny/feature/api";
4
+ class GetTenantByIdUseCase_GetTenantByIdUseCase {
5
+ constructor(repository){
6
+ this.repository = repository;
7
+ }
8
+ async execute(id) {
9
+ if ("root" === id) return Result.ok(Tenant.from(rootTenantDto));
10
+ const result = await this.repository.execute(id);
11
+ if (result.isFail()) return Result.fail(result.error);
12
+ return Result.ok(result.value);
13
+ }
14
+ }
15
+ const GetTenantById_GetTenantByIdUseCase = GetTenantByIdUseCase.createImplementation({
16
+ implementation: GetTenantByIdUseCase_GetTenantByIdUseCase,
17
+ dependencies: [
18
+ GetTenantByIdRepository
19
+ ]
20
+ });
21
+ export default GetTenantById_GetTenantByIdUseCase;
22
+
23
+ //# sourceMappingURL=GetTenantByIdUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/GetTenantById/GetTenantByIdUseCase.js","sources":["../../../../src/api/features/GetTenantById/GetTenantByIdUseCase.ts"],"sourcesContent":["import { Tenant, rootTenantDto } from \"~/shared/Tenant.js\";\nimport {\n GetTenantByIdUseCase as UseCaseAbstraction,\n GetTenantByIdRepository\n} from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\n\nclass GetTenantByIdUseCase implements UseCaseAbstraction.Interface {\n constructor(private repository: GetTenantByIdRepository.Interface) {}\n\n async execute(id: string): Promise<Result<Tenant, UseCaseAbstraction.Error>> {\n // Handle special root tenant case\n if (id === \"root\") {\n return Result.ok(Tenant.from(rootTenantDto));\n }\n\n // Delegate to repository\n const result = await this.repository.execute(id);\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: GetTenantByIdUseCase,\n dependencies: [GetTenantByIdRepository]\n});\n"],"names":["GetTenantByIdUseCase","repository","id","Result","Tenant","rootTenantDto","result","UseCaseAbstraction","GetTenantByIdRepository"],"mappings":";;;AAOA,MAAMA;IACF,YAAoBC,UAA6C,CAAE;aAA/CA,UAAU,GAAVA;IAAgD;IAEpE,MAAM,QAAQC,EAAU,EAAqD;QAEzE,IAAIA,AAAO,WAAPA,IACA,OAAOC,OAAO,EAAE,CAACC,OAAO,IAAI,CAACC;QAIjC,MAAMC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACJ;QAC7C,IAAII,OAAO,MAAM,IACb,OAAOH,OAAO,IAAI,CAACG,OAAO,KAAK;QAGnC,OAAOH,OAAO,EAAE,CAACG,OAAO,KAAK;IACjC;AACJ;AAEA,2CAAeC,qBAAAA,oBAAuC,CAAC;IACnD,gBAAgBP;IAChB,cAAc;QAACQ;KAAwB;AAC3C"}
@@ -0,0 +1,38 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import type { Tenant } from "../../../shared/Tenant.js";
3
+ import { TenantModelNotFoundError, type TenantNotFoundError, type TenantPersistenceError } from "../../domain/errors.js";
4
+ /**
5
+ * GetTenantById Use Case
6
+ */
7
+ export interface IGetTenantByIdUseCase {
8
+ execute(id: string): Promise<Result<Tenant, UseCaseError>>;
9
+ }
10
+ export interface IGetTenantByIdUseCaseErrors {
11
+ notFound: TenantNotFoundError;
12
+ persistence: TenantPersistenceError;
13
+ modelNotFoundError: TenantModelNotFoundError;
14
+ }
15
+ type UseCaseError = IGetTenantByIdUseCaseErrors[keyof IGetTenantByIdUseCaseErrors];
16
+ export declare const GetTenantByIdUseCase: import("@webiny/di").Abstraction<IGetTenantByIdUseCase>;
17
+ export declare namespace GetTenantByIdUseCase {
18
+ type Interface = IGetTenantByIdUseCase;
19
+ type Error = UseCaseError;
20
+ }
21
+ /**
22
+ * GetTenantByIdRepository - Retrieves a tenant from storage.
23
+ */
24
+ export interface IGetTenantByIdRepository {
25
+ execute(id: string): Promise<Result<Tenant, RepositoryError>>;
26
+ }
27
+ export interface IGetTenantByIdRepositoryErrors {
28
+ notFound: TenantNotFoundError;
29
+ persistence: TenantPersistenceError;
30
+ modelNotFoundError: TenantModelNotFoundError;
31
+ }
32
+ type RepositoryError = IGetTenantByIdRepositoryErrors[keyof IGetTenantByIdRepositoryErrors];
33
+ export declare const GetTenantByIdRepository: import("@webiny/di").Abstraction<IGetTenantByIdRepository>;
34
+ export declare namespace GetTenantByIdRepository {
35
+ type Interface = IGetTenantByIdRepository;
36
+ type Error = RepositoryError;
37
+ }
38
+ export {};
@@ -0,0 +1,6 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const GetTenantByIdUseCase = createAbstraction("TenantManager/GetTenantByIdUseCase");
3
+ const GetTenantByIdRepository = createAbstraction("TenantManager/GetTenantByIdRepository");
4
+ export { GetTenantByIdRepository, GetTenantByIdUseCase };
5
+
6
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/GetTenantById/abstractions.js","sources":["../../../../src/api/features/GetTenantById/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Tenant } from \"../../../shared/Tenant.js\";\nimport {\n TenantModelNotFoundError,\n type TenantNotFoundError,\n type TenantPersistenceError\n} from \"../../domain/errors.js\";\n\n/**\n * GetTenantById Use Case\n */\nexport interface IGetTenantByIdUseCase {\n execute(id: string): Promise<Result<Tenant, UseCaseError>>;\n}\n\nexport interface IGetTenantByIdUseCaseErrors {\n notFound: TenantNotFoundError;\n persistence: TenantPersistenceError;\n modelNotFoundError: TenantModelNotFoundError;\n}\n\ntype UseCaseError = IGetTenantByIdUseCaseErrors[keyof IGetTenantByIdUseCaseErrors];\n\nexport const GetTenantByIdUseCase = createAbstraction<IGetTenantByIdUseCase>(\n \"TenantManager/GetTenantByIdUseCase\"\n);\n\nexport namespace GetTenantByIdUseCase {\n export type Interface = IGetTenantByIdUseCase;\n export type Error = UseCaseError;\n}\n\n/**\n * GetTenantByIdRepository - Retrieves a tenant from storage.\n */\nexport interface IGetTenantByIdRepository {\n execute(id: string): Promise<Result<Tenant, RepositoryError>>;\n}\n\nexport interface IGetTenantByIdRepositoryErrors {\n notFound: TenantNotFoundError;\n persistence: TenantPersistenceError;\n modelNotFoundError: TenantModelNotFoundError;\n}\n\ntype RepositoryError = IGetTenantByIdRepositoryErrors[keyof IGetTenantByIdRepositoryErrors];\n\nexport const GetTenantByIdRepository = createAbstraction<IGetTenantByIdRepository>(\n \"TenantManager/GetTenantByIdRepository\"\n);\n\nexport namespace GetTenantByIdRepository {\n export type Interface = IGetTenantByIdRepository;\n export type Error = RepositoryError;\n}\n"],"names":["GetTenantByIdUseCase","createAbstraction","GetTenantByIdRepository"],"mappings":";AAwBO,MAAMA,uBAAuBC,kBAChC;AAuBG,MAAMC,0BAA0BD,kBACnC"}
@@ -0,0 +1,4 @@
1
+ export declare const GetTenantByIdFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,13 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import GetTenantByIdUseCase from "./GetTenantByIdUseCase.js";
3
+ import GetTenantByIdRepository from "./GetTenantByIdRepository.js";
4
+ const GetTenantByIdFeature = createFeature({
5
+ name: "GetTenantById",
6
+ register (container) {
7
+ container.register(GetTenantByIdUseCase);
8
+ container.register(GetTenantByIdRepository).inSingletonScope();
9
+ }
10
+ });
11
+ export { GetTenantByIdFeature };
12
+
13
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/GetTenantById/feature.js","sources":["../../../../src/api/features/GetTenantById/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport GetTenantByIdUseCase from \"./GetTenantByIdUseCase.js\";\nimport GetTenantByIdRepository from \"./GetTenantByIdRepository.js\";\n\nexport const GetTenantByIdFeature = createFeature({\n name: \"GetTenantById\",\n register(container) {\n // Register use case (transient scope)\n container.register(GetTenantByIdUseCase);\n\n // Register repository (singleton scope)\n container.register(GetTenantByIdRepository).inSingletonScope();\n }\n});\n"],"names":["GetTenantByIdFeature","createFeature","container","GetTenantByIdUseCase","GetTenantByIdRepository"],"mappings":";;;AAIO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QAEdA,UAAU,QAAQ,CAACC;QAGnBD,UAAU,QAAQ,CAACE,yBAAyB,gBAAgB;IAChE;AACJ"}
@@ -0,0 +1,17 @@
1
+ import { Tenant } from "../../../shared/Tenant.js";
2
+ import { UpdateTenantRepository as RepositoryAbstraction, UpdateTenantInput } from "./abstractions.js";
3
+ import { Result } from "@webiny/feature/api";
4
+ import { GetEntryUseCase } from "@webiny/api-headless-cms/exports/api/cms/entry.js";
5
+ import { UpdateEntryUseCase } from "@webiny/api-headless-cms/exports/api/cms/entry.js";
6
+ import { GetModelUseCase } from "@webiny/api-headless-cms/exports/api/cms/model";
7
+ declare class UpdateTenantRepository implements RepositoryAbstraction.Interface {
8
+ private getModelUseCase;
9
+ private getEntryUseCase;
10
+ private updateEntryUseCase;
11
+ constructor(getModelUseCase: GetModelUseCase.Interface, getEntryUseCase: GetEntryUseCase.Interface, updateEntryUseCase: UpdateEntryUseCase.Interface);
12
+ execute(id: string, input: UpdateTenantInput): Promise<Result<Tenant, RepositoryAbstraction.Error>>;
13
+ }
14
+ declare const _default: typeof UpdateTenantRepository & {
15
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateTenantRepository>;
16
+ };
17
+ export default _default;
@@ -0,0 +1,51 @@
1
+ import { Tenant } from "../../../shared/Tenant.js";
2
+ import { TENANT_MODEL_ID } from "../../../shared/constants.js";
3
+ import { TenantNotFoundError, TenantPersistenceError } from "../../domain/errors.js";
4
+ import { UpdateTenantRepository } from "./abstractions.js";
5
+ import { Result } from "@webiny/feature/api";
6
+ import { EntryId, GetEntryUseCase, UpdateEntryUseCase } from "@webiny/api-headless-cms/exports/api/cms/entry.js";
7
+ import { GetModelUseCase } from "@webiny/api-headless-cms/exports/api/cms/model";
8
+ class UpdateTenantRepository_UpdateTenantRepository {
9
+ constructor(getModelUseCase, getEntryUseCase, updateEntryUseCase){
10
+ this.getModelUseCase = getModelUseCase;
11
+ this.getEntryUseCase = getEntryUseCase;
12
+ this.updateEntryUseCase = updateEntryUseCase;
13
+ }
14
+ async execute(id, input) {
15
+ try {
16
+ const entryId = EntryId.from(id);
17
+ const modelResult = await this.getModelUseCase.execute(TENANT_MODEL_ID);
18
+ if (modelResult.isFail()) return Result.fail(new TenantPersistenceError(new Error(`Model "${TENANT_MODEL_ID}" was not found!`)));
19
+ const getEntryResult = await this.getEntryUseCase.execute(modelResult.value, {
20
+ where: {
21
+ entryId: entryId.id,
22
+ latest: true
23
+ }
24
+ });
25
+ if (getEntryResult.isFail()) return Result.fail(new TenantNotFoundError(id));
26
+ const updateResult = await this.updateEntryUseCase.execute(modelResult.value, entryId.toString(), {
27
+ values: input
28
+ });
29
+ if (updateResult.isFail()) return Result.fail(new TenantPersistenceError(updateResult.error));
30
+ const updatedEntry = updateResult.value;
31
+ const tenantDto = {
32
+ id: updatedEntry.entryId,
33
+ values: updatedEntry.values
34
+ };
35
+ return Result.ok(Tenant.from(tenantDto));
36
+ } catch (error) {
37
+ return Result.fail(new TenantPersistenceError(error));
38
+ }
39
+ }
40
+ }
41
+ const UpdateTenant_UpdateTenantRepository = UpdateTenantRepository.createImplementation({
42
+ implementation: UpdateTenantRepository_UpdateTenantRepository,
43
+ dependencies: [
44
+ GetModelUseCase,
45
+ GetEntryUseCase,
46
+ UpdateEntryUseCase
47
+ ]
48
+ });
49
+ export default UpdateTenant_UpdateTenantRepository;
50
+
51
+ //# sourceMappingURL=UpdateTenantRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/features/UpdateTenant/UpdateTenantRepository.js","sources":["../../../../src/api/features/UpdateTenant/UpdateTenantRepository.ts"],"sourcesContent":["import { Tenant, TenantDto, TenantValues } from \"~/shared/Tenant.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport { TenantNotFoundError, TenantPersistenceError } from \"../../domain/errors.js\";\nimport {\n UpdateTenantRepository as RepositoryAbstraction,\n UpdateTenantInput\n} from \"./abstractions.js\";\nimport { Result } from \"@webiny/feature/api\";\nimport { EntryId } from \"@webiny/api-headless-cms/exports/api/cms/entry.js\";\nimport { GetEntryUseCase } from \"@webiny/api-headless-cms/exports/api/cms/entry.js\";\nimport { UpdateEntryUseCase } from \"@webiny/api-headless-cms/exports/api/cms/entry.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/exports/api/cms/model\";\n\nclass UpdateTenantRepository implements RepositoryAbstraction.Interface {\n constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryUseCase: GetEntryUseCase.Interface,\n private updateEntryUseCase: UpdateEntryUseCase.Interface\n ) {}\n\n async execute(\n id: string,\n input: UpdateTenantInput\n ): Promise<Result<Tenant, RepositoryAbstraction.Error>> {\n try {\n const entryId = EntryId.from(id);\n\n // Get the tenant model\n const modelResult = await this.getModelUseCase.execute(TENANT_MODEL_ID);\n if (modelResult.isFail()) {\n return Result.fail(\n new TenantPersistenceError(\n new Error(`Model \"${TENANT_MODEL_ID}\" was not found!`)\n )\n );\n }\n\n // Get the current tenant entry to verify it exists\n const getEntryResult = await this.getEntryUseCase.execute<TenantValues>(\n modelResult.value,\n {\n where: { entryId: entryId.id, latest: true }\n }\n );\n\n if (getEntryResult.isFail()) {\n return Result.fail(new TenantNotFoundError(id));\n }\n\n const updateResult = await this.updateEntryUseCase.execute(\n modelResult.value,\n entryId.toString(),\n {\n values: input\n }\n );\n\n if (updateResult.isFail()) {\n return Result.fail(new TenantPersistenceError(updateResult.error));\n }\n\n const updatedEntry = updateResult.value;\n\n const tenantDto: TenantDto = {\n id: updatedEntry.entryId,\n values: updatedEntry.values as TenantValues\n };\n\n return Result.ok(Tenant.from(tenantDto));\n } catch (error) {\n return Result.fail(new TenantPersistenceError(error));\n }\n }\n}\n\nexport default RepositoryAbstraction.createImplementation({\n implementation: UpdateTenantRepository,\n dependencies: [GetModelUseCase, GetEntryUseCase, UpdateEntryUseCase]\n});\n"],"names":["UpdateTenantRepository","getModelUseCase","getEntryUseCase","updateEntryUseCase","id","input","entryId","EntryId","modelResult","TENANT_MODEL_ID","Result","TenantPersistenceError","Error","getEntryResult","TenantNotFoundError","updateResult","updatedEntry","tenantDto","Tenant","error","RepositoryAbstraction","GetModelUseCase","GetEntryUseCase","UpdateEntryUseCase"],"mappings":";;;;;;;AAaA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,eAA0C,EAC1CC,kBAAgD,CAC1D;aAHUF,eAAe,GAAfA;aACAC,eAAe,GAAfA;aACAC,kBAAkB,GAAlBA;IACT;IAEH,MAAM,QACFC,EAAU,EACVC,KAAwB,EAC4B;QACpD,IAAI;YACA,MAAMC,UAAUC,QAAQ,IAAI,CAACH;YAG7B,MAAMI,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACC;YACvD,IAAID,YAAY,MAAM,IAClB,OAAOE,OAAO,IAAI,CACd,IAAIC,uBACA,IAAIC,MAAM,CAAC,OAAO,EAAEH,gBAAgB,gBAAgB,CAAC;YAMjE,MAAMI,iBAAiB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CACrDL,YAAY,KAAK,EACjB;gBACI,OAAO;oBAAE,SAASF,QAAQ,EAAE;oBAAE,QAAQ;gBAAK;YAC/C;YAGJ,IAAIO,eAAe,MAAM,IACrB,OAAOH,OAAO,IAAI,CAAC,IAAII,oBAAoBV;YAG/C,MAAMW,eAAe,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CACtDP,YAAY,KAAK,EACjBF,QAAQ,QAAQ,IAChB;gBACI,QAAQD;YACZ;YAGJ,IAAIU,aAAa,MAAM,IACnB,OAAOL,OAAO,IAAI,CAAC,IAAIC,uBAAuBI,aAAa,KAAK;YAGpE,MAAMC,eAAeD,aAAa,KAAK;YAEvC,MAAME,YAAuB;gBACzB,IAAID,aAAa,OAAO;gBACxB,QAAQA,aAAa,MAAM;YAC/B;YAEA,OAAON,OAAO,EAAE,CAACQ,OAAO,IAAI,CAACD;QACjC,EAAE,OAAOE,OAAO;YACZ,OAAOT,OAAO,IAAI,CAAC,IAAIC,uBAAuBQ;QAClD;IACJ;AACJ;AAEA,4CAAeC,uBAAAA,oBAA0C,CAAC;IACtD,gBAAgBpB;IAChB,cAAc;QAACqB;QAAiBC;QAAiBC;KAAmB;AACxE"}
@@ -0,0 +1,12 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import { Tenant } from "../../../shared/Tenant.js";
3
+ import { UpdateTenantUseCase as UseCaseAbstraction, UpdateTenantRepository, UpdateTenantInput } from "./abstractions.js";
4
+ declare class UpdateTenantUseCase implements UseCaseAbstraction.Interface {
5
+ private repository;
6
+ constructor(repository: UpdateTenantRepository.Interface);
7
+ execute(id: string, input: UpdateTenantInput): Promise<Result<Tenant, UseCaseAbstraction.Error>>;
8
+ }
9
+ declare const _default: typeof UpdateTenantUseCase & {
10
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IUpdateTenantUseCase>;
11
+ };
12
+ export default _default;