@solidstarters/solid-core 1.2.133 → 1.2.135

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 (278) hide show
  1. package/dist/controllers/ai-interaction.controller.d.ts +45 -0
  2. package/dist/controllers/ai-interaction.controller.d.ts.map +1 -0
  3. package/dist/controllers/ai-interaction.controller.js +192 -0
  4. package/dist/controllers/ai-interaction.controller.js.map +1 -0
  5. package/dist/controllers/dashboard-variable.controller.d.ts +43 -0
  6. package/dist/controllers/dashboard-variable.controller.d.ts.map +1 -0
  7. package/dist/controllers/dashboard-variable.controller.js +179 -0
  8. package/dist/controllers/dashboard-variable.controller.js.map +1 -0
  9. package/dist/controllers/dashboard.controller.d.ts +45 -0
  10. package/dist/controllers/dashboard.controller.d.ts.map +1 -0
  11. package/dist/controllers/dashboard.controller.js +192 -0
  12. package/dist/controllers/dashboard.controller.js.map +1 -0
  13. package/dist/controllers/question-sql-dataset-config.controller.d.ts +43 -0
  14. package/dist/controllers/question-sql-dataset-config.controller.d.ts.map +1 -0
  15. package/dist/controllers/question-sql-dataset-config.controller.js +179 -0
  16. package/dist/controllers/question-sql-dataset-config.controller.js.map +1 -0
  17. package/dist/controllers/question.controller.d.ts +45 -0
  18. package/dist/controllers/question.controller.d.ts.map +1 -0
  19. package/dist/controllers/question.controller.js +194 -0
  20. package/dist/controllers/question.controller.js.map +1 -0
  21. package/dist/controllers/test.controller.d.ts.map +1 -1
  22. package/dist/controllers/test.controller.js.map +1 -1
  23. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +3 -0
  24. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +1 -0
  25. package/dist/decorators/dashboard-question-data-provider.decorator.js +11 -0
  26. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +1 -0
  27. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +3 -0
  28. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +1 -0
  29. package/dist/decorators/dashboard-selection-provider.decorator.js +11 -0
  30. package/dist/decorators/dashboard-selection-provider.decorator.js.map +1 -0
  31. package/dist/dtos/create-ai-interaction.dto.d.ts +14 -0
  32. package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -0
  33. package/dist/dtos/create-ai-interaction.dto.js +90 -0
  34. package/dist/dtos/create-ai-interaction.dto.js.map +1 -0
  35. package/dist/dtos/create-dashboard-variable.dto.d.ts +18 -0
  36. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +1 -0
  37. package/dist/dtos/create-dashboard-variable.dto.js +97 -0
  38. package/dist/dtos/create-dashboard-variable.dto.js.map +1 -0
  39. package/dist/dtos/create-dashboard.dto.d.ts +15 -0
  40. package/dist/dtos/create-dashboard.dto.d.ts.map +1 -0
  41. package/dist/dtos/create-dashboard.dto.js +90 -0
  42. package/dist/dtos/create-dashboard.dto.js.map +1 -0
  43. package/dist/dtos/create-question-sql-dataset-config.dto.d.ts +12 -0
  44. package/dist/dtos/create-question-sql-dataset-config.dto.d.ts.map +1 -0
  45. package/dist/dtos/create-question-sql-dataset-config.dto.js +77 -0
  46. package/dist/dtos/create-question-sql-dataset-config.dto.js.map +1 -0
  47. package/dist/dtos/create-question.dto.d.ts +16 -0
  48. package/dist/dtos/create-question.dto.d.ts.map +1 -0
  49. package/dist/dtos/create-question.dto.js +99 -0
  50. package/dist/dtos/create-question.dto.js.map +1 -0
  51. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +8 -0
  52. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +1 -0
  53. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +52 -0
  54. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +1 -0
  55. package/dist/dtos/invoke-ai-prompt.dto.d.ts +4 -0
  56. package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +1 -0
  57. package/dist/dtos/invoke-ai-prompt.dto.js +25 -0
  58. package/dist/dtos/invoke-ai-prompt.dto.js.map +1 -0
  59. package/dist/dtos/update-ai-interaction.dto.d.ts +15 -0
  60. package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -0
  61. package/dist/dtos/update-ai-interaction.dto.js +96 -0
  62. package/dist/dtos/update-ai-interaction.dto.js.map +1 -0
  63. package/dist/dtos/update-dashboard-variable.dto.d.ts +15 -0
  64. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +1 -0
  65. package/dist/dtos/update-dashboard-variable.dto.js +95 -0
  66. package/dist/dtos/update-dashboard-variable.dto.js.map +1 -0
  67. package/dist/dtos/update-dashboard.dto.d.ts +16 -0
  68. package/dist/dtos/update-dashboard.dto.d.ts.map +1 -0
  69. package/dist/dtos/update-dashboard.dto.js +96 -0
  70. package/dist/dtos/update-dashboard.dto.js.map +1 -0
  71. package/dist/dtos/update-question-sql-dataset-config.dto.d.ts +13 -0
  72. package/dist/dtos/update-question-sql-dataset-config.dto.d.ts.map +1 -0
  73. package/dist/dtos/update-question-sql-dataset-config.dto.js +86 -0
  74. package/dist/dtos/update-question-sql-dataset-config.dto.js.map +1 -0
  75. package/dist/dtos/update-question.dto.d.ts +17 -0
  76. package/dist/dtos/update-question.dto.d.ts.map +1 -0
  77. package/dist/dtos/update-question.dto.js +106 -0
  78. package/dist/dtos/update-question.dto.js.map +1 -0
  79. package/dist/entities/ai-interaction.entity.d.ts +15 -0
  80. package/dist/entities/ai-interaction.entity.d.ts.map +1 -0
  81. package/dist/entities/ai-interaction.entity.js +70 -0
  82. package/dist/entities/ai-interaction.entity.js.map +1 -0
  83. package/dist/entities/dashboard-variable.entity.d.ts +15 -0
  84. package/dist/entities/dashboard-variable.entity.d.ts.map +1 -0
  85. package/dist/entities/dashboard-variable.entity.js +73 -0
  86. package/dist/entities/dashboard-variable.entity.js.map +1 -0
  87. package/dist/entities/dashboard.entity.d.ts +12 -0
  88. package/dist/entities/dashboard.entity.d.ts.map +1 -0
  89. package/dist/entities/dashboard.entity.js +50 -0
  90. package/dist/entities/dashboard.entity.js.map +1 -0
  91. package/dist/entities/question-sql-dataset-config.entity.d.ts +13 -0
  92. package/dist/entities/question-sql-dataset-config.entity.d.ts.map +1 -0
  93. package/dist/entities/question-sql-dataset-config.entity.js +60 -0
  94. package/dist/entities/question-sql-dataset-config.entity.js.map +1 -0
  95. package/dist/entities/question.entity.d.ts +15 -0
  96. package/dist/entities/question.entity.d.ts.map +1 -0
  97. package/dist/entities/question.entity.js +67 -0
  98. package/dist/entities/question.entity.js.map +1 -0
  99. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts +1 -0
  100. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts.map +1 -1
  101. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js +32 -7
  102. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
  103. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.d.ts +1 -0
  104. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.d.ts.map +1 -1
  105. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.js +32 -7
  106. package/dist/helpers/field-crud-managers/SelectionStaticFieldCrudManager.js.map +1 -1
  107. package/dist/helpers/solid-registry.d.ts +9 -1
  108. package/dist/helpers/solid-registry.d.ts.map +1 -1
  109. package/dist/helpers/solid-registry.js +32 -0
  110. package/dist/helpers/solid-registry.js.map +1 -1
  111. package/dist/index.d.ts +5 -0
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +5 -0
  114. package/dist/index.js.map +1 -1
  115. package/dist/interfaces.d.ts +12 -1
  116. package/dist/interfaces.d.ts.map +1 -1
  117. package/dist/interfaces.js.map +1 -1
  118. package/dist/mappers/dashboard-mapper.d.ts +6 -0
  119. package/dist/mappers/dashboard-mapper.d.ts.map +1 -0
  120. package/dist/mappers/dashboard-mapper.js +60 -0
  121. package/dist/mappers/dashboard-mapper.js.map +1 -0
  122. package/dist/repository/dashboard.repository.d.ts +11 -0
  123. package/dist/repository/dashboard.repository.d.ts.map +1 -0
  124. package/dist/repository/dashboard.repository.js +93 -0
  125. package/dist/repository/dashboard.repository.js.map +1 -0
  126. package/dist/seeders/module-metadata-seeder.service.d.ts +5 -1
  127. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  128. package/dist/seeders/module-metadata-seeder.service.js +18 -2
  129. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  130. package/dist/seeders/seed-data/solid-core-metadata.json +4222 -2418
  131. package/dist/services/ai-interaction.service.d.ts +23 -0
  132. package/dist/services/ai-interaction.service.d.ts.map +1 -0
  133. package/dist/services/ai-interaction.service.js +147 -0
  134. package/dist/services/ai-interaction.service.js.map +1 -0
  135. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +12 -0
  136. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +1 -0
  137. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +55 -0
  138. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +1 -0
  139. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +11 -0
  140. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +1 -0
  141. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +45 -0
  142. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +1 -0
  143. package/dist/services/dashboard-variable.service.d.ts +23 -0
  144. package/dist/services/dashboard-variable.service.d.ts.map +1 -0
  145. package/dist/services/dashboard-variable.service.js +57 -0
  146. package/dist/services/dashboard-variable.service.js.map +1 -0
  147. package/dist/services/dashboard.service.d.ts +38 -0
  148. package/dist/services/dashboard.service.d.ts.map +1 -0
  149. package/dist/services/dashboard.service.js +179 -0
  150. package/dist/services/dashboard.service.js.map +1 -0
  151. package/dist/services/import-transaction.service.d.ts.map +1 -1
  152. package/dist/services/import-transaction.service.js +2 -1
  153. package/dist/services/import-transaction.service.js.map +1 -1
  154. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  155. package/dist/services/menu-item-metadata.service.js +1 -1
  156. package/dist/services/menu-item-metadata.service.js.map +1 -1
  157. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +36 -0
  158. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +1 -0
  159. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +85 -0
  160. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +1 -0
  161. package/dist/services/question-data-providers/helpers.d.ts +4 -0
  162. package/dist/services/question-data-providers/helpers.d.ts.map +1 -0
  163. package/dist/services/question-data-providers/helpers.js +10 -0
  164. package/dist/services/question-data-providers/helpers.js.map +1 -0
  165. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +17 -0
  166. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +1 -0
  167. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +64 -0
  168. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +1 -0
  169. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +19 -0
  170. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +1 -0
  171. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +84 -0
  172. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +1 -0
  173. package/dist/services/question-sql-dataset-config.service.d.ts +22 -0
  174. package/dist/services/question-sql-dataset-config.service.d.ts.map +1 -0
  175. package/dist/services/question-sql-dataset-config.service.js +56 -0
  176. package/dist/services/question-sql-dataset-config.service.js.map +1 -0
  177. package/dist/services/question.service.d.ts +29 -0
  178. package/dist/services/question.service.d.ts.map +1 -0
  179. package/dist/services/question.service.js +117 -0
  180. package/dist/services/question.service.js.map +1 -0
  181. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  182. package/dist/services/scheduled-jobs/scheduler.service.js +22 -11
  183. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  184. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +11 -0
  185. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +1 -0
  186. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +46 -0
  187. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +1 -0
  188. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +11 -0
  189. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +1 -0
  190. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +47 -0
  191. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +1 -0
  192. package/dist/services/solid-introspect.service.d.ts +2 -0
  193. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  194. package/dist/services/solid-introspect.service.js +28 -0
  195. package/dist/services/solid-introspect.service.js.map +1 -1
  196. package/dist/services/sql-expression-resolver.service.d.ts +9 -0
  197. package/dist/services/sql-expression-resolver.service.d.ts.map +1 -0
  198. package/dist/services/sql-expression-resolver.service.js +105 -0
  199. package/dist/services/sql-expression-resolver.service.js.map +1 -0
  200. package/dist/solid-core.module.d.ts.map +1 -1
  201. package/dist/solid-core.module.js +61 -0
  202. package/dist/solid-core.module.js.map +1 -1
  203. package/dist/subscribers/dashboard-variable.subscriber.d.ts +16 -0
  204. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +1 -0
  205. package/dist/subscribers/dashboard-variable.subscriber.js +72 -0
  206. package/dist/subscribers/dashboard-variable.subscriber.js.map +1 -0
  207. package/dist/subscribers/dashboard.subscriber.d.ts +15 -0
  208. package/dist/subscribers/dashboard.subscriber.d.ts.map +1 -0
  209. package/dist/subscribers/dashboard.subscriber.js +56 -0
  210. package/dist/subscribers/dashboard.subscriber.js.map +1 -0
  211. package/dist/subscribers/question-sql-dataset-config.subscriber.d.ts +16 -0
  212. package/dist/subscribers/question-sql-dataset-config.subscriber.d.ts.map +1 -0
  213. package/dist/subscribers/question-sql-dataset-config.subscriber.js +72 -0
  214. package/dist/subscribers/question-sql-dataset-config.subscriber.js.map +1 -0
  215. package/dist/subscribers/question.subscriber.d.ts +16 -0
  216. package/dist/subscribers/question.subscriber.d.ts.map +1 -0
  217. package/dist/subscribers/question.subscriber.js +72 -0
  218. package/dist/subscribers/question.subscriber.js.map +1 -0
  219. package/dist/tsconfig.tsbuildinfo +1 -1
  220. package/package.json +1 -1
  221. package/src/controllers/ai-interaction.controller.ts +98 -0
  222. package/src/controllers/dashboard-variable.controller.ts +93 -0
  223. package/src/controllers/dashboard.controller.ts +99 -0
  224. package/src/controllers/question-sql-dataset-config.controller.ts +93 -0
  225. package/src/controllers/question.controller.ts +104 -0
  226. package/src/controllers/test.controller.ts +1 -2
  227. package/src/decorators/dashboard-question-data-provider.decorator.ts +7 -0
  228. package/src/decorators/dashboard-selection-provider.decorator.ts +7 -0
  229. package/src/dtos/create-ai-interaction.dto.ts +60 -0
  230. package/src/dtos/create-dashboard-variable.dto.ts +56 -0
  231. package/src/dtos/create-dashboard.dto.ts +53 -0
  232. package/src/dtos/create-question-sql-dataset-config.dto.ts +42 -0
  233. package/src/dtos/create-question.dto.ts +58 -0
  234. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +29 -0
  235. package/src/dtos/invoke-ai-prompt.dto.ts +6 -0
  236. package/src/dtos/update-ai-interaction.dto.ts +65 -0
  237. package/src/dtos/update-dashboard-variable.dto.ts +54 -0
  238. package/src/dtos/update-dashboard.dto.ts +57 -0
  239. package/src/dtos/update-question-sql-dataset-config.dto.ts +49 -0
  240. package/src/dtos/update-question.dto.ts +63 -0
  241. package/src/entities/ai-interaction.entity.ts +39 -0
  242. package/src/entities/dashboard-variable.entity.ts +30 -0
  243. package/src/entities/dashboard.entity.ts +21 -0
  244. package/src/entities/question-sql-dataset-config.entity.ts +25 -0
  245. package/src/entities/question.entity.ts +30 -0
  246. package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +44 -18
  247. package/src/helpers/field-crud-managers/SelectionStaticFieldCrudManager.ts +43 -15
  248. package/src/helpers/solid-registry.ts +44 -2
  249. package/src/index.ts +5 -0
  250. package/src/interfaces.ts +41 -29
  251. package/src/mappers/dashboard-mapper.ts +52 -0
  252. package/src/repository/dashboard.repository.ts +100 -0
  253. package/src/seeders/module-metadata-seeder.service.ts +21 -1
  254. package/src/seeders/seed-data/solid-core-metadata.json +4225 -2421
  255. package/src/services/1. Create a context menu option i.py +12 -0
  256. package/src/services/ai-interaction.service.ts +127 -0
  257. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +56 -0
  258. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +37 -0
  259. package/src/services/dashboard-variable.service.ts +36 -0
  260. package/src/services/dashboard.service.ts +147 -0
  261. package/src/services/import-transaction.service.ts +2 -1
  262. package/src/services/menu-item-metadata.service.ts +2 -1
  263. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +121 -0
  264. package/src/services/question-data-providers/helpers.ts +11 -0
  265. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +72 -0
  266. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +110 -0
  267. package/src/services/question-sql-dataset-config.service.ts +34 -0
  268. package/src/services/question.service.ts +115 -0
  269. package/src/services/scheduled-jobs/scheduler.service.ts +32 -64
  270. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +41 -0
  271. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +41 -0
  272. package/src/services/solid-introspect.service.ts +42 -0
  273. package/src/services/sql-expression-resolver.service.ts +125 -0
  274. package/src/solid-core.module.ts +61 -1
  275. package/src/subscribers/dashboard-variable.subscriber.ts +63 -0
  276. package/src/subscribers/dashboard.subscriber.ts +43 -0
  277. package/src/subscribers/question-sql-dataset-config.subscriber.ts +63 -0
  278. package/src/subscribers/question.subscriber.ts +65 -0
@@ -0,0 +1,85 @@
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 ChartJsSqlDataProvider_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ChartJsSqlDataProvider = exports.SqlExpressionOperator = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const dashboard_question_data_provider_decorator_1 = require("../../decorators/dashboard-question-data-provider.decorator");
16
+ const typeorm_1 = require("typeorm");
17
+ const sql_expression_resolver_service_1 = require("../sql-expression-resolver.service");
18
+ const common_2 = require("@nestjs/common");
19
+ const helpers_1 = require("./helpers");
20
+ var SqlExpressionOperator;
21
+ (function (SqlExpressionOperator) {
22
+ SqlExpressionOperator["EQUALS"] = "$equals";
23
+ SqlExpressionOperator["NOT_EQUALS"] = "$notEquals";
24
+ SqlExpressionOperator["CONTAINS"] = "$contains";
25
+ SqlExpressionOperator["NOT_CONTAINS"] = "$notContains";
26
+ SqlExpressionOperator["STARTS_WITH"] = "$startsWith";
27
+ SqlExpressionOperator["ENDS_WITH"] = "$endsWith";
28
+ SqlExpressionOperator["IN"] = "$in";
29
+ SqlExpressionOperator["NOT_IN"] = "$notIn";
30
+ SqlExpressionOperator["BETWEEN"] = "$between";
31
+ SqlExpressionOperator["LT"] = "$lt";
32
+ SqlExpressionOperator["LTE"] = "$lte";
33
+ SqlExpressionOperator["GT"] = "$gt";
34
+ SqlExpressionOperator["GTE"] = "$gte";
35
+ })(SqlExpressionOperator || (exports.SqlExpressionOperator = SqlExpressionOperator = {}));
36
+ let ChartJsSqlDataProvider = ChartJsSqlDataProvider_1 = class ChartJsSqlDataProvider {
37
+ constructor(entityManager, sqlExpressionResolver) {
38
+ this.entityManager = entityManager;
39
+ this.sqlExpressionResolver = sqlExpressionResolver;
40
+ this.logger = new common_2.Logger(ChartJsSqlDataProvider_1.name);
41
+ }
42
+ help() {
43
+ return "Provides data for dashboard questions using a SQL dataset configuration. Configure your SQL dataset in the admin panel, then reference it in your dashboard question to fetch data.";
44
+ }
45
+ name() {
46
+ return "ChartJsSqlDataProvider";
47
+ }
48
+ async getData(question, expressions, context) {
49
+ let datasetIdx = 0;
50
+ const datasets = [];
51
+ const labels = await (0, helpers_1.getLabels)(question, this.entityManager);
52
+ for (const questionSqlDatasetConfig of question.questionSqlDatasetConfigs) {
53
+ const sql = questionSqlDatasetConfig.sql;
54
+ if (!sql) {
55
+ throw new Error(`SQL dataset ${questionSqlDatasetConfig.datasetName} configuration does not contain a valid SQL query.`);
56
+ }
57
+ const sqlReplacementResult = this.sqlExpressionResolver.resolveSqlWithExpressions(sql, expressions || []);
58
+ this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is query=[${sqlReplacementResult.rawSql}]`);
59
+ this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is parameters=[${JSON.stringify(sqlReplacementResult.parameters)}]`);
60
+ const results = await this.entityManager.query(sqlReplacementResult.rawSql, sqlReplacementResult.parameters);
61
+ const data = [];
62
+ for (let i = 0; i < results.length; i++) {
63
+ const result = results[i];
64
+ data.push(result[questionSqlDatasetConfig.valueColumnName]);
65
+ }
66
+ datasets.push({
67
+ label: questionSqlDatasetConfig.datasetDisplayName,
68
+ data: data,
69
+ ...JSON.parse(questionSqlDatasetConfig.options || '{}'),
70
+ });
71
+ datasetIdx++;
72
+ }
73
+ return {
74
+ labels,
75
+ datasets
76
+ };
77
+ }
78
+ };
79
+ exports.ChartJsSqlDataProvider = ChartJsSqlDataProvider;
80
+ exports.ChartJsSqlDataProvider = ChartJsSqlDataProvider = ChartJsSqlDataProvider_1 = __decorate([
81
+ (0, dashboard_question_data_provider_decorator_1.DashboardQuestionDataProvider)(),
82
+ (0, common_1.Injectable)(),
83
+ __metadata("design:paramtypes", [typeorm_1.EntityManager, sql_expression_resolver_service_1.SqlExpressionResolverService])
84
+ ], ChartJsSqlDataProvider);
85
+ //# sourceMappingURL=chartjs-sql-data-provider.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartjs-sql-data-provider.service.js","sourceRoot":"","sources":["../../../src/services/question-data-providers/chartjs-sql-data-provider.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { DashboardQuestionDataProvider } from \"src/decorators/dashboard-question-data-provider.decorator\";\nimport { Question } from \"src/entities/question.entity\";\nimport { IDashboardQuestionDataProvider } from \"src/interfaces\";\nimport { EntityManager } from \"typeorm\";\nimport { SqlExpressionResolverService } from \"../sql-expression-resolver.service\";\nimport { Logger } from '@nestjs/common';\nimport { getLabels } from \"./helpers\";\n\nexport interface QuestionSqlDataProviderContext {\n // questionSqlDatasetConfig: QuestionSqlDatasetConfig;\n // questionId: number;\n // question: Question;\n}\n\nexport enum SqlExpressionOperator {\n EQUALS = '$equals',\n NOT_EQUALS = '$notEquals',\n CONTAINS = '$contains',\n NOT_CONTAINS = '$notContains',\n STARTS_WITH = '$startsWith',\n ENDS_WITH = '$endsWith',\n IN = '$in',\n NOT_IN = '$notIn',\n BETWEEN = '$between',\n LT = '$lt',\n LTE = '$lte',\n GT = '$gt',\n GTE = '$gte'\n}\n\nexport interface SqlExpression {\n variableName: string; // The name of the variable in the SQL query\n operator: SqlExpressionOperator; // The operator to use for the replacement (e.g., '=', '>', '<', etc.)\n value: string[]; // The value to replace the variable with\n}\n\n@DashboardQuestionDataProvider()\n@Injectable()\nexport class ChartJsSqlDataProvider implements IDashboardQuestionDataProvider<QuestionSqlDataProviderContext, any> {\n private readonly logger = new Logger(ChartJsSqlDataProvider.name);\n\n constructor(private readonly entityManager: EntityManager, private readonly sqlExpressionResolver: SqlExpressionResolverService) { }\n\n help(): string {\n return \"Provides data for dashboard questions using a SQL dataset configuration. Configure your SQL dataset in the admin panel, then reference it in your dashboard question to fetch data.\";\n }\n\n name(): string {\n return \"ChartJsSqlDataProvider\";\n }\n\n async getData(question: Question, expressions?: SqlExpression[], context?: QuestionSqlDataProviderContext): Promise<any> {\n // TODO: put some validation to check if the results of each SQL in each dataset returns the same number of rows \n\n // This is what we have to return.\n // const data = {\n // labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],\n // datasets: [\n // {\n // label: 'Dataset 1',\n // data: labels.map(() => faker.number.int({ min: 0, max: 1000 })),\n // backgroundColor: 'rgba(255, 99, 132, 0.5)',\n // },\n // {\n // label: 'Dataset 2',\n // data: labels.map(() => faker.number.int({ min: 0, max: 1000 })),\n // backgroundColor: 'rgba(53, 162, 235, 0.5)',\n // },\n // {\n // label: 'Dataset 3',\n // data: labels.map(() => faker.number.int({ min: 0, max: 1000 })),\n // backgroundColor: 'rgba(53, 235, 162, 0.5)',\n // },\n // ],\n // };\n\n // TODO: Load the set of labels by using a separate field on the question entity.\n\n let datasetIdx = 0;\n const datasets = [];\n\n const labels: string[] = await getLabels(question, this.entityManager);\n\n // const question = context.question;\n for (const questionSqlDatasetConfig of question.questionSqlDatasetConfigs) {\n\n const sql = questionSqlDatasetConfig.sql;\n if (!sql) {\n throw new Error(`SQL dataset ${questionSqlDatasetConfig.datasetName} configuration does not contain a valid SQL query.`);\n }\n\n const sqlReplacementResult = this.sqlExpressionResolver.resolveSqlWithExpressions(sql, expressions || []);\n this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is query=[${sqlReplacementResult.rawSql}]`);\n this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is parameters=[${JSON.stringify(sqlReplacementResult.parameters)}]`);\n const results = await this.entityManager.query(sqlReplacementResult.rawSql, sqlReplacementResult.parameters);\n\n // Also for each data set we create the dataset object as is expected by ChartJs.\n const data = [];\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n data.push(result[questionSqlDatasetConfig.valueColumnName]);\n }\n datasets.push({\n label: questionSqlDatasetConfig.datasetDisplayName,\n data: data,\n ...JSON.parse(questionSqlDatasetConfig.options || '{}'),\n });\n\n datasetIdx++;\n }\n\n return {\n labels,\n datasets\n };\n\n }\n\n\n}"]}
@@ -0,0 +1,4 @@
1
+ import { Question } from "src/entities/question.entity";
2
+ import { EntityManager } from "typeorm";
3
+ export declare function getLabels(question: Question, entityManager: EntityManager): Promise<string[]>;
4
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/services/question-data-providers/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnG"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLabels = getLabels;
4
+ async function getLabels(question, entityManager) {
5
+ const labelSql = question.labelSql;
6
+ const labelResults = await this.entityManager.query(labelSql);
7
+ const labels = labelResults.map((result) => result['label']);
8
+ return labels;
9
+ }
10
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/services/question-data-providers/helpers.ts"],"names":[],"mappings":";;AAGA,8BAOC;AAPM,KAAK,UAAU,SAAS,CAAC,QAAkB,EAAE,aAA4B;IAC5E,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAG9D,MAAM,MAAM,GAAa,YAAY,CAAC,GAAG,CAAC,CAAC,MAAgC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC;AAClB,CAAC","sourcesContent":["import { Question } from \"src/entities/question.entity\";\nimport { EntityManager } from \"typeorm\";\n\nexport async function getLabels(question: Question, entityManager: EntityManager): Promise<string[]> {\n const labelSql = question.labelSql;\n const labelResults = await this.entityManager.query(labelSql);\n // Assuming labelResults has a single row with a 'label' field\n // Map the label results to the labels array\n const labels: string[] = labelResults.map((result: { [x: string]: string; }) => result['label']);\n return labels;\n}"]}
@@ -0,0 +1,17 @@
1
+ import { Question } from "src/entities/question.entity";
2
+ import { IDashboardQuestionDataProvider } from "src/interfaces";
3
+ import { EntityManager } from "typeorm";
4
+ import { SqlExpressionResolverService } from "../sql-expression-resolver.service";
5
+ import { SqlExpression } from "./chartjs-sql-data-provider.service";
6
+ export interface QuestionSqlDataProviderContext {
7
+ }
8
+ export declare class PrimeReactDatatableSqlDataProvider implements IDashboardQuestionDataProvider<QuestionSqlDataProviderContext, any> {
9
+ private readonly entityManager;
10
+ private readonly sqlExpressionResolver;
11
+ private readonly logger;
12
+ constructor(entityManager: EntityManager, sqlExpressionResolver: SqlExpressionResolverService);
13
+ help(): string;
14
+ name(): string;
15
+ getData(question: Question, expressions?: SqlExpression[], context?: QuestionSqlDataProviderContext): Promise<any>;
16
+ }
17
+ //# sourceMappingURL=prime-react-datatable-sql-data-provider.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prime-react-datatable-sql-data-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,MAAM,WAAW,8BAA8B;CAI9C;AAED,qBAEa,kCAAmC,YAAW,8BAA8B,CAAC,8BAA8B,EAAE,GAAG,CAAC;IAG9G,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAiB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAFjG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuD;gBAEjD,aAAa,EAAE,aAAa,EAAmB,qBAAqB,EAAE,4BAA4B;IAE/H,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAIR,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE,8BAA8B,GAAG,OAAO,CAAC,GAAG,CAAC;CAyC3H"}
@@ -0,0 +1,64 @@
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 PrimeReactDatatableSqlDataProvider_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.PrimeReactDatatableSqlDataProvider = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const dashboard_question_data_provider_decorator_1 = require("../../decorators/dashboard-question-data-provider.decorator");
16
+ const typeorm_1 = require("typeorm");
17
+ const sql_expression_resolver_service_1 = require("../sql-expression-resolver.service");
18
+ const common_2 = require("@nestjs/common");
19
+ let PrimeReactDatatableSqlDataProvider = PrimeReactDatatableSqlDataProvider_1 = class PrimeReactDatatableSqlDataProvider {
20
+ constructor(entityManager, sqlExpressionResolver) {
21
+ this.entityManager = entityManager;
22
+ this.sqlExpressionResolver = sqlExpressionResolver;
23
+ this.logger = new common_2.Logger(PrimeReactDatatableSqlDataProvider_1.name);
24
+ }
25
+ help() {
26
+ return "Provides data for dashboard questions using a SQL dataset configuration. Configure your SQL dataset in the admin panel, then reference it in your dashboard question to fetch data.";
27
+ }
28
+ name() {
29
+ return "PrimeReactDatatableSqlDataProvider";
30
+ }
31
+ async getData(question, expressions, context) {
32
+ const labelSql = question.labelSql;
33
+ const labelResults = await this.entityManager.query(labelSql);
34
+ const columns = [];
35
+ for (let i = 0; i < labelResults.length; i++) {
36
+ const labelResult = labelResults[i];
37
+ columns.push({
38
+ field: labelResult['field'],
39
+ header: labelResult['header'],
40
+ });
41
+ }
42
+ const values = [];
43
+ const questionSqlDatasetConfig = question.questionSqlDatasetConfigs[0];
44
+ const sql = questionSqlDatasetConfig.sql;
45
+ if (!sql) {
46
+ throw new Error(`SQL dataset ${questionSqlDatasetConfig.datasetName} configuration does not contain a valid SQL query.`);
47
+ }
48
+ const sqlReplacementResult = this.sqlExpressionResolver.resolveSqlWithExpressions(sql, expressions || []);
49
+ this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is query=[${sqlReplacementResult.rawSql}]`);
50
+ this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is parameters=[${JSON.stringify(sqlReplacementResult.parameters)}]`);
51
+ const results = await this.entityManager.query(sqlReplacementResult.rawSql, sqlReplacementResult.parameters);
52
+ return {
53
+ columns,
54
+ data: results,
55
+ };
56
+ }
57
+ };
58
+ exports.PrimeReactDatatableSqlDataProvider = PrimeReactDatatableSqlDataProvider;
59
+ exports.PrimeReactDatatableSqlDataProvider = PrimeReactDatatableSqlDataProvider = PrimeReactDatatableSqlDataProvider_1 = __decorate([
60
+ (0, dashboard_question_data_provider_decorator_1.DashboardQuestionDataProvider)(),
61
+ (0, common_1.Injectable)(),
62
+ __metadata("design:paramtypes", [typeorm_1.EntityManager, sql_expression_resolver_service_1.SqlExpressionResolverService])
63
+ ], PrimeReactDatatableSqlDataProvider);
64
+ //# sourceMappingURL=prime-react-datatable-sql-data-provider.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prime-react-datatable-sql-data-provider.service.js","sourceRoot":"","sources":["../../../src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,4HAA0G;AAG1G,qCAAwC;AACxC,wFAAkF;AAClF,2CAAwC;AAWjC,IAAM,kCAAkC,0CAAxC,MAAM,kCAAkC;IAG3C,YAA6B,aAA4B,EAAmB,qBAAmD;QAAlG,kBAAa,GAAb,aAAa,CAAe;QAAmB,0BAAqB,GAArB,qBAAqB,CAA8B;QAF9G,WAAM,GAAG,IAAI,eAAM,CAAC,oCAAkC,CAAC,IAAI,CAAC,CAAC;IAEqD,CAAC;IAEpI,IAAI;QACA,OAAO,qLAAqL,CAAC;IACjM,CAAC;IAED,IAAI;QACA,OAAO,oCAAoC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE,WAA6B,EAAE,OAAwC;QAMrG,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACnC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC;gBAC3B,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC;aAChC,CAAC,CAAC;QACP,CAAC;QAKD,MAAM,MAAM,GAAG,EAAE,CAAA;QAGjB,MAAM,wBAAwB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;QAEvE,MAAM,GAAG,GAAG,wBAAwB,CAAC,GAAG,CAAC;QACzC,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,eAAe,wBAAwB,CAAC,WAAW,oDAAoD,CAAC,CAAC;QAC7H,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC,yBAAyB,CAAC,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;QAC1G,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,wBAAwB,CAAC,WAAW,eAAe,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;QACnI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,wBAAwB,CAAC,WAAW,oBAAoB,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5J,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAE7G,OAAO;YACH,OAAO;YACP,IAAI,EAAE,OAAO;SAChB,CAAC;IAEN,CAAC;CACJ,CAAA;AAtDY,gFAAkC;6CAAlC,kCAAkC;IAF9C,IAAA,0EAA6B,GAAE;IAC/B,IAAA,mBAAU,GAAE;qCAImC,uBAAa,EAA0C,8DAA4B;GAHtH,kCAAkC,CAsD9C","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { DashboardQuestionDataProvider } from \"src/decorators/dashboard-question-data-provider.decorator\";\nimport { Question } from \"src/entities/question.entity\";\nimport { IDashboardQuestionDataProvider } from \"src/interfaces\";\nimport { EntityManager } from \"typeorm\";\nimport { SqlExpressionResolverService } from \"../sql-expression-resolver.service\";\nimport { Logger } from '@nestjs/common';\nimport { SqlExpression } from \"./chartjs-sql-data-provider.service\";\n\nexport interface QuestionSqlDataProviderContext {\n // questionSqlDatasetConfig: QuestionSqlDatasetConfig;\n // questionId: number;\n // question: Question;\n}\n\n@DashboardQuestionDataProvider()\n@Injectable()\nexport class PrimeReactDatatableSqlDataProvider implements IDashboardQuestionDataProvider<QuestionSqlDataProviderContext, any> {\n private readonly logger = new Logger(PrimeReactDatatableSqlDataProvider.name);\n\n constructor(private readonly entityManager: EntityManager, private readonly sqlExpressionResolver: SqlExpressionResolverService) { }\n\n help(): string {\n return \"Provides data for dashboard questions using a SQL dataset configuration. Configure your SQL dataset in the admin panel, then reference it in your dashboard question to fetch data.\";\n }\n\n name(): string {\n return \"PrimeReactDatatableSqlDataProvider\";\n }\n\n async getData(question: Question, expressions?: SqlExpression[], context?: QuestionSqlDataProviderContext): Promise<any> {\n // TODO: put some validation to check if the results of each SQL in each dataset returns the same number of rows \n\n // Check the expected response for prime react data tables to understand what is going on here...\n\n // TODO: Load the set of labels by using a separate field on the question entity.\n const labelSql = question.labelSql;\n const labelResults = await this.entityManager.query(labelSql);\n const columns = [];\n for (let i = 0; i < labelResults.length; i++) {\n const labelResult = labelResults[i];\n columns.push({\n field: labelResult['field'],\n header: labelResult['header'],\n });\n }\n\n // Load the chart options as a JSON \n // const chartOptions = JSON.parse(question.barChartLabelOptions || '{}');\n\n const values = []\n\n // For meter group we can assume that we only have one sql dataset config.\n const questionSqlDatasetConfig = question.questionSqlDatasetConfigs[0];\n\n const sql = questionSqlDatasetConfig.sql;\n if (!sql) {\n throw new Error(`SQL dataset ${questionSqlDatasetConfig.datasetName} configuration does not contain a valid SQL query.`);\n }\n\n const sqlReplacementResult = this.sqlExpressionResolver.resolveSqlWithExpressions(sql, expressions || []);\n this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is query=[${sqlReplacementResult.rawSql}]`);\n this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is parameters=[${JSON.stringify(sqlReplacementResult.parameters)}]`);\n const results = await this.entityManager.query(sqlReplacementResult.rawSql, sqlReplacementResult.parameters);\n\n return {\n columns,\n data: results,\n };\n\n }\n}"]}
@@ -0,0 +1,19 @@
1
+ import { Question } from "src/entities/question.entity";
2
+ import { IDashboardQuestionDataProvider } from "src/interfaces";
3
+ import { EntityManager } from "typeorm";
4
+ import { SqlExpressionResolverService } from "../sql-expression-resolver.service";
5
+ import { SqlExpression } from "./chartjs-sql-data-provider.service";
6
+ export interface QuestionSqlDataProviderContext {
7
+ }
8
+ export declare class PrimeReactMeterGroupSqlDataProvider implements IDashboardQuestionDataProvider<QuestionSqlDataProviderContext, any> {
9
+ private readonly entityManager;
10
+ private readonly sqlExpressionResolver;
11
+ private readonly logger;
12
+ constructor(entityManager: EntityManager, sqlExpressionResolver: SqlExpressionResolverService);
13
+ help(): string;
14
+ name(): string;
15
+ hslToHex(h: number, s: number, l: number): string;
16
+ generateDistinctColors(count: number): string[];
17
+ getData(question: Question, expressions?: SqlExpression[], context?: QuestionSqlDataProviderContext): Promise<any>;
18
+ }
19
+ //# sourceMappingURL=prime-react-meter-group-sql-data-provider.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prime-react-meter-group-sql-data-provider.service.d.ts","sourceRoot":"","sources":["../../../src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,MAAM,WAAW,8BAA8B;CAI9C;AAED,qBAEa,mCAAoC,YAAW,8BAA8B,CAAC,8BAA8B,EAAE,GAAG,CAAC;IAG/G,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAiB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAFjG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwD;gBAElD,aAAa,EAAE,aAAa,EAAmB,qBAAqB,EAAE,4BAA4B;IAE/H,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAId,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAcjD,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAezC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE,8BAA8B,GAAG,OAAO,CAAC,GAAG,CAAC;CAkD3H"}
@@ -0,0 +1,84 @@
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 PrimeReactMeterGroupSqlDataProvider_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.PrimeReactMeterGroupSqlDataProvider = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const dashboard_question_data_provider_decorator_1 = require("../../decorators/dashboard-question-data-provider.decorator");
16
+ const typeorm_1 = require("typeorm");
17
+ const sql_expression_resolver_service_1 = require("../sql-expression-resolver.service");
18
+ const common_2 = require("@nestjs/common");
19
+ let PrimeReactMeterGroupSqlDataProvider = PrimeReactMeterGroupSqlDataProvider_1 = class PrimeReactMeterGroupSqlDataProvider {
20
+ constructor(entityManager, sqlExpressionResolver) {
21
+ this.entityManager = entityManager;
22
+ this.sqlExpressionResolver = sqlExpressionResolver;
23
+ this.logger = new common_2.Logger(PrimeReactMeterGroupSqlDataProvider_1.name);
24
+ }
25
+ help() {
26
+ return "Provides data for dashboard questions using a SQL dataset configuration. Configure your SQL dataset in the admin panel, then reference it in your dashboard question to fetch data.";
27
+ }
28
+ name() {
29
+ return "PrimeReactMeterGroupSqlDataProvider";
30
+ }
31
+ hslToHex(h, s, l) {
32
+ l /= 100;
33
+ s /= 100;
34
+ const k = (n) => (n + h / 30) % 12;
35
+ const a = s * Math.min(l, 1 - l);
36
+ const f = (n) => Math.round(255 * (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))));
37
+ return `#${f(0).toString(16).padStart(2, '0')}${f(8).toString(16).padStart(2, '0')}${f(4)
38
+ .toString(16)
39
+ .padStart(2, '0')}`;
40
+ }
41
+ generateDistinctColors(count) {
42
+ const colors = [];
43
+ const hueStep = 360 / count;
44
+ const saturation = 65;
45
+ const lightness = 55;
46
+ for (let i = 0; i < count; i++) {
47
+ const hue = Math.round(i * hueStep);
48
+ colors.push(this.hslToHex(hue, saturation, lightness));
49
+ }
50
+ return colors;
51
+ }
52
+ async getData(question, expressions, context) {
53
+ const chartOptions = JSON.parse(question.chartOptions || '{}');
54
+ const values = [];
55
+ const questionSqlDatasetConfig = question.questionSqlDatasetConfigs[0];
56
+ const sql = questionSqlDatasetConfig.sql;
57
+ if (!sql) {
58
+ throw new Error(`SQL dataset ${questionSqlDatasetConfig.datasetName} configuration does not contain a valid SQL query.`);
59
+ }
60
+ const sqlReplacementResult = this.sqlExpressionResolver.resolveSqlWithExpressions(sql, expressions || []);
61
+ this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is query=[${sqlReplacementResult.rawSql}]`);
62
+ this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is parameters=[${JSON.stringify(sqlReplacementResult.parameters)}]`);
63
+ const results = await this.entityManager.query(sqlReplacementResult.rawSql, sqlReplacementResult.parameters);
64
+ const colors = this.generateDistinctColors(results.length);
65
+ for (let i = 0; i < results.length; i++) {
66
+ const result = results[i];
67
+ const colorFromChartOptions = chartOptions?.colors?.[result[questionSqlDatasetConfig.labelColumnName]];
68
+ const color = typeof colorFromChartOptions === 'string' ? colorFromChartOptions : colors[i];
69
+ values.push({
70
+ label: result[questionSqlDatasetConfig.labelColumnName],
71
+ color: color,
72
+ value: result[questionSqlDatasetConfig.valueColumnName]
73
+ });
74
+ }
75
+ return values;
76
+ }
77
+ };
78
+ exports.PrimeReactMeterGroupSqlDataProvider = PrimeReactMeterGroupSqlDataProvider;
79
+ exports.PrimeReactMeterGroupSqlDataProvider = PrimeReactMeterGroupSqlDataProvider = PrimeReactMeterGroupSqlDataProvider_1 = __decorate([
80
+ (0, dashboard_question_data_provider_decorator_1.DashboardQuestionDataProvider)(),
81
+ (0, common_1.Injectable)(),
82
+ __metadata("design:paramtypes", [typeorm_1.EntityManager, sql_expression_resolver_service_1.SqlExpressionResolverService])
83
+ ], PrimeReactMeterGroupSqlDataProvider);
84
+ //# sourceMappingURL=prime-react-meter-group-sql-data-provider.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prime-react-meter-group-sql-data-provider.service.js","sourceRoot":"","sources":["../../../src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from \"@nestjs/common\";\nimport { DashboardQuestionDataProvider } from \"src/decorators/dashboard-question-data-provider.decorator\";\nimport { Question } from \"src/entities/question.entity\";\nimport { IDashboardQuestionDataProvider } from \"src/interfaces\";\nimport { EntityManager } from \"typeorm\";\nimport { SqlExpressionResolverService } from \"../sql-expression-resolver.service\";\nimport { Logger } from '@nestjs/common';\nimport { SqlExpression } from \"./chartjs-sql-data-provider.service\";\n\nexport interface QuestionSqlDataProviderContext {\n // questionSqlDatasetConfig: QuestionSqlDatasetConfig;\n // questionId: number;\n // question: Question;\n}\n\n@DashboardQuestionDataProvider()\n@Injectable()\nexport class PrimeReactMeterGroupSqlDataProvider implements IDashboardQuestionDataProvider<QuestionSqlDataProviderContext, any> {\n private readonly logger = new Logger(PrimeReactMeterGroupSqlDataProvider.name);\n\n constructor(private readonly entityManager: EntityManager, private readonly sqlExpressionResolver: SqlExpressionResolverService) { }\n\n help(): string {\n return \"Provides data for dashboard questions using a SQL dataset configuration. Configure your SQL dataset in the admin panel, then reference it in your dashboard question to fetch data.\";\n }\n\n name(): string {\n return \"PrimeReactMeterGroupSqlDataProvider\";\n }\n\n hslToHex(h: number, s: number, l: number): string {\n l /= 100;\n s /= 100;\n\n const k = (n: number) => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = (n: number) =>\n Math.round(255 * (l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))));\n\n return `#${f(0).toString(16).padStart(2, '0')}${f(8).toString(16).padStart(2, '0')}${f(4)\n .toString(16)\n .padStart(2, '0')}`;\n }\n\n generateDistinctColors(count: number): string[] {\n const colors: string[] = [];\n\n const hueStep = 360 / count;\n const saturation = 65; // keep it vibrant\n const lightness = 55; // balanced for both light/dark themes\n\n for (let i = 0; i < count; i++) {\n const hue = Math.round(i * hueStep);\n colors.push(this.hslToHex(hue, saturation, lightness));\n }\n\n return colors;\n }\n\n async getData(question: Question, expressions?: SqlExpression[], context?: QuestionSqlDataProviderContext): Promise<any> {\n // TODO: put some validation to check if the results of each SQL in each dataset returns the same number of rows \n\n // This is what we have to return.\n // const values = [\n // { label: 'Apps', color: '#34d399', value: 16 },\n // { label: 'Messages', color: '#fbbf24', value: 8 },\n // { label: 'Media', color: '#60a5fa', value: 24 },\n // { label: 'System', color: '#c084fc', value: 10 }\n // ];\n\n // TODO: Load the set of labels by using a separate field on the question entity.\n\n // Load the chart options as a JSON \n const chartOptions = JSON.parse(question.chartOptions || '{}');\n\n const values = []\n\n // For meter group we can assume that we only have one sql dataset config.\n const questionSqlDatasetConfig = question.questionSqlDatasetConfigs[0];\n\n const sql = questionSqlDatasetConfig.sql;\n if (!sql) {\n throw new Error(`SQL dataset ${questionSqlDatasetConfig.datasetName} configuration does not contain a valid SQL query.`);\n }\n\n const sqlReplacementResult = this.sqlExpressionResolver.resolveSqlWithExpressions(sql, expressions || []);\n this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is query=[${sqlReplacementResult.rawSql}]`);\n this.logger.log(`Final Sql query for dataset [${questionSqlDatasetConfig.datasetName}] is parameters=[${JSON.stringify(sqlReplacementResult.parameters)}]`);\n const results = await this.entityManager.query(sqlReplacementResult.rawSql, sqlReplacementResult.parameters);\n\n const colors = this.generateDistinctColors(results.length);\n\n // Also for each data set we create the dataset object as is expected by ChartJs.\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n\n const colorFromChartOptions = chartOptions?.colors?.[result[questionSqlDatasetConfig.labelColumnName]];\n const color = typeof colorFromChartOptions === 'string' ? colorFromChartOptions : colors[i];\n\n values.push({\n label: result[questionSqlDatasetConfig.labelColumnName],\n color: color,\n value: result[questionSqlDatasetConfig.valueColumnName]\n })\n }\n\n return values;\n\n }\n}"]}
@@ -0,0 +1,22 @@
1
+ import { DiscoveryService, ModuleRef } from "@nestjs/core";
2
+ import { EntityManager, Repository } from 'typeorm';
3
+ import { CRUDService } from 'src/services/crud.service';
4
+ import { ModelMetadataService } from 'src/services/model-metadata.service';
5
+ import { ModuleMetadataService } from 'src/services/module-metadata.service';
6
+ import { ConfigService } from '@nestjs/config';
7
+ import { FileService } from 'src/services/file.service';
8
+ import { CrudHelperService } from 'src/services/crud-helper.service';
9
+ import { QuestionSqlDatasetConfig } from '../entities/question-sql-dataset-config.entity';
10
+ export declare class QuestionSqlDatasetConfigService extends CRUDService<QuestionSqlDatasetConfig> {
11
+ readonly modelMetadataService: ModelMetadataService;
12
+ readonly moduleMetadataService: ModuleMetadataService;
13
+ readonly configService: ConfigService;
14
+ readonly fileService: FileService;
15
+ readonly discoveryService: DiscoveryService;
16
+ readonly crudHelperService: CrudHelperService;
17
+ readonly entityManager: EntityManager;
18
+ readonly repo: Repository<QuestionSqlDatasetConfig>;
19
+ readonly moduleRef: ModuleRef;
20
+ constructor(modelMetadataService: ModelMetadataService, moduleMetadataService: ModuleMetadataService, configService: ConfigService, fileService: FileService, discoveryService: DiscoveryService, crudHelperService: CrudHelperService, entityManager: EntityManager, repo: Repository<QuestionSqlDatasetConfig>, moduleRef: ModuleRef);
21
+ }
22
+ //# sourceMappingURL=question-sql-dataset-config.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-sql-dataset-config.service.d.ts","sourceRoot":"","sources":["../../src/services/question-sql-dataset-config.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAG,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,qBACa,+BAAgC,SAAQ,WAAW,CAAC,wBAAwB,CAAC;IAEtF,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,wBAAwB,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS;gBAVpB,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,UAAU,CAAC,wBAAwB,CAAC,EAC1C,SAAS,EAAE,SAAS;CAKhC"}
@@ -0,0 +1,56 @@
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.QuestionSqlDatasetConfigService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const core_1 = require("@nestjs/core");
19
+ const typeorm_2 = require("typeorm");
20
+ const crud_service_1 = require("./crud.service");
21
+ const model_metadata_service_1 = require("./model-metadata.service");
22
+ const module_metadata_service_1 = require("./module-metadata.service");
23
+ const config_1 = require("@nestjs/config");
24
+ const file_service_1 = require("./file.service");
25
+ const crud_helper_service_1 = require("./crud-helper.service");
26
+ const question_sql_dataset_config_entity_1 = require("../entities/question-sql-dataset-config.entity");
27
+ let QuestionSqlDatasetConfigService = class QuestionSqlDatasetConfigService extends crud_service_1.CRUDService {
28
+ constructor(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, moduleRef) {
29
+ super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'questionSqlDatasetConfig', 'solid-core', moduleRef);
30
+ this.modelMetadataService = modelMetadataService;
31
+ this.moduleMetadataService = moduleMetadataService;
32
+ this.configService = configService;
33
+ this.fileService = fileService;
34
+ this.discoveryService = discoveryService;
35
+ this.crudHelperService = crudHelperService;
36
+ this.entityManager = entityManager;
37
+ this.repo = repo;
38
+ this.moduleRef = moduleRef;
39
+ }
40
+ };
41
+ exports.QuestionSqlDatasetConfigService = QuestionSqlDatasetConfigService;
42
+ exports.QuestionSqlDatasetConfigService = QuestionSqlDatasetConfigService = __decorate([
43
+ (0, common_1.Injectable)(),
44
+ __param(6, (0, typeorm_1.InjectEntityManager)()),
45
+ __param(7, (0, typeorm_1.InjectRepository)(question_sql_dataset_config_entity_1.QuestionSqlDatasetConfig, 'default')),
46
+ __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
47
+ module_metadata_service_1.ModuleMetadataService,
48
+ config_1.ConfigService,
49
+ file_service_1.FileService,
50
+ core_1.DiscoveryService,
51
+ crud_helper_service_1.CrudHelperService,
52
+ typeorm_2.EntityManager,
53
+ typeorm_2.Repository,
54
+ core_1.ModuleRef])
55
+ ], QuestionSqlDatasetConfigService);
56
+ //# sourceMappingURL=question-sql-dataset-config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-sql-dataset-config.service.js","sourceRoot":"","sources":["../../src/services/question-sql-dataset-config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAwE;AACxE,uCAA4D;AAC5D,qCAAoD;AAEpD,iDAAwD;AACxD,qEAA2E;AAC3E,uEAA6E;AAC7E,2CAA+C;AAC/C,iDAAwD;AACxD,+DAAqE;AAGrE,uGAA0F;AAGnF,IAAM,+BAA+B,GAArC,MAAM,+BAAgC,SAAQ,0BAAqC;IACxF,YACW,oBAA0C,EAC1C,qBAA4C,EAC5C,aAA4B,EAC5B,WAAwB,EACxB,gBAAkC,EAClC,iBAAoC,EAEpC,aAA4B,EAE5B,IAA0C,EAC1C,SAAoB;QAG9B,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,EAAG,aAAa,EAAE,WAAW,EAAG,gBAAgB,EAAE,iBAAiB,EAAC,aAAa,EAAE,IAAI,EAAE,0BAA0B,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAbrL,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;QAEpC,kBAAa,GAAb,aAAa,CAAe;QAE5B,SAAI,GAAJ,IAAI,CAAsC;QAC1C,cAAS,GAAT,SAAS,CAAW;IAIhC,CAAC;CACD,CAAA;AAjBY,0EAA+B;0CAA/B,+BAA+B;IAD3C,IAAA,mBAAU,GAAE;IASR,WAAA,IAAA,6BAAmB,GAAE,CAAA;IAErB,WAAA,IAAA,0BAAgB,EAAC,6DAAwB,EAAE,SAAS,CAAC,CAAA;qCARvB,6CAAoB;QACnB,+CAAqB;QAC7B,sBAAa;QACf,0BAAW;QACN,uBAAgB;QACf,uCAAiB;QAErB,uBAAa;QAEtB,oBAAU;QACL,gBAAS;GAZpB,+BAA+B,CAiB3C","sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from 'src/services/file.service';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\n\n\nimport { QuestionSqlDatasetConfig } from '../entities/question-sql-dataset-config.entity';\n\n@Injectable()\nexport class QuestionSqlDatasetConfigService extends CRUDService<QuestionSqlDatasetConfig>{\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n @InjectRepository(QuestionSqlDatasetConfig, 'default')\n readonly repo: Repository<QuestionSqlDatasetConfig>,\n readonly moduleRef: ModuleRef\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService,entityManager, repo, 'questionSqlDatasetConfig', 'solid-core', moduleRef);\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import { DiscoveryService, ModuleRef } from "@nestjs/core";
2
+ import { EntityManager, Repository } from 'typeorm';
3
+ import { ConfigService } from '@nestjs/config';
4
+ import { CrudHelperService } from 'src/services/crud-helper.service';
5
+ import { CRUDService } from 'src/services/crud.service';
6
+ import { FileService } from 'src/services/file.service';
7
+ import { ModelMetadataService } from 'src/services/model-metadata.service';
8
+ import { ModuleMetadataService } from 'src/services/module-metadata.service';
9
+ import { SolidRegistry } from 'src/helpers/solid-registry';
10
+ import { Question } from '../entities/question.entity';
11
+ import { SqlExpression } from './question-data-providers/chartjs-sql-data-provider.service';
12
+ export declare class QuestionService extends CRUDService<Question> {
13
+ readonly modelMetadataService: ModelMetadataService;
14
+ readonly moduleMetadataService: ModuleMetadataService;
15
+ readonly configService: ConfigService;
16
+ readonly fileService: FileService;
17
+ readonly discoveryService: DiscoveryService;
18
+ readonly crudHelperService: CrudHelperService;
19
+ readonly entityManager: EntityManager;
20
+ readonly repo: Repository<Question>;
21
+ readonly moduleRef: ModuleRef;
22
+ readonly solidRegistry: SolidRegistry;
23
+ private readonly logger;
24
+ constructor(modelMetadataService: ModelMetadataService, moduleMetadataService: ModuleMetadataService, configService: ConfigService, fileService: FileService, discoveryService: DiscoveryService, crudHelperService: CrudHelperService, entityManager: EntityManager, repo: Repository<Question>, moduleRef: ModuleRef, solidRegistry: SolidRegistry);
25
+ getData(id: number, inputExpressions?: SqlExpression[], isPreview?: boolean): Promise<any>;
26
+ private getExpressions;
27
+ private loadQuestion;
28
+ }
29
+ //# sourceMappingURL=question.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question.service.d.ts","sourceRoot":"","sources":["../../src/services/question.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAI7E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAyB,MAAM,6DAA6D,CAAC;AAanH,qBACa,eAAgB,SAAQ,WAAW,CAAC,QAAQ,CAAC;IAGtD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa;IAbvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAEjD,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAC1B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa;IAMjC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,GAAE,aAAa,EAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAgClG,OAAO,CAAC,cAAc;YAmBR,YAAY;CAa3B"}
@@ -0,0 +1,117 @@
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.QuestionService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const core_1 = require("@nestjs/core");
18
+ const typeorm_1 = require("@nestjs/typeorm");
19
+ const typeorm_2 = require("typeorm");
20
+ const config_1 = require("@nestjs/config");
21
+ const crud_helper_service_1 = require("./crud-helper.service");
22
+ const crud_service_1 = require("./crud.service");
23
+ const file_service_1 = require("./file.service");
24
+ const model_metadata_service_1 = require("./model-metadata.service");
25
+ const module_metadata_service_1 = require("./module-metadata.service");
26
+ const solid_registry_1 = require("../helpers/solid-registry");
27
+ const question_entity_1 = require("../entities/question.entity");
28
+ var SOURCE_TYPE;
29
+ (function (SOURCE_TYPE) {
30
+ SOURCE_TYPE["SQL"] = "sql";
31
+ SOURCE_TYPE["PROVIDER"] = "provider";
32
+ })(SOURCE_TYPE || (SOURCE_TYPE = {}));
33
+ const CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';
34
+ const PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';
35
+ const PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';
36
+ let QuestionService = class QuestionService extends crud_service_1.CRUDService {
37
+ constructor(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, moduleRef, solidRegistry) {
38
+ super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'question', 'solid-core', moduleRef);
39
+ this.modelMetadataService = modelMetadataService;
40
+ this.moduleMetadataService = moduleMetadataService;
41
+ this.configService = configService;
42
+ this.fileService = fileService;
43
+ this.discoveryService = discoveryService;
44
+ this.crudHelperService = crudHelperService;
45
+ this.entityManager = entityManager;
46
+ this.repo = repo;
47
+ this.moduleRef = moduleRef;
48
+ this.solidRegistry = solidRegistry;
49
+ this.logger = new common_1.Logger(this.constructor.name);
50
+ }
51
+ async getData(id, inputExpressions = [], isPreview = false) {
52
+ const question = await this.loadQuestion(id);
53
+ if (!question) {
54
+ throw new common_1.BadRequestException(`Question with id ${id} not found`);
55
+ }
56
+ const dashboardVariables = question.dashboard?.dashboardVariables || [];
57
+ const expressions = this.getExpressions(isPreview, dashboardVariables, inputExpressions);
58
+ let dataProvider = null;
59
+ if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {
60
+ dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);
61
+ }
62
+ if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {
63
+ dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);
64
+ }
65
+ if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {
66
+ dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);
67
+ }
68
+ if (!dataProvider) {
69
+ throw new common_1.NotImplementedException(`Invalid data source type ${question.sourceType}`);
70
+ }
71
+ return await dataProvider.getData(question, expressions);
72
+ }
73
+ getExpressions(isPreview, dashboardVariables, inputExpressions) {
74
+ const expressions = [];
75
+ if (isPreview) {
76
+ const expr = dashboardVariables.map(variable => {
77
+ return {
78
+ variableName: variable.variableName,
79
+ operator: variable.defaultOperator,
80
+ value: JSON.parse(variable.defaultValue || '[]'),
81
+ };
82
+ });
83
+ expressions.push(...expr);
84
+ }
85
+ else {
86
+ expressions.push(...inputExpressions);
87
+ }
88
+ return expressions;
89
+ }
90
+ async loadQuestion(id) {
91
+ const repo = this.entityManager.getRepository(question_entity_1.Question);
92
+ const question = await repo.findOne({
93
+ where: {
94
+ id,
95
+ },
96
+ relations: ['questionSqlDatasetConfigs', 'dashboard', 'dashboard.dashboardVariables'],
97
+ });
98
+ return question;
99
+ }
100
+ };
101
+ exports.QuestionService = QuestionService;
102
+ exports.QuestionService = QuestionService = __decorate([
103
+ (0, common_1.Injectable)(),
104
+ __param(6, (0, typeorm_1.InjectEntityManager)()),
105
+ __param(7, (0, typeorm_1.InjectRepository)(question_entity_1.Question, 'default')),
106
+ __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService,
107
+ module_metadata_service_1.ModuleMetadataService,
108
+ config_1.ConfigService,
109
+ file_service_1.FileService,
110
+ core_1.DiscoveryService,
111
+ crud_helper_service_1.CrudHelperService,
112
+ typeorm_2.EntityManager,
113
+ typeorm_2.Repository,
114
+ core_1.ModuleRef,
115
+ solid_registry_1.SolidRegistry])
116
+ ], QuestionService);
117
+ //# sourceMappingURL=question.service.js.map