@owox/backend 0.0.0 → 0.1.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.
Files changed (214) hide show
  1. package/dist/commands/create-migration-template.js +8 -0
  2. package/dist/public/assets/index-CISA6IwH.css +1 -0
  3. package/dist/public/assets/index-xNsUEA9g.js +550 -0
  4. package/dist/public/index.html +2 -2
  5. package/dist/{app.module.js → src/app.module.js} +2 -5
  6. package/dist/src/common/schemas/google-service-account-key.schema.js +33 -0
  7. package/dist/src/common/zod/zod-transformer.js +14 -0
  8. package/dist/src/config/data-source-options.config.js +49 -0
  9. package/dist/{config → src/config}/express-static.config.js +7 -3
  10. package/dist/src/config/get-sqlite-database-path.js +36 -0
  11. package/dist/src/config/migrations.config.js +30 -0
  12. package/dist/src/data-marts/connector-types/connector-definition.js +11 -0
  13. package/dist/src/data-marts/connector-types/connector-fields-schema.js +18 -0
  14. package/dist/src/data-marts/connector-types/connector-specification.js +20 -0
  15. package/dist/src/data-marts/controllers/connector.controller.js +79 -0
  16. package/dist/src/data-marts/controllers/data-destination.controller.js +124 -0
  17. package/dist/{data-marts → src/data-marts}/controllers/data-mart.controller.js +20 -2
  18. package/dist/src/data-marts/controllers/report.controller.js +159 -0
  19. package/dist/src/data-marts/controllers/spec/connector.api.js +20 -0
  20. package/dist/src/data-marts/controllers/spec/data-destination.api.js +28 -0
  21. package/dist/{data-marts → src/data-marts}/controllers/spec/data-mart.api.js +4 -0
  22. package/dist/src/data-marts/controllers/spec/report.api.js +55 -0
  23. package/dist/src/data-marts/data-destination-types/data-destination-config.guards.js +13 -0
  24. package/dist/src/data-marts/data-destination-types/data-destination-config.type.js +7 -0
  25. package/dist/src/data-marts/data-destination-types/data-destination-credentials.guards.js +13 -0
  26. package/dist/src/data-marts/data-destination-types/data-destination-credentials.type.js +9 -0
  27. package/dist/src/data-marts/data-destination-types/data-destination-facades.js +10 -0
  28. package/dist/src/data-marts/data-destination-types/data-destination-providers.js +40 -0
  29. package/dist/src/data-marts/data-destination-types/enums/data-destination-type.enum.js +17 -0
  30. package/dist/src/data-marts/data-destination-types/facades/data-destination-access-validator.facade.js +40 -0
  31. package/dist/{data-marts/data-storage-types/facades/data-storage-title.facade.js → src/data-marts/data-destination-types/facades/data-destination-credentials-validator.facade.js} +13 -13
  32. package/dist/{data-marts/data-storage-types/athena/services/athena-title.generator.js → src/data-marts/data-destination-types/google-sheets/adapters/google-sheets-api-adapter.factory.js} +9 -12
  33. package/dist/src/data-marts/data-destination-types/google-sheets/adapters/google-sheets-api.adapter.js +104 -0
  34. package/dist/src/data-marts/data-destination-types/google-sheets/schemas/google-sheets-config.schema.js +11 -0
  35. package/dist/src/data-marts/data-destination-types/google-sheets/schemas/google-sheets-credentials.schema.js +13 -0
  36. package/dist/src/data-marts/data-destination-types/google-sheets/services/google-sheets-access-validator.js +59 -0
  37. package/dist/src/data-marts/data-destination-types/google-sheets/services/google-sheets-credentials-validator.js +45 -0
  38. package/dist/src/data-marts/data-destination-types/google-sheets/services/google-sheets-report-writer.js +158 -0
  39. package/dist/src/data-marts/data-destination-types/google-sheets/services/sheet-formatters/sheet-header-formatter.js +54 -0
  40. package/dist/src/data-marts/data-destination-types/google-sheets/services/sheet-formatters/sheet-metadata-formatter.js +60 -0
  41. package/dist/src/data-marts/data-destination-types/interfaces/data-destination-access-validator.interface.js +17 -0
  42. package/dist/src/data-marts/data-destination-types/interfaces/data-destination-credentials-validator.interface.js +15 -0
  43. package/dist/src/data-marts/data-destination-types/interfaces/data-destination-report-writer.interface.js +3 -0
  44. package/dist/src/data-marts/data-marts.module.js +127 -0
  45. package/dist/{data-marts/data-storage-types/bigquery/services/bigquery-title.generator.js → src/data-marts/data-storage-types/athena/adapters/athena-api-adapter.factory.js} +9 -12
  46. package/dist/src/data-marts/data-storage-types/athena/adapters/athena-api.adapter.js +91 -0
  47. package/dist/src/data-marts/data-storage-types/athena/adapters/s3-api-adapter.factory.js +21 -0
  48. package/dist/src/data-marts/data-storage-types/athena/adapters/s3-api.adapter.js +53 -0
  49. package/dist/src/data-marts/data-storage-types/athena/services/athena-report-reader.service.js +158 -0
  50. package/dist/src/data-marts/data-storage-types/bigquery/adapters/bigquery-api-adapter.factory.js +21 -0
  51. package/dist/src/data-marts/data-storage-types/bigquery/adapters/bigquery-api.adapter.js +36 -0
  52. package/dist/src/data-marts/data-storage-types/bigquery/schemas/bigquery-credentials.schema.js +6 -0
  53. package/dist/src/data-marts/data-storage-types/bigquery/services/bigquery-report-reader.service.js +132 -0
  54. package/dist/src/data-marts/data-storage-types/data-storage-config.guards.js +13 -0
  55. package/dist/src/data-marts/data-storage-types/data-storage-credentials.guards.js +13 -0
  56. package/dist/src/data-marts/data-storage-types/data-storage-credentials.type.js +3 -0
  57. package/dist/src/data-marts/data-storage-types/data-storage-facades.js +6 -0
  58. package/dist/src/data-marts/data-storage-types/data-storage-providers.js +32 -0
  59. package/dist/src/data-marts/data-storage-types/interfaces/data-storage-report-reader.interface.js +3 -0
  60. package/dist/src/data-marts/dto/domain/create-data-destination.command.js +17 -0
  61. package/dist/src/data-marts/dto/domain/create-report.command.js +21 -0
  62. package/dist/src/data-marts/dto/domain/data-destination.dto.js +23 -0
  63. package/dist/src/data-marts/dto/domain/delete-data-destination.command.js +13 -0
  64. package/dist/src/data-marts/dto/domain/get-data-destination.command.js +13 -0
  65. package/dist/src/data-marts/dto/domain/get-report.command.js +15 -0
  66. package/dist/src/data-marts/dto/domain/list-data-destinations.command.js +11 -0
  67. package/dist/src/data-marts/dto/domain/list-reports-by-data-mart.command.js +15 -0
  68. package/dist/src/data-marts/dto/domain/list-reports-by-project.command.js +13 -0
  69. package/dist/src/data-marts/dto/domain/report-data-batch.dto.js +13 -0
  70. package/dist/src/data-marts/dto/domain/report-data-description.dto.js +13 -0
  71. package/dist/src/data-marts/dto/domain/report.dto.js +31 -0
  72. package/dist/src/data-marts/dto/domain/run-data-mart.command.js +15 -0
  73. package/dist/src/data-marts/dto/domain/run-report.command.js +3 -0
  74. package/dist/src/data-marts/dto/domain/update-data-destination.command.js +17 -0
  75. package/dist/src/data-marts/dto/domain/update-report.command.js +21 -0
  76. package/dist/src/data-marts/dto/presentation/connector-definition-response-api.dto.js +37 -0
  77. package/dist/src/data-marts/dto/presentation/connector-fields-response-api.dto.js +60 -0
  78. package/dist/src/data-marts/dto/presentation/connector-specification-response-api.dto.js +65 -0
  79. package/dist/src/data-marts/dto/presentation/create-data-destination-api.dto.js +42 -0
  80. package/dist/src/data-marts/dto/presentation/create-report-request-api.dto.js +46 -0
  81. package/dist/src/data-marts/dto/presentation/data-destination-response-api.dto.js +57 -0
  82. package/dist/src/data-marts/dto/presentation/report-response-api.dto.js +75 -0
  83. package/dist/src/data-marts/dto/presentation/update-data-destination-api.dto.js +35 -0
  84. package/dist/src/data-marts/dto/presentation/update-report-request-api.dto.js +39 -0
  85. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/connector-definition.schema.js +23 -0
  86. package/dist/src/data-marts/dto/schemas/data-mart-table-definitions/data-mart-definition.guards.js +23 -0
  87. package/dist/src/data-marts/entities/data-destination.entity.js +66 -0
  88. package/dist/src/data-marts/entities/data-mart-run.entity.js +63 -0
  89. package/dist/src/data-marts/entities/report.entity.js +85 -0
  90. package/dist/{data-marts → src/data-marts}/enums/data-mart-definition-type.enum.js +1 -0
  91. package/dist/src/data-marts/enums/data-mart-run-status.enum.js +10 -0
  92. package/dist/src/data-marts/enums/report-run-status.enum.js +10 -0
  93. package/dist/src/data-marts/mappers/connector.mapper.js +54 -0
  94. package/dist/src/data-marts/mappers/data-destination.mapper.js +58 -0
  95. package/dist/{data-marts → src/data-marts}/mappers/data-mart.mapper.js +4 -0
  96. package/dist/{data-marts → src/data-marts}/mappers/data-storage.mapper.js +2 -6
  97. package/dist/src/data-marts/mappers/report.mapper.js +81 -0
  98. package/dist/src/data-marts/services/connector-execution.service.js +190 -0
  99. package/dist/src/data-marts/services/connector.service.js +79 -0
  100. package/dist/src/data-marts/services/data-destination.service.js +39 -0
  101. package/dist/src/data-marts/use-cases/connector/available-connector.service.js +29 -0
  102. package/dist/src/data-marts/use-cases/connector/fields-connector.service.js +29 -0
  103. package/dist/src/data-marts/use-cases/connector/specification-connector.service.js +29 -0
  104. package/dist/src/data-marts/use-cases/create-data-destination.service.js +51 -0
  105. package/dist/src/data-marts/use-cases/create-report.service.js +83 -0
  106. package/dist/src/data-marts/use-cases/delete-data-destination.service.js +59 -0
  107. package/dist/src/data-marts/use-cases/delete-report.service.js +46 -0
  108. package/dist/src/data-marts/use-cases/get-data-destination.service.js +34 -0
  109. package/dist/src/data-marts/use-cases/get-report.service.js +51 -0
  110. package/dist/src/data-marts/use-cases/list-data-destinations.service.js +42 -0
  111. package/dist/src/data-marts/use-cases/list-reports-by-data-mart.service.js +47 -0
  112. package/dist/src/data-marts/use-cases/list-reports-by-project.service.js +47 -0
  113. package/dist/src/data-marts/use-cases/run-data-mart.service.js +39 -0
  114. package/dist/src/data-marts/use-cases/run-report.service.js +97 -0
  115. package/dist/src/data-marts/use-cases/update-data-destination.service.js +52 -0
  116. package/dist/src/data-marts/use-cases/update-report.service.js +77 -0
  117. package/dist/src/data-source.js +11 -0
  118. package/dist/src/load-env.js +34 -0
  119. package/dist/{main.js → src/main.js} +7 -1
  120. package/dist/src/migrations/1750350724543-create-data-mart-and-data-storage-tables.js +53 -0
  121. package/dist/src/migrations/helper.js +13 -0
  122. package/package.json +28 -9
  123. package/dist/config/database.config.js +0 -31
  124. package/dist/data-marts/data-marts.module.js +0 -65
  125. package/dist/data-marts/data-storage-types/bigquery/schemas/bigquery-credentials.schema.js +0 -11
  126. package/dist/data-marts/data-storage-types/data-storage-facades.js +0 -7
  127. package/dist/data-marts/data-storage-types/data-storage-providers.js +0 -27
  128. package/dist/data-marts/data-storage-types/interfaces/data-storage-title-generator.interface.js +0 -3
  129. package/dist/public/assets/index-BZJIHZWS.js +0 -502
  130. package/dist/public/assets/index-BpZgB8Pl.css +0 -1
  131. /package/dist/{common → src/common}/authorization-context/authorization.context.js +0 -0
  132. /package/dist/{common → src/common}/common.module.js +0 -0
  133. /package/dist/{common → src/common}/exceptions/access-validation.exception.js +0 -0
  134. /package/dist/{common → src/common}/exceptions/base-exception.filter.js +0 -0
  135. /package/dist/{common → src/common}/exceptions/base.exception.js +0 -0
  136. /package/dist/{common → src/common}/exceptions/business-violation.exception.js +0 -0
  137. /package/dist/{common → src/common}/resolver/type-resolver.js +0 -0
  138. /package/dist/{common → src/common}/resolver/typed-component.resolver.js +0 -0
  139. /package/dist/{common → src/common}/scheduler/facades/scheduler-facade.impl.js +0 -0
  140. /package/dist/{common → src/common}/scheduler/scheduler.module.js +0 -0
  141. /package/dist/{common → src/common}/scheduler/services/fetchers/time-based-trigger-fetcher.factory.js +0 -0
  142. /package/dist/{common → src/common}/scheduler/services/fetchers/time-based-trigger-fetcher.service.js +0 -0
  143. /package/dist/{common → src/common}/scheduler/services/graceful-shutdown.service.js +0 -0
  144. /package/dist/{common → src/common}/scheduler/services/runners/abstract-trigger-runner.service.js +0 -0
  145. /package/dist/{common → src/common}/scheduler/services/runners/direct-trigger-runner.service.js +0 -0
  146. /package/dist/{common → src/common}/scheduler/services/runners/pubsub-trigger-runner.service.js +0 -0
  147. /package/dist/{common → src/common}/scheduler/services/runners/trigger-runner.factory.js +0 -0
  148. /package/dist/{common → src/common}/scheduler/services/runners/trigger-runner.interface.js +0 -0
  149. /package/dist/{common → src/common}/scheduler/services/system-time.service.js +0 -0
  150. /package/dist/{common → src/common}/scheduler/shared/entities/scheduled-trigger.entity.js +0 -0
  151. /package/dist/{common → src/common}/scheduler/shared/entities/time-based-trigger.entity.js +0 -0
  152. /package/dist/{common → src/common}/scheduler/shared/scheduler.facade.js +0 -0
  153. /package/dist/{common → src/common}/scheduler/shared/time-based-trigger-handler.interface.js +0 -0
  154. /package/dist/{config → src/config}/global-pipes.config.js +0 -0
  155. /package/dist/{config → src/config}/swagger.config.js +0 -0
  156. /package/dist/{data-marts → src/data-marts}/controllers/data-storage.controller.js +0 -0
  157. /package/dist/{data-marts → src/data-marts}/controllers/spec/data-storage.api.js +0 -0
  158. /package/dist/{data-marts → src/data-marts}/data-storage-types/athena/schemas/athena-config.schema.js +0 -0
  159. /package/dist/{data-marts → src/data-marts}/data-storage-types/athena/schemas/athena-credentials.schema.js +0 -0
  160. /package/dist/{data-marts → src/data-marts}/data-storage-types/athena/services/athena-access.validator.js +0 -0
  161. /package/dist/{data-marts → src/data-marts}/data-storage-types/bigquery/schemas/bigquery-config.schema.js +0 -0
  162. /package/dist/{data-marts → src/data-marts}/data-storage-types/bigquery/services/bigquery-access.validator.js +0 -0
  163. /package/dist/{data-marts → src/data-marts}/data-storage-types/data-storage-config.type.js +0 -0
  164. /package/dist/{data-marts → src/data-marts}/data-storage-types/enums/data-storage-type.enum.js +0 -0
  165. /package/dist/{data-marts → src/data-marts}/data-storage-types/facades/data-storage-access.facade.js +0 -0
  166. /package/dist/{data-marts → src/data-marts}/data-storage-types/interfaces/data-storage-access-validator.interface.js +0 -0
  167. /package/dist/{data-marts → src/data-marts}/dto/domain/create-data-mart.command.js +0 -0
  168. /package/dist/{data-marts → src/data-marts}/dto/domain/create-data-storage.command.js +0 -0
  169. /package/dist/{data-marts → src/data-marts}/dto/domain/data-mart.dto.js +0 -0
  170. /package/dist/{data-marts → src/data-marts}/dto/domain/data-storage.dto.js +0 -0
  171. /package/dist/{data-marts → src/data-marts}/dto/domain/delete-data-mart.command.js +0 -0
  172. /package/dist/{data-marts → src/data-marts}/dto/domain/delete-data-storage.command.js +0 -0
  173. /package/dist/{data-marts → src/data-marts}/dto/domain/get-data-mart.command.js +0 -0
  174. /package/dist/{data-marts → src/data-marts}/dto/domain/get-data-storage.command.js +0 -0
  175. /package/dist/{data-marts → src/data-marts}/dto/domain/list-data-marts.command.js +0 -0
  176. /package/dist/{data-marts → src/data-marts}/dto/domain/list-data-storages.command.js +0 -0
  177. /package/dist/{data-marts → src/data-marts}/dto/domain/publish-data-mart.command.js +0 -0
  178. /package/dist/{data-marts → src/data-marts}/dto/domain/update-data-mart-definition.command.js +0 -0
  179. /package/dist/{data-marts → src/data-marts}/dto/domain/update-data-mart-description.command.js +0 -0
  180. /package/dist/{data-marts → src/data-marts}/dto/domain/update-data-mart-title.command.js +0 -0
  181. /package/dist/{data-marts → src/data-marts}/dto/domain/update-data-storage.command.js +0 -0
  182. /package/dist/{data-marts → src/data-marts}/dto/presentation/create-data-mart-request-api.dto.js +0 -0
  183. /package/dist/{data-marts → src/data-marts}/dto/presentation/create-data-mart-response-api.dto.js +0 -0
  184. /package/dist/{data-marts → src/data-marts}/dto/presentation/create-data-storage-api.dto.js +0 -0
  185. /package/dist/{data-marts → src/data-marts}/dto/presentation/data-mart-response-api.dto.js +0 -0
  186. /package/dist/{data-marts → src/data-marts}/dto/presentation/data-storage-list-response-api.dto.js +0 -0
  187. /package/dist/{data-marts → src/data-marts}/dto/presentation/data-storage-response-api.dto.js +0 -0
  188. /package/dist/{data-marts → src/data-marts}/dto/presentation/update-data-mart-definition-api.dto.js +0 -0
  189. /package/dist/{data-marts → src/data-marts}/dto/presentation/update-data-mart-description-api.dto.js +0 -0
  190. /package/dist/{data-marts → src/data-marts}/dto/presentation/update-data-mart-title-api.dto.js +0 -0
  191. /package/dist/{data-marts → src/data-marts}/dto/presentation/update-data-storage-api.dto.js +0 -0
  192. /package/dist/{data-marts → src/data-marts}/dto/schemas/data-mart-table-definitions/data-mart-definition.js +0 -0
  193. /package/dist/{data-marts → src/data-marts}/dto/schemas/data-mart-table-definitions/sql-definition.schema.js +0 -0
  194. /package/dist/{data-marts → src/data-marts}/dto/schemas/data-mart-table-definitions/table-definition.schema.js +0 -0
  195. /package/dist/{data-marts → src/data-marts}/dto/schemas/data-mart-table-definitions/table-pattern-definition.schema.js +0 -0
  196. /package/dist/{data-marts → src/data-marts}/dto/schemas/data-mart-table-definitions/view-definition.schema.js +0 -0
  197. /package/dist/{data-marts → src/data-marts}/entities/data-mart.entity.js +0 -0
  198. /package/dist/{data-marts → src/data-marts}/entities/data-storage.entity.js +0 -0
  199. /package/dist/{data-marts → src/data-marts}/enums/data-mart-status.enum.js +0 -0
  200. /package/dist/{data-marts → src/data-marts}/services/data-mart.service.js +0 -0
  201. /package/dist/{data-marts → src/data-marts}/services/data-storage.service.js +0 -0
  202. /package/dist/{data-marts → src/data-marts}/use-cases/create-data-mart.service.js +0 -0
  203. /package/dist/{data-marts → src/data-marts}/use-cases/create-data-storage.service.js +0 -0
  204. /package/dist/{data-marts → src/data-marts}/use-cases/delete-data-mart.service.js +0 -0
  205. /package/dist/{data-marts → src/data-marts}/use-cases/delete-data-storage.service.js +0 -0
  206. /package/dist/{data-marts → src/data-marts}/use-cases/get-data-mart.service.js +0 -0
  207. /package/dist/{data-marts → src/data-marts}/use-cases/get-data-storage.service.js +0 -0
  208. /package/dist/{data-marts → src/data-marts}/use-cases/list-data-marts.service.js +0 -0
  209. /package/dist/{data-marts → src/data-marts}/use-cases/list-data-storages.service.js +0 -0
  210. /package/dist/{data-marts → src/data-marts}/use-cases/publish-data-mart.service.js +0 -0
  211. /package/dist/{data-marts → src/data-marts}/use-cases/update-data-mart-definition.service.js +0 -0
  212. /package/dist/{data-marts → src/data-marts}/use-cases/update-data-mart-description.service.js +0 -0
  213. /package/dist/{data-marts → src/data-marts}/use-cases/update-data-mart-title.service.js +0 -0
  214. /package/dist/{data-marts → src/data-marts}/use-cases/update-data-storage.service.js +0 -0
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var ConnectorExecutionService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ConnectorExecutionService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_1 = require("@nestjs/typeorm");
19
+ const typeorm_2 = require("typeorm");
20
+ const connector_runner_1 = require("@owox/connector-runner");
21
+ const data_mart_run_entity_1 = require("../entities/data-mart-run.entity");
22
+ const data_mart_definition_type_enum_1 = require("../enums/data-mart-definition-type.enum");
23
+ const data_mart_run_status_enum_1 = require("../enums/data-mart-run-status.enum");
24
+ const data_storage_type_enum_1 = require("../data-storage-types/enums/data-storage-type.enum");
25
+ let ConnectorExecutionService = ConnectorExecutionService_1 = class ConnectorExecutionService {
26
+ dataMartRunRepository;
27
+ logger = new common_1.Logger(ConnectorExecutionService_1.name);
28
+ constructor(dataMartRunRepository) {
29
+ this.dataMartRunRepository = dataMartRunRepository;
30
+ }
31
+ async run(dataMart) {
32
+ this.validateDataMartForConnector(dataMart);
33
+ const dataMartRun = await this.createDataMartRun(dataMart);
34
+ this.executeInBackground(dataMart, dataMartRun.id).catch(error => {
35
+ this.logger.error(`Background execution failed for run ${dataMartRun.id}:`, error);
36
+ });
37
+ return dataMartRun.id;
38
+ }
39
+ async getRunStatus(runId) {
40
+ return this.dataMartRunRepository.findOne({
41
+ where: { id: runId },
42
+ relations: ['dataMart'],
43
+ });
44
+ }
45
+ async getDataMartRuns(dataMartId) {
46
+ return this.dataMartRunRepository.find({
47
+ where: { dataMartId },
48
+ order: { createdAt: 'DESC' },
49
+ });
50
+ }
51
+ validateDataMartForConnector(dataMart) {
52
+ if (dataMart.definitionType !== data_mart_definition_type_enum_1.DataMartDefinitionType.CONNECTOR) {
53
+ throw new Error('DataMart is not a connector type');
54
+ }
55
+ }
56
+ async createDataMartRun(dataMart) {
57
+ const dataMartRun = this.dataMartRunRepository.create({
58
+ dataMartId: dataMart.id,
59
+ definitionRun: dataMart.definition,
60
+ status: data_mart_run_status_enum_1.DataMartRunStatus.RUNNING,
61
+ logs: [],
62
+ errors: [],
63
+ });
64
+ return this.dataMartRunRepository.save(dataMartRun);
65
+ }
66
+ createLogCaptureConfig(dataMartId, capturedErrors, capturedLogs) {
67
+ return {
68
+ logCapture: {
69
+ onStdout: (message) => {
70
+ const logMessage = message.trim();
71
+ capturedLogs.push(logMessage);
72
+ this.logger.log(`[${dataMartId}]: ${logMessage}`);
73
+ },
74
+ onStderr: (message) => {
75
+ const errorMessage = message.trim();
76
+ capturedErrors.push(errorMessage);
77
+ this.logger.error(`[${dataMartId}]: ${errorMessage}`);
78
+ },
79
+ passThrough: false,
80
+ },
81
+ };
82
+ }
83
+ async executeInBackground(dataMart, runId) {
84
+ const capturedLogs = [];
85
+ const capturedErrors = [];
86
+ const logCaptureConfig = this.createLogCaptureConfig(dataMart.id, capturedErrors, capturedLogs);
87
+ try {
88
+ await this.runConnectorConfigurations(runId, dataMart, logCaptureConfig);
89
+ await this.updateRunStatus(runId, capturedLogs, capturedErrors);
90
+ }
91
+ catch (error) {
92
+ await this.handleRunFailure(runId, error, capturedLogs, capturedErrors, dataMart.id);
93
+ }
94
+ }
95
+ async runConnectorConfigurations(runId, dataMart, logCaptureConfig) {
96
+ const definition = dataMart.definition;
97
+ const { connector } = definition;
98
+ for (const config of connector.source.configuration) {
99
+ const runConfig = new connector_runner_1.RunConfig({
100
+ name: connector.source.name,
101
+ datamartId: dataMart.id,
102
+ source: this.getSourceConfig(connector, config),
103
+ storage: this.getStorageConfig(dataMart),
104
+ });
105
+ const connectorRunner = new connector_runner_1.ConnectorRunner();
106
+ await connectorRunner.run(dataMart.id, runId, runConfig, logCaptureConfig);
107
+ }
108
+ }
109
+ async updateRunStatus(runId, capturedLogs, capturedErrors) {
110
+ const status = capturedErrors.length > 0 ? data_mart_run_status_enum_1.DataMartRunStatus.FAILED : data_mart_run_status_enum_1.DataMartRunStatus.SUCCESS;
111
+ await this.dataMartRunRepository.update(runId, {
112
+ status,
113
+ logs: capturedLogs,
114
+ errors: capturedErrors,
115
+ });
116
+ }
117
+ async handleRunFailure(runId, error, capturedLogs, capturedErrors, dataMartId) {
118
+ const errorMessage = error instanceof Error ? error.message : String(error);
119
+ capturedErrors.push(errorMessage);
120
+ await this.dataMartRunRepository.update(runId, {
121
+ status: data_mart_run_status_enum_1.DataMartRunStatus.FAILED,
122
+ logs: capturedLogs,
123
+ errors: capturedErrors,
124
+ });
125
+ this.logger.error(`Connector execution failed for DataMart ${dataMartId}:`, error);
126
+ }
127
+ getSourceConfig(connector, config) {
128
+ const fieldsConfig = connector.source.fields
129
+ .map(field => `${connector.source.node} ${field}`)
130
+ .join(', ');
131
+ return new connector_runner_1.SourceConfig({
132
+ name: connector.source.name,
133
+ config: {
134
+ ...config,
135
+ Fields: fieldsConfig,
136
+ },
137
+ });
138
+ }
139
+ getStorageConfig(dataMart) {
140
+ const definition = dataMart.definition;
141
+ const { connector } = definition;
142
+ switch (dataMart.storage.type) {
143
+ case data_storage_type_enum_1.DataStorageType.GOOGLE_BIGQUERY:
144
+ return this.createBigQueryStorageConfig(dataMart, connector);
145
+ case data_storage_type_enum_1.DataStorageType.AWS_ATHENA:
146
+ return this.createAthenaStorageConfig(dataMart, connector);
147
+ default:
148
+ throw new Error(`Unsupported storage type: ${dataMart.storage.type}`);
149
+ }
150
+ }
151
+ createBigQueryStorageConfig(dataMart, connector) {
152
+ const storageConfig = dataMart.storage.config;
153
+ const datasetId = connector.storage?.fullyQualifiedName.split('.')[0];
154
+ return new connector_runner_1.StorageConfig({
155
+ name: data_storage_type_enum_1.DataStorageType.GOOGLE_BIGQUERY,
156
+ config: {
157
+ DestinationLocation: storageConfig?.location,
158
+ DestinationDatasetID: `${storageConfig.projectId}.${datasetId}`,
159
+ DestinationProjectID: storageConfig.projectId,
160
+ DestinationDatasetName: datasetId,
161
+ ProjectID: storageConfig.projectId,
162
+ },
163
+ });
164
+ }
165
+ createAthenaStorageConfig(dataMart, connector) {
166
+ const storageConfig = dataMart.storage.config;
167
+ const credentials = dataMart.storage.credentials;
168
+ return new connector_runner_1.StorageConfig({
169
+ name: data_storage_type_enum_1.DataStorageType.AWS_ATHENA,
170
+ config: {
171
+ AWSRegion: storageConfig.region,
172
+ AWSAccessKeyId: credentials.accessKeyId,
173
+ AWSSecretAccessKey: credentials.secretAccessKey,
174
+ S3BucketName: storageConfig.outputBucket,
175
+ S3Prefix: dataMart.id,
176
+ AthenaDatabaseName: connector.storage?.fullyQualifiedName.split('.')[0],
177
+ DestinationTableNamePrefix: '',
178
+ DestinationTableName: connector.storage?.fullyQualifiedName.split('.')[1],
179
+ AthenaOutputLocation: `s3://${storageConfig.outputBucket}/owox-data-marts/${dataMart.id}`,
180
+ },
181
+ });
182
+ }
183
+ };
184
+ exports.ConnectorExecutionService = ConnectorExecutionService;
185
+ exports.ConnectorExecutionService = ConnectorExecutionService = ConnectorExecutionService_1 = __decorate([
186
+ (0, common_1.Injectable)(),
187
+ __param(0, (0, typeorm_1.InjectRepository)(data_mart_run_entity_1.DataMartRun)),
188
+ __metadata("design:paramtypes", [typeorm_2.Repository])
189
+ ], ConnectorExecutionService);
190
+ //# sourceMappingURL=connector-execution.service.js.map
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ConnectorService = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const connectors_1 = require("@owox/connectors");
12
+ const connector_specification_1 = require("../connector-types/connector-specification");
13
+ const connector_fields_schema_1 = require("../connector-types/connector-fields-schema");
14
+ let ConnectorService = class ConnectorService {
15
+ async getAvailableConnectors() {
16
+ return connectors_1.AvailableConnectors.map(connector => ({
17
+ name: connector,
18
+ title: connector,
19
+ description: null,
20
+ icon: null,
21
+ }));
22
+ }
23
+ async getConnectorSpecification(connectorName) {
24
+ this.validateConnectorExists(connectorName);
25
+ const source = this.createConnectorSource(connectorName);
26
+ const configSchema = this.mapConfigToSchema(source.config);
27
+ return connector_specification_1.ConnectorSpecification.parse(configSchema);
28
+ }
29
+ async getConnectorFieldsSchema(connectorName) {
30
+ this.validateConnectorExists(connectorName);
31
+ const sourceInstance = this.createConnectorSource(connectorName);
32
+ const sourceFieldsSchema = sourceInstance.getFieldsSchema();
33
+ const fieldsSchema = this.mapFieldsSchemaToDto(sourceFieldsSchema);
34
+ return connector_fields_schema_1.ConnectorFieldsSchema.parse(fieldsSchema);
35
+ }
36
+ validateConnectorExists(connectorName) {
37
+ if (Object.keys(connectors_1.Connectors).length === 0) {
38
+ throw new Error('No connectors found');
39
+ }
40
+ if (!Object.keys(connectors_1.Connectors).includes(connectorName)) {
41
+ throw new Error(`Connector '${connectorName}' not found`);
42
+ }
43
+ }
44
+ createConnectorSource(connectorName) {
45
+ const source = connectors_1.Connectors[connectorName][`${connectorName}Source`];
46
+ return new source(new connectors_1.Core.AbstractConfig({}));
47
+ }
48
+ mapConfigToSchema(config) {
49
+ return Object.keys(config).map(key => ({
50
+ name: key,
51
+ title: config[key].displayName,
52
+ description: config[key].description,
53
+ default: config[key].default,
54
+ requiredType: config[key].requiredType,
55
+ required: config[key].isRequired,
56
+ options: config[key].options,
57
+ placeholder: config[key].placeholder,
58
+ showInUI: config[key].showInUI,
59
+ }));
60
+ }
61
+ mapFieldsSchemaToDto(sourceFieldsSchema) {
62
+ return Object.keys(sourceFieldsSchema).map(key => ({
63
+ name: key,
64
+ overview: sourceFieldsSchema[key].overview,
65
+ description: sourceFieldsSchema[key].description,
66
+ documentation: sourceFieldsSchema[key].documentation,
67
+ fields: Object.keys(sourceFieldsSchema[key].fields).map(fieldKey => ({
68
+ name: fieldKey,
69
+ type: sourceFieldsSchema[key].fields[fieldKey].type,
70
+ description: sourceFieldsSchema[key].fields[fieldKey].description,
71
+ })),
72
+ }));
73
+ }
74
+ };
75
+ exports.ConnectorService = ConnectorService;
76
+ exports.ConnectorService = ConnectorService = __decorate([
77
+ (0, common_1.Injectable)()
78
+ ], ConnectorService);
79
+ //# sourceMappingURL=connector.service.js.map
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DataDestinationService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const typeorm_2 = require("typeorm");
19
+ const data_destination_entity_1 = require("../entities/data-destination.entity");
20
+ let DataDestinationService = class DataDestinationService {
21
+ dataDestinationRepository;
22
+ constructor(dataDestinationRepository) {
23
+ this.dataDestinationRepository = dataDestinationRepository;
24
+ }
25
+ async getByIdAndProjectId(projectId, id) {
26
+ const entity = await this.dataDestinationRepository.findOne({ where: { id, projectId } });
27
+ if (!entity) {
28
+ throw new common_1.NotFoundException(`DataDestination with id ${id} and projectId ${projectId} not found`);
29
+ }
30
+ return entity;
31
+ }
32
+ };
33
+ exports.DataDestinationService = DataDestinationService;
34
+ exports.DataDestinationService = DataDestinationService = __decorate([
35
+ (0, common_1.Injectable)(),
36
+ __param(0, (0, typeorm_1.InjectRepository)(data_destination_entity_1.DataDestination)),
37
+ __metadata("design:paramtypes", [typeorm_2.Repository])
38
+ ], DataDestinationService);
39
+ //# sourceMappingURL=data-destination.service.js.map
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AvailableConnectorService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const connector_service_1 = require("../../services/connector.service");
15
+ let AvailableConnectorService = class AvailableConnectorService {
16
+ connectorService;
17
+ constructor(connectorService) {
18
+ this.connectorService = connectorService;
19
+ }
20
+ async run() {
21
+ return this.connectorService.getAvailableConnectors();
22
+ }
23
+ };
24
+ exports.AvailableConnectorService = AvailableConnectorService;
25
+ exports.AvailableConnectorService = AvailableConnectorService = __decorate([
26
+ (0, common_1.Injectable)(),
27
+ __metadata("design:paramtypes", [connector_service_1.ConnectorService])
28
+ ], AvailableConnectorService);
29
+ //# sourceMappingURL=available-connector.service.js.map
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.FieldsConnectorService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const connector_service_1 = require("../../services/connector.service");
15
+ let FieldsConnectorService = class FieldsConnectorService {
16
+ connectorService;
17
+ constructor(connectorService) {
18
+ this.connectorService = connectorService;
19
+ }
20
+ async run(connectorName) {
21
+ return await this.connectorService.getConnectorFieldsSchema(connectorName);
22
+ }
23
+ };
24
+ exports.FieldsConnectorService = FieldsConnectorService;
25
+ exports.FieldsConnectorService = FieldsConnectorService = __decorate([
26
+ (0, common_1.Injectable)(),
27
+ __metadata("design:paramtypes", [connector_service_1.ConnectorService])
28
+ ], FieldsConnectorService);
29
+ //# sourceMappingURL=fields-connector.service.js.map
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SpecificationConnectorService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const connector_service_1 = require("../../services/connector.service");
15
+ let SpecificationConnectorService = class SpecificationConnectorService {
16
+ connectorService;
17
+ constructor(connectorService) {
18
+ this.connectorService = connectorService;
19
+ }
20
+ async run(connectorName) {
21
+ return this.connectorService.getConnectorSpecification(connectorName);
22
+ }
23
+ };
24
+ exports.SpecificationConnectorService = SpecificationConnectorService;
25
+ exports.SpecificationConnectorService = SpecificationConnectorService = __decorate([
26
+ (0, common_1.Injectable)(),
27
+ __metadata("design:paramtypes", [connector_service_1.ConnectorService])
28
+ ], SpecificationConnectorService);
29
+ //# sourceMappingURL=specification-connector.service.js.map
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CreateDataDestinationService = void 0;
16
+ const typeorm_1 = require("typeorm");
17
+ const data_destination_entity_1 = require("../entities/data-destination.entity");
18
+ const typeorm_2 = require("@nestjs/typeorm");
19
+ const common_1 = require("@nestjs/common");
20
+ const data_destination_mapper_1 = require("../mappers/data-destination.mapper");
21
+ const data_destination_credentials_validator_facade_1 = require("../data-destination-types/facades/data-destination-credentials-validator.facade");
22
+ let CreateDataDestinationService = class CreateDataDestinationService {
23
+ repository;
24
+ mapper;
25
+ credentialsValidator;
26
+ constructor(repository, mapper, credentialsValidator) {
27
+ this.repository = repository;
28
+ this.mapper = mapper;
29
+ this.credentialsValidator = credentialsValidator;
30
+ }
31
+ async run(command) {
32
+ await this.credentialsValidator.checkCredentials(command.type, command.credentials);
33
+ const entity = this.repository.create({
34
+ title: command.title,
35
+ type: command.type,
36
+ projectId: command.projectId,
37
+ credentials: command.credentials,
38
+ });
39
+ const savedEntity = await this.repository.save(entity);
40
+ return this.mapper.toDomainDto(savedEntity);
41
+ }
42
+ };
43
+ exports.CreateDataDestinationService = CreateDataDestinationService;
44
+ exports.CreateDataDestinationService = CreateDataDestinationService = __decorate([
45
+ (0, common_1.Injectable)(),
46
+ __param(0, (0, typeorm_2.InjectRepository)(data_destination_entity_1.DataDestination)),
47
+ __metadata("design:paramtypes", [typeorm_1.Repository,
48
+ data_destination_mapper_1.DataDestinationMapper,
49
+ data_destination_credentials_validator_facade_1.DataDestinationCredentialsValidatorFacade])
50
+ ], CreateDataDestinationService);
51
+ //# sourceMappingURL=create-data-destination.service.js.map
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.CreateReportService = void 0;
16
+ const typeorm_1 = require("typeorm");
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_2 = require("@nestjs/typeorm");
19
+ const report_entity_1 = require("../entities/report.entity");
20
+ const data_mart_entity_1 = require("../entities/data-mart.entity");
21
+ const data_destination_entity_1 = require("../entities/data-destination.entity");
22
+ const report_mapper_1 = require("../mappers/report.mapper");
23
+ const data_mart_status_enum_1 = require("../enums/data-mart-status.enum");
24
+ const data_destination_access_validator_facade_1 = require("../data-destination-types/facades/data-destination-access-validator.facade");
25
+ let CreateReportService = class CreateReportService {
26
+ reportRepository;
27
+ dataMartRepository;
28
+ dataDestinationRepository;
29
+ dataDestinationAccessValidationFacade;
30
+ mapper;
31
+ constructor(reportRepository, dataMartRepository, dataDestinationRepository, dataDestinationAccessValidationFacade, mapper) {
32
+ this.reportRepository = reportRepository;
33
+ this.dataMartRepository = dataMartRepository;
34
+ this.dataDestinationRepository = dataDestinationRepository;
35
+ this.dataDestinationAccessValidationFacade = dataDestinationAccessValidationFacade;
36
+ this.mapper = mapper;
37
+ }
38
+ async run(command) {
39
+ const dataMart = await this.dataMartRepository.findOne({
40
+ where: {
41
+ id: command.dataMartId,
42
+ projectId: command.projectId,
43
+ },
44
+ });
45
+ if (!dataMart) {
46
+ throw new common_1.BadRequestException(`Data mart with ID ${command.dataMartId} not found`);
47
+ }
48
+ if (dataMart.status !== data_mart_status_enum_1.DataMartStatus.PUBLISHED) {
49
+ throw new common_1.BadRequestException(`Cannot create report for data mart with status ${dataMart.status}. Data mart must be in PUBLISHED status.`);
50
+ }
51
+ const dataDestination = await this.dataDestinationRepository.findOne({
52
+ where: {
53
+ id: command.dataDestinationId,
54
+ projectId: command.projectId,
55
+ },
56
+ });
57
+ if (!dataDestination) {
58
+ throw new common_1.BadRequestException(`Data destination with ID ${command.dataDestinationId} not found`);
59
+ }
60
+ await this.dataDestinationAccessValidationFacade.checkAccess(dataDestination.type, command.destinationConfig, dataDestination);
61
+ const report = this.reportRepository.create({
62
+ title: command.title,
63
+ dataMart,
64
+ dataDestination,
65
+ destinationConfig: command.destinationConfig,
66
+ });
67
+ const newReport = await this.reportRepository.save(report);
68
+ return this.mapper.toDomainDto(newReport);
69
+ }
70
+ };
71
+ exports.CreateReportService = CreateReportService;
72
+ exports.CreateReportService = CreateReportService = __decorate([
73
+ (0, common_1.Injectable)(),
74
+ __param(0, (0, typeorm_2.InjectRepository)(report_entity_1.Report)),
75
+ __param(1, (0, typeorm_2.InjectRepository)(data_mart_entity_1.DataMart)),
76
+ __param(2, (0, typeorm_2.InjectRepository)(data_destination_entity_1.DataDestination)),
77
+ __metadata("design:paramtypes", [typeorm_1.Repository,
78
+ typeorm_1.Repository,
79
+ typeorm_1.Repository,
80
+ data_destination_access_validator_facade_1.DataDestinationAccessValidatorFacade,
81
+ report_mapper_1.ReportMapper])
82
+ ], CreateReportService);
83
+ //# sourceMappingURL=create-report.service.js.map
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DeleteDataDestinationService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const typeorm_2 = require("typeorm");
19
+ const data_destination_entity_1 = require("../entities/data-destination.entity");
20
+ const report_entity_1 = require("../entities/report.entity");
21
+ const data_destination_service_1 = require("../services/data-destination.service");
22
+ const business_violation_exception_1 = require("../../common/exceptions/business-violation.exception");
23
+ let DeleteDataDestinationService = class DeleteDataDestinationService {
24
+ dataDestinationRepository;
25
+ reportRepository;
26
+ dataDestinationService;
27
+ constructor(dataDestinationRepository, reportRepository, dataDestinationService) {
28
+ this.dataDestinationRepository = dataDestinationRepository;
29
+ this.reportRepository = reportRepository;
30
+ this.dataDestinationService = dataDestinationService;
31
+ }
32
+ async run(command) {
33
+ const destination = await this.dataDestinationService.getByIdAndProjectId(command.projectId, command.id);
34
+ const reportsCount = await this.reportRepository.count({
35
+ where: {
36
+ dataDestination: {
37
+ id: destination.id,
38
+ },
39
+ },
40
+ });
41
+ if (reportsCount > 0) {
42
+ throw new business_violation_exception_1.BusinessViolationException(`Cannot delete the destination because it is referenced by ${reportsCount} existing report(s).`);
43
+ }
44
+ await this.dataDestinationRepository.softDelete({
45
+ id: command.id,
46
+ projectId: command.projectId,
47
+ });
48
+ }
49
+ };
50
+ exports.DeleteDataDestinationService = DeleteDataDestinationService;
51
+ exports.DeleteDataDestinationService = DeleteDataDestinationService = __decorate([
52
+ (0, common_1.Injectable)(),
53
+ __param(0, (0, typeorm_1.InjectRepository)(data_destination_entity_1.DataDestination)),
54
+ __param(1, (0, typeorm_1.InjectRepository)(report_entity_1.Report)),
55
+ __metadata("design:paramtypes", [typeorm_2.Repository,
56
+ typeorm_2.Repository,
57
+ data_destination_service_1.DataDestinationService])
58
+ ], DeleteDataDestinationService);
59
+ //# sourceMappingURL=delete-data-destination.service.js.map
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DeleteReportService = void 0;
16
+ const typeorm_1 = require("typeorm");
17
+ const common_1 = require("@nestjs/common");
18
+ const typeorm_2 = require("@nestjs/typeorm");
19
+ const report_entity_1 = require("../entities/report.entity");
20
+ let DeleteReportService = class DeleteReportService {
21
+ reportRepository;
22
+ constructor(reportRepository) {
23
+ this.reportRepository = reportRepository;
24
+ }
25
+ async run(command) {
26
+ const report = await this.reportRepository.findOne({
27
+ where: {
28
+ id: command.id,
29
+ dataMart: {
30
+ projectId: command.projectId,
31
+ },
32
+ },
33
+ });
34
+ if (!report) {
35
+ throw new common_1.NotFoundException(`Report with ID ${command.id} not found`);
36
+ }
37
+ await this.reportRepository.remove(report);
38
+ }
39
+ };
40
+ exports.DeleteReportService = DeleteReportService;
41
+ exports.DeleteReportService = DeleteReportService = __decorate([
42
+ (0, common_1.Injectable)(),
43
+ __param(0, (0, typeorm_2.InjectRepository)(report_entity_1.Report)),
44
+ __metadata("design:paramtypes", [typeorm_1.Repository])
45
+ ], DeleteReportService);
46
+ //# sourceMappingURL=delete-report.service.js.map