@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,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AthenaApiAdapter = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const client_athena_1 = require("@aws-sdk/client-athena");
6
+ class AthenaApiAdapter {
7
+ logger = new common_1.Logger(AthenaApiAdapter.name);
8
+ athenaClient;
9
+ constructor(credentials, config) {
10
+ this.athenaClient = new client_athena_1.AthenaClient({
11
+ region: config.region,
12
+ credentials: {
13
+ accessKeyId: credentials.accessKeyId,
14
+ secretAccessKey: credentials.secretAccessKey,
15
+ sessionToken: credentials.sessionToken,
16
+ },
17
+ });
18
+ }
19
+ async executeQuery(query, databaseName, outputBucket, outputPrefix) {
20
+ const startQueryCommand = new client_athena_1.StartQueryExecutionCommand({
21
+ QueryString: query,
22
+ QueryExecutionContext: {
23
+ Database: databaseName,
24
+ },
25
+ ResultConfiguration: {
26
+ OutputLocation: `s3://${outputBucket}/${outputPrefix}`,
27
+ },
28
+ });
29
+ const response = await this.athenaClient.send(startQueryCommand);
30
+ const queryExecutionId = response.QueryExecutionId;
31
+ if (!queryExecutionId) {
32
+ throw new Error('Failed to start query execution');
33
+ }
34
+ return { queryExecutionId };
35
+ }
36
+ async waitForQueryToComplete(queryExecutionId) {
37
+ if (!queryExecutionId) {
38
+ throw new Error('No query execution ID');
39
+ }
40
+ const getQueryExecutionCommand = new client_athena_1.GetQueryExecutionCommand({
41
+ QueryExecutionId: queryExecutionId,
42
+ });
43
+ let status;
44
+ do {
45
+ await new Promise(resolve => setTimeout(resolve, 1000));
46
+ const response = await this.athenaClient.send(getQueryExecutionCommand);
47
+ status = response.QueryExecution?.Status?.State;
48
+ this.logger.debug(`Query status: ${status}`);
49
+ if (status === client_athena_1.QueryExecutionState.FAILED) {
50
+ const errorMessage = response.QueryExecution?.Status?.StateChangeReason || 'Unknown error';
51
+ throw new Error(`Query execution failed: ${errorMessage}`);
52
+ }
53
+ if (status === client_athena_1.QueryExecutionState.CANCELLED) {
54
+ throw new Error('Query execution was cancelled');
55
+ }
56
+ } while (status !== client_athena_1.QueryExecutionState.SUCCEEDED);
57
+ }
58
+ async getQueryResultsMetadata(queryExecutionId) {
59
+ if (!queryExecutionId) {
60
+ throw new Error('No query execution ID');
61
+ }
62
+ const resultsCommand = new client_athena_1.GetQueryResultsCommand({
63
+ QueryExecutionId: queryExecutionId,
64
+ MaxResults: 1,
65
+ });
66
+ const results = await this.athenaClient.send(resultsCommand);
67
+ if (!results.ResultSet ||
68
+ !results.ResultSet.ResultSetMetadata ||
69
+ !results.ResultSet.ResultSetMetadata.ColumnInfo) {
70
+ throw new Error('Failed to get query results metadata');
71
+ }
72
+ return results.ResultSet.ResultSetMetadata;
73
+ }
74
+ async getQueryResults(queryExecutionId, batchId, maxResults = 1000) {
75
+ if (!queryExecutionId) {
76
+ throw new Error('No query execution ID');
77
+ }
78
+ const resultsCommand = new client_athena_1.GetQueryResultsCommand({
79
+ QueryExecutionId: queryExecutionId,
80
+ MaxResults: maxResults,
81
+ NextToken: batchId,
82
+ });
83
+ const results = await this.athenaClient.send(resultsCommand);
84
+ if (!results.ResultSet || !results.ResultSet.Rows) {
85
+ throw new Error('Failed to get query results');
86
+ }
87
+ return results;
88
+ }
89
+ }
90
+ exports.AthenaApiAdapter = AthenaApiAdapter;
91
+ //# sourceMappingURL=athena-api.adapter.js.map
@@ -0,0 +1,21 @@
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.S3ApiAdapterFactory = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const s3_api_adapter_1 = require("./s3-api.adapter");
12
+ let S3ApiAdapterFactory = class S3ApiAdapterFactory {
13
+ create(credentials, config) {
14
+ return new s3_api_adapter_1.S3ApiAdapter(credentials, config);
15
+ }
16
+ };
17
+ exports.S3ApiAdapterFactory = S3ApiAdapterFactory;
18
+ exports.S3ApiAdapterFactory = S3ApiAdapterFactory = __decorate([
19
+ (0, common_1.Injectable)()
20
+ ], S3ApiAdapterFactory);
21
+ //# sourceMappingURL=s3-api-adapter.factory.js.map
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3ApiAdapter = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const client_s3_1 = require("@aws-sdk/client-s3");
6
+ class S3ApiAdapter {
7
+ logger = new common_1.Logger(S3ApiAdapter.name);
8
+ s3Client;
9
+ constructor(credentials, config) {
10
+ this.s3Client = new client_s3_1.S3Client({
11
+ region: config.region,
12
+ credentials: {
13
+ accessKeyId: credentials.accessKeyId,
14
+ secretAccessKey: credentials.secretAccessKey,
15
+ sessionToken: credentials.sessionToken,
16
+ },
17
+ });
18
+ }
19
+ async cleanupOutputFiles(outputBucket, outputPrefix) {
20
+ if (!outputBucket || !outputPrefix) {
21
+ this.logger.debug('No output location to clean up');
22
+ return;
23
+ }
24
+ try {
25
+ const listCommand = new client_s3_1.ListObjectsV2Command({
26
+ Bucket: outputBucket,
27
+ Prefix: outputPrefix,
28
+ });
29
+ const listedObjects = await this.s3Client.send(listCommand);
30
+ if (!listedObjects.Contents || listedObjects.Contents.length === 0) {
31
+ this.logger.debug('No objects to delete');
32
+ return;
33
+ }
34
+ for (const object of listedObjects.Contents) {
35
+ if (!object.Key)
36
+ continue;
37
+ const deleteCommand = new client_s3_1.DeleteObjectCommand({
38
+ Bucket: outputBucket,
39
+ Key: object.Key,
40
+ });
41
+ await this.s3Client.send(deleteCommand);
42
+ this.logger.debug(`Deleted object: ${object.Key}`);
43
+ }
44
+ this.logger.debug('Successfully cleaned up query results');
45
+ }
46
+ catch (error) {
47
+ this.logger.error('Error cleaning up query results', error);
48
+ throw error;
49
+ }
50
+ }
51
+ }
52
+ exports.S3ApiAdapter = S3ApiAdapter;
53
+ //# sourceMappingURL=s3-api.adapter.js.map
@@ -0,0 +1,158 @@
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 AthenaReportReader_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AthenaReportReader = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const data_storage_type_enum_1 = require("../../enums/data-storage-type.enum");
16
+ const report_data_description_dto_1 = require("../../../dto/domain/report-data-description.dto");
17
+ const report_data_batch_dto_1 = require("../../../dto/domain/report-data-batch.dto");
18
+ const data_mart_definition_guards_1 = require("../../../dto/schemas/data-mart-table-definitions/data-mart-definition.guards");
19
+ const athena_api_adapter_factory_1 = require("../adapters/athena-api-adapter.factory");
20
+ const s3_api_adapter_factory_1 = require("../adapters/s3-api-adapter.factory");
21
+ const data_storage_credentials_guards_1 = require("../../data-storage-credentials.guards");
22
+ const data_storage_config_guards_1 = require("../../data-storage-config.guards");
23
+ let AthenaReportReader = AthenaReportReader_1 = class AthenaReportReader {
24
+ athenaAdapterFactory;
25
+ s3AdapterFactory;
26
+ logger = new common_1.Logger(AthenaReportReader_1.name);
27
+ type = data_storage_type_enum_1.DataStorageType.AWS_ATHENA;
28
+ athenaAdapter;
29
+ s3Adapter;
30
+ queryExecutionId;
31
+ outputBucket;
32
+ outputPrefix;
33
+ databaseName;
34
+ constructor(athenaAdapterFactory, s3AdapterFactory) {
35
+ this.athenaAdapterFactory = athenaAdapterFactory;
36
+ this.s3AdapterFactory = s3AdapterFactory;
37
+ }
38
+ async prepareReportData(report) {
39
+ const { storage, definition } = report.dataMart;
40
+ if (!storage || !definition) {
41
+ throw new Error('Data Mart is not properly configured');
42
+ }
43
+ await this.prepareApiAdapters(storage);
44
+ await this.prepareQueryExecution(definition);
45
+ if (!this.queryExecutionId) {
46
+ throw new Error('Query execution ID not set');
47
+ }
48
+ await this.athenaAdapter.waitForQueryToComplete(this.queryExecutionId);
49
+ const metadata = await this.athenaAdapter.getQueryResultsMetadata(this.queryExecutionId);
50
+ if (!metadata.ColumnInfo) {
51
+ throw new Error('Failed to get query results metadata');
52
+ }
53
+ const dataHeaders = metadata.ColumnInfo.map(col => col.Name || '');
54
+ return new report_data_description_dto_1.ReportDataDescription(dataHeaders);
55
+ }
56
+ async readReportDataBatch(batchId, maxDataRows = 1000) {
57
+ if (!this.athenaAdapter) {
58
+ throw new Error('Report data must be prepared before read');
59
+ }
60
+ if (!this.queryExecutionId) {
61
+ throw new Error('Query execution ID not set');
62
+ }
63
+ const results = await this.athenaAdapter.getQueryResults(this.queryExecutionId, batchId, maxDataRows);
64
+ if (!results.ResultSet || !results.ResultSet.Rows) {
65
+ throw new Error('Failed to get query results');
66
+ }
67
+ const startIndex = !batchId ? 1 : 0;
68
+ const rows = results.ResultSet.Rows.slice(startIndex);
69
+ const mappedRows = rows.map(row => {
70
+ if (!row.Data)
71
+ return [];
72
+ return row.Data.map(cell => cell.VarCharValue);
73
+ });
74
+ return new report_data_batch_dto_1.ReportDataBatch(mappedRows, results.NextToken);
75
+ }
76
+ async finalize() {
77
+ this.logger.debug('Finalizing report read');
78
+ if (!this.s3Adapter) {
79
+ this.logger.debug('No S3 adapter to clean up');
80
+ return;
81
+ }
82
+ if (!this.outputBucket || !this.outputPrefix) {
83
+ this.logger.debug('No output location to clean up');
84
+ return;
85
+ }
86
+ try {
87
+ await this.s3Adapter.cleanupOutputFiles(this.outputBucket, this.outputPrefix);
88
+ }
89
+ catch (error) {
90
+ this.logger.error('Error cleaning up query results', error);
91
+ throw error;
92
+ }
93
+ }
94
+ async prepareApiAdapters(storage) {
95
+ try {
96
+ if (!(0, data_storage_credentials_guards_1.isAthenaCredentials)(storage.credentials)) {
97
+ throw new Error('Athena credentials are not properly configured');
98
+ }
99
+ if (!(0, data_storage_config_guards_1.isAthenaConfig)(storage.config)) {
100
+ throw new Error('Athena config is not properly configured');
101
+ }
102
+ this.athenaAdapter = this.athenaAdapterFactory.create(storage.credentials, storage.config);
103
+ this.s3Adapter = this.s3AdapterFactory.create(storage.credentials, storage.config);
104
+ this.outputBucket = storage.config.outputBucket;
105
+ this.databaseName = storage.config.databaseName;
106
+ this.logger.debug('Athena and S3 adapters created successfully');
107
+ }
108
+ catch (error) {
109
+ this.logger.error('Failed to create adapters', error);
110
+ throw error;
111
+ }
112
+ }
113
+ async prepareQueryExecution(dataMartDefinition) {
114
+ this.logger.debug('Preparing query execution', dataMartDefinition);
115
+ try {
116
+ if ((0, data_mart_definition_guards_1.isTableDefinition)(dataMartDefinition)) {
117
+ await this.prepareTableData(dataMartDefinition);
118
+ }
119
+ else if ((0, data_mart_definition_guards_1.isSqlDefinition)(dataMartDefinition)) {
120
+ await this.prepareSqlData(dataMartDefinition);
121
+ }
122
+ else if ((0, data_mart_definition_guards_1.isViewDefinition)(dataMartDefinition)) {
123
+ await this.prepareViewData(dataMartDefinition);
124
+ }
125
+ else if ((0, data_mart_definition_guards_1.isTablePatternDefinition)(dataMartDefinition)) {
126
+ throw new Error('Table pattern queries are not supported in Athena');
127
+ }
128
+ else {
129
+ throw new Error('Invalid data mart definition');
130
+ }
131
+ }
132
+ catch (error) {
133
+ this.logger.error('Failed to prepare query execution', error);
134
+ throw error;
135
+ }
136
+ }
137
+ async prepareSqlData(dataMartDefinition) {
138
+ await this.executeQuery(dataMartDefinition.sqlQuery);
139
+ }
140
+ async prepareViewData(dataMartDefinition) {
141
+ await this.executeQuery(`SELECT * FROM ${dataMartDefinition.fullyQualifiedName}`);
142
+ }
143
+ async prepareTableData(dataMartDefinition) {
144
+ await this.executeQuery(`SELECT * FROM ${dataMartDefinition.fullyQualifiedName}`);
145
+ }
146
+ async executeQuery(query) {
147
+ this.outputPrefix = `owox-data-marts/${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
148
+ const result = await this.athenaAdapter.executeQuery(query, this.databaseName, this.outputBucket, this.outputPrefix);
149
+ this.queryExecutionId = result.queryExecutionId;
150
+ }
151
+ };
152
+ exports.AthenaReportReader = AthenaReportReader;
153
+ exports.AthenaReportReader = AthenaReportReader = AthenaReportReader_1 = __decorate([
154
+ (0, common_1.Injectable)({ scope: common_1.Scope.TRANSIENT }),
155
+ __metadata("design:paramtypes", [athena_api_adapter_factory_1.AthenaApiAdapterFactory,
156
+ s3_api_adapter_factory_1.S3ApiAdapterFactory])
157
+ ], AthenaReportReader);
158
+ //# sourceMappingURL=athena-report-reader.service.js.map
@@ -0,0 +1,21 @@
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.BigQueryApiAdapterFactory = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const bigquery_api_adapter_1 = require("./bigquery-api.adapter");
12
+ let BigQueryApiAdapterFactory = class BigQueryApiAdapterFactory {
13
+ create(credentials, config) {
14
+ return new bigquery_api_adapter_1.BigQueryApiAdapter(credentials, config);
15
+ }
16
+ };
17
+ exports.BigQueryApiAdapterFactory = BigQueryApiAdapterFactory;
18
+ exports.BigQueryApiAdapterFactory = BigQueryApiAdapterFactory = __decorate([
19
+ (0, common_1.Injectable)()
20
+ ], BigQueryApiAdapterFactory);
21
+ //# sourceMappingURL=bigquery-api-adapter.factory.js.map
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BigQueryApiAdapter = void 0;
4
+ const bigquery_1 = require("@google-cloud/bigquery");
5
+ class BigQueryApiAdapter {
6
+ bigQuery;
7
+ constructor(credentials, config) {
8
+ this.bigQuery = new bigquery_1.BigQuery({
9
+ projectId: config.projectId,
10
+ location: config.location,
11
+ credentials: credentials,
12
+ scopes: [
13
+ 'https://www.googleapis.com/auth/bigquery',
14
+ 'https://www.googleapis.com/auth/drive.readonly',
15
+ ],
16
+ });
17
+ }
18
+ async executeQuery(query) {
19
+ const [, , res] = await this.bigQuery.query(query, { maxResults: 0 });
20
+ if (!res || !res.jobReference || !res.jobReference.jobId) {
21
+ throw new Error('Unexpected error during getting sql result job id');
22
+ }
23
+ return { jobId: res.jobReference.jobId };
24
+ }
25
+ async getJob(jobId) {
26
+ const job = this.bigQuery.job(jobId);
27
+ const [jobResult] = await job.get();
28
+ return jobResult;
29
+ }
30
+ createTableReference(projectId, datasetId, tableId) {
31
+ const dataset = this.bigQuery.dataset(datasetId, { projectId: projectId });
32
+ return dataset.table(tableId);
33
+ }
34
+ }
35
+ exports.BigQueryApiAdapter = BigQueryApiAdapter;
36
+ //# sourceMappingURL=bigquery-api.adapter.js.map
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BigQueryCredentialsSchema = void 0;
4
+ const google_service_account_key_schema_1 = require("../../../../common/schemas/google-service-account-key.schema");
5
+ exports.BigQueryCredentialsSchema = google_service_account_key_schema_1.GoogleServiceAccountKeySchema.extend({});
6
+ //# sourceMappingURL=bigquery-credentials.schema.js.map
@@ -0,0 +1,132 @@
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 BigQueryReportReader_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.BigQueryReportReader = void 0;
14
+ const report_data_description_dto_1 = require("../../../dto/domain/report-data-description.dto");
15
+ const report_data_batch_dto_1 = require("../../../dto/domain/report-data-batch.dto");
16
+ const data_storage_type_enum_1 = require("../../enums/data-storage-type.enum");
17
+ const common_1 = require("@nestjs/common");
18
+ const data_mart_definition_guards_1 = require("../../../dto/schemas/data-mart-table-definitions/data-mart-definition.guards");
19
+ const bigquery_api_adapter_factory_1 = require("../adapters/bigquery-api-adapter.factory");
20
+ const data_storage_credentials_guards_1 = require("../../data-storage-credentials.guards");
21
+ const data_storage_config_guards_1 = require("../../data-storage-config.guards");
22
+ let BigQueryReportReader = BigQueryReportReader_1 = class BigQueryReportReader {
23
+ adapterFactory;
24
+ logger = new common_1.Logger(BigQueryReportReader_1.name);
25
+ type = data_storage_type_enum_1.DataStorageType.GOOGLE_BIGQUERY;
26
+ adapter;
27
+ reportResultTable;
28
+ dataHeaders;
29
+ constructor(adapterFactory) {
30
+ this.adapterFactory = adapterFactory;
31
+ }
32
+ async prepareReportData(report) {
33
+ const { storage, definition } = report.dataMart;
34
+ if (!storage || !definition) {
35
+ throw new Error('Data Mart is not properly configured');
36
+ }
37
+ await this.prepareBigQuery(storage);
38
+ await this.prepareReportResultTable(definition);
39
+ const [metaData] = await this.reportResultTable.getMetadata();
40
+ if (!metaData.numRows || !metaData.schema || !metaData.schema.fields) {
41
+ throw new Error('Failed to get table metadata');
42
+ }
43
+ this.dataHeaders = metaData.schema.fields.map(f => f.name);
44
+ return new report_data_description_dto_1.ReportDataDescription(this.dataHeaders, parseInt(metaData.numRows));
45
+ }
46
+ async readReportDataBatch(batchId, maxRows = 10000) {
47
+ if (!this.adapter || !this.reportResultTable) {
48
+ throw new Error('Report data must be prepared before read');
49
+ }
50
+ const [rows, nextBatch] = await this.reportResultTable.getRows({
51
+ pageToken: batchId,
52
+ maxResults: maxRows,
53
+ autoPaginate: false,
54
+ });
55
+ const mappedRows = rows.map(r => this.dataHeaders.map(h => r[h].value ?? r[h]));
56
+ return new report_data_batch_dto_1.ReportDataBatch(mappedRows, nextBatch?.pageToken);
57
+ }
58
+ async finalize() {
59
+ this.logger.debug('Finalizing report read');
60
+ }
61
+ async prepareReportResultTable(dataMartDefinition) {
62
+ this.logger.debug('Preparing report result table', dataMartDefinition);
63
+ try {
64
+ if ((0, data_mart_definition_guards_1.isTableDefinition)(dataMartDefinition)) {
65
+ await this.prepareTableData(dataMartDefinition);
66
+ }
67
+ else if ((0, data_mart_definition_guards_1.isSqlDefinition)(dataMartDefinition)) {
68
+ await this.prepareSqlData(dataMartDefinition);
69
+ }
70
+ else if ((0, data_mart_definition_guards_1.isViewDefinition)(dataMartDefinition)) {
71
+ await this.prepareViewData(dataMartDefinition);
72
+ }
73
+ else if ((0, data_mart_definition_guards_1.isTablePatternDefinition)(dataMartDefinition)) {
74
+ await this.prepareTablePatternData(dataMartDefinition);
75
+ }
76
+ else {
77
+ throw new Error('Invalid data mart definition');
78
+ }
79
+ }
80
+ catch (error) {
81
+ this.logger.error('Failed to prepare report data', error);
82
+ throw error;
83
+ }
84
+ }
85
+ async prepareSqlData(dataMartDefinition) {
86
+ await this.prepareQueryData(dataMartDefinition.sqlQuery);
87
+ }
88
+ async prepareViewData(dataMartDefinition) {
89
+ await this.prepareQueryData(`SELECT * FROM \`${dataMartDefinition.fullyQualifiedName}\``);
90
+ }
91
+ async prepareTablePatternData(dataMartDefinition) {
92
+ await this.prepareQueryData(`SELECT * FROM \`${dataMartDefinition.pattern}*\``);
93
+ }
94
+ async prepareQueryData(query) {
95
+ const { jobId } = await this.adapter.executeQuery(query);
96
+ const jobResult = await this.adapter.getJob(jobId);
97
+ const destinationTable = jobResult.metadata.configuration.query.destinationTable;
98
+ this.defineReportResultTable(destinationTable.projectId, destinationTable.datasetId, destinationTable.tableId);
99
+ }
100
+ async prepareTableData(dataMartDefinition) {
101
+ const tableRef = dataMartDefinition.fullyQualifiedName.split('.');
102
+ this.defineReportResultTable(tableRef[0], tableRef[1], tableRef[2]);
103
+ }
104
+ defineReportResultTable(projectId, datasetId, tableId) {
105
+ this.reportResultTable = this.adapter.createTableReference(projectId, datasetId, tableId);
106
+ if (!this.reportResultTable) {
107
+ throw new Error('Report result table not set');
108
+ }
109
+ }
110
+ async prepareBigQuery(dataStorage) {
111
+ try {
112
+ if (!(0, data_storage_credentials_guards_1.isBigqueryCredentials)(dataStorage.credentials)) {
113
+ throw new Error('Google BigQuery credentials are not properly configured');
114
+ }
115
+ if (!(0, data_storage_config_guards_1.isBigQueryConfig)(dataStorage.config)) {
116
+ throw new Error('Google BigQuery config is not properly configured');
117
+ }
118
+ this.adapter = this.adapterFactory.create(dataStorage.credentials, dataStorage.config);
119
+ this.logger.debug('BigQuery adapter created successfully');
120
+ }
121
+ catch (error) {
122
+ this.logger.error('Failed to create BigQuery adapter', error);
123
+ throw error;
124
+ }
125
+ }
126
+ };
127
+ exports.BigQueryReportReader = BigQueryReportReader;
128
+ exports.BigQueryReportReader = BigQueryReportReader = BigQueryReportReader_1 = __decorate([
129
+ (0, common_1.Injectable)({ scope: common_1.Scope.TRANSIENT }),
130
+ __metadata("design:paramtypes", [bigquery_api_adapter_factory_1.BigQueryApiAdapterFactory])
131
+ ], BigQueryReportReader);
132
+ //# sourceMappingURL=bigquery-report-reader.service.js.map
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBigQueryConfig = isBigQueryConfig;
4
+ exports.isAthenaConfig = isAthenaConfig;
5
+ const bigquery_config_schema_1 = require("./bigquery/schemas/bigquery-config.schema");
6
+ const athena_config_schema_1 = require("./athena/schemas/athena-config.schema");
7
+ function isBigQueryConfig(config) {
8
+ return bigquery_config_schema_1.BigQueryConfigSchema.safeParse(config).success;
9
+ }
10
+ function isAthenaConfig(config) {
11
+ return athena_config_schema_1.AthenaConfigSchema.safeParse(config).success;
12
+ }
13
+ //# sourceMappingURL=data-storage-config.guards.js.map
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBigqueryCredentials = isBigqueryCredentials;
4
+ exports.isAthenaCredentials = isAthenaCredentials;
5
+ const bigquery_credentials_schema_1 = require("./bigquery/schemas/bigquery-credentials.schema");
6
+ const athena_credentials_schema_1 = require("./athena/schemas/athena-credentials.schema");
7
+ function isBigqueryCredentials(credentials) {
8
+ return bigquery_credentials_schema_1.BigQueryCredentialsSchema.safeParse(credentials).success;
9
+ }
10
+ function isAthenaCredentials(credentials) {
11
+ return athena_credentials_schema_1.AthenaCredentialsSchema.safeParse(credentials).success;
12
+ }
13
+ //# sourceMappingURL=data-storage-credentials.guards.js.map
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data-storage-credentials.type.js.map
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataStorageFacadesProviders = void 0;
4
+ const data_storage_access_facade_1 = require("./facades/data-storage-access.facade");
5
+ exports.dataStorageFacadesProviders = [data_storage_access_facade_1.DataStorageAccessFacade];
6
+ //# sourceMappingURL=data-storage-facades.js.map
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dataStorageResolverProviders = exports.DATA_STORAGE_REPORT_READER_RESOLVER = exports.DATA_STORAGE_ACCESS_VALIDATOR_RESOLVER = void 0;
4
+ const bigquery_access_validator_1 = require("./bigquery/services/bigquery-access.validator");
5
+ const athena_access_validator_1 = require("./athena/services/athena-access.validator");
6
+ const type_resolver_1 = require("../../common/resolver/type-resolver");
7
+ const bigquery_report_reader_service_1 = require("./bigquery/services/bigquery-report-reader.service");
8
+ const athena_report_reader_service_1 = require("./athena/services/athena-report-reader.service");
9
+ const bigquery_api_adapter_factory_1 = require("./bigquery/adapters/bigquery-api-adapter.factory");
10
+ const athena_api_adapter_factory_1 = require("./athena/adapters/athena-api-adapter.factory");
11
+ const s3_api_adapter_factory_1 = require("./athena/adapters/s3-api-adapter.factory");
12
+ exports.DATA_STORAGE_ACCESS_VALIDATOR_RESOLVER = Symbol('DATA_STORAGE_ACCESS_VALIDATOR_RESOLVER');
13
+ exports.DATA_STORAGE_REPORT_READER_RESOLVER = Symbol('DATA_STORAGE_REPORT_READER_RESOLVER');
14
+ const accessValidatorProviders = [bigquery_access_validator_1.BigQueryAccessValidator, athena_access_validator_1.AthenaAccessValidator];
15
+ const storageDataProviders = [bigquery_report_reader_service_1.BigQueryReportReader, athena_report_reader_service_1.AthenaReportReader];
16
+ const adapterFactories = [bigquery_api_adapter_factory_1.BigQueryApiAdapterFactory, athena_api_adapter_factory_1.AthenaApiAdapterFactory, s3_api_adapter_factory_1.S3ApiAdapterFactory];
17
+ exports.dataStorageResolverProviders = [
18
+ ...accessValidatorProviders,
19
+ ...storageDataProviders,
20
+ ...adapterFactories,
21
+ {
22
+ provide: exports.DATA_STORAGE_ACCESS_VALIDATOR_RESOLVER,
23
+ useFactory: (...validators) => new type_resolver_1.TypeResolver(validators),
24
+ inject: accessValidatorProviders,
25
+ },
26
+ {
27
+ provide: exports.DATA_STORAGE_REPORT_READER_RESOLVER,
28
+ useFactory: (...storageDataProviders) => new type_resolver_1.TypeResolver(storageDataProviders),
29
+ inject: storageDataProviders,
30
+ },
31
+ ];
32
+ //# sourceMappingURL=data-storage-providers.js.map
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data-storage-report-reader.interface.js.map
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateDataDestinationCommand = void 0;
4
+ class CreateDataDestinationCommand {
5
+ projectId;
6
+ title;
7
+ type;
8
+ credentials;
9
+ constructor(projectId, title, type, credentials) {
10
+ this.projectId = projectId;
11
+ this.title = title;
12
+ this.type = type;
13
+ this.credentials = credentials;
14
+ }
15
+ }
16
+ exports.CreateDataDestinationCommand = CreateDataDestinationCommand;
17
+ //# sourceMappingURL=create-data-destination.command.js.map
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateReportCommand = void 0;
4
+ class CreateReportCommand {
5
+ projectId;
6
+ userId;
7
+ title;
8
+ dataMartId;
9
+ dataDestinationId;
10
+ destinationConfig;
11
+ constructor(projectId, userId, title, dataMartId, dataDestinationId, destinationConfig) {
12
+ this.projectId = projectId;
13
+ this.userId = userId;
14
+ this.title = title;
15
+ this.dataMartId = dataMartId;
16
+ this.dataDestinationId = dataDestinationId;
17
+ this.destinationConfig = destinationConfig;
18
+ }
19
+ }
20
+ exports.CreateReportCommand = CreateReportCommand;
21
+ //# sourceMappingURL=create-report.command.js.map