@solidstarters/solid-core 1.2.134 → 1.2.136

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 (300) hide show
  1. package/dist/controllers/ai-interaction.controller.d.ts +46 -0
  2. package/dist/controllers/ai-interaction.controller.d.ts.map +1 -0
  3. package/dist/controllers/ai-interaction.controller.js +204 -0
  4. package/dist/controllers/ai-interaction.controller.js.map +1 -0
  5. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +43 -0
  6. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +1 -0
  7. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +179 -0
  8. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +1 -0
  9. package/dist/controllers/dashboard-question.controller.d.ts +45 -0
  10. package/dist/controllers/dashboard-question.controller.d.ts.map +1 -0
  11. package/dist/controllers/dashboard-question.controller.js +194 -0
  12. package/dist/controllers/dashboard-question.controller.js.map +1 -0
  13. package/dist/controllers/dashboard-variable.controller.d.ts +43 -0
  14. package/dist/controllers/dashboard-variable.controller.d.ts.map +1 -0
  15. package/dist/controllers/dashboard-variable.controller.js +179 -0
  16. package/dist/controllers/dashboard-variable.controller.js.map +1 -0
  17. package/dist/controllers/dashboard.controller.d.ts +45 -0
  18. package/dist/controllers/dashboard.controller.d.ts.map +1 -0
  19. package/dist/controllers/dashboard.controller.js +192 -0
  20. package/dist/controllers/dashboard.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-question-sql-dataset-config.dto.d.ts +12 -0
  36. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +1 -0
  37. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +77 -0
  38. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +1 -0
  39. package/dist/dtos/create-dashboard-question.dto.d.ts +17 -0
  40. package/dist/dtos/create-dashboard-question.dto.d.ts.map +1 -0
  41. package/dist/dtos/create-dashboard-question.dto.js +105 -0
  42. package/dist/dtos/create-dashboard-question.dto.js.map +1 -0
  43. package/dist/dtos/create-dashboard-variable.dto.d.ts +18 -0
  44. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +1 -0
  45. package/dist/dtos/create-dashboard-variable.dto.js +97 -0
  46. package/dist/dtos/create-dashboard-variable.dto.js.map +1 -0
  47. package/dist/dtos/create-dashboard.dto.d.ts +15 -0
  48. package/dist/dtos/create-dashboard.dto.d.ts.map +1 -0
  49. package/dist/dtos/create-dashboard.dto.js +90 -0
  50. package/dist/dtos/create-dashboard.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-question-sql-dataset-config.dto.d.ts +13 -0
  64. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +1 -0
  65. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +86 -0
  66. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +1 -0
  67. package/dist/dtos/update-dashboard-question.dto.d.ts +18 -0
  68. package/dist/dtos/update-dashboard-question.dto.d.ts.map +1 -0
  69. package/dist/dtos/update-dashboard-question.dto.js +112 -0
  70. package/dist/dtos/update-dashboard-question.dto.js.map +1 -0
  71. package/dist/dtos/update-dashboard-variable.dto.d.ts +15 -0
  72. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +1 -0
  73. package/dist/dtos/update-dashboard-variable.dto.js +95 -0
  74. package/dist/dtos/update-dashboard-variable.dto.js.map +1 -0
  75. package/dist/dtos/update-dashboard.dto.d.ts +16 -0
  76. package/dist/dtos/update-dashboard.dto.d.ts.map +1 -0
  77. package/dist/dtos/update-dashboard.dto.js +96 -0
  78. package/dist/dtos/update-dashboard.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-question-sql-dataset-config.entity.d.ts +13 -0
  84. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +1 -0
  85. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +60 -0
  86. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -0
  87. package/dist/entities/dashboard-question.entity.d.ts +16 -0
  88. package/dist/entities/dashboard-question.entity.d.ts.map +1 -0
  89. package/dist/entities/dashboard-question.entity.js +71 -0
  90. package/dist/entities/dashboard-question.entity.js.map +1 -0
  91. package/dist/entities/dashboard-variable.entity.d.ts +15 -0
  92. package/dist/entities/dashboard-variable.entity.d.ts.map +1 -0
  93. package/dist/entities/dashboard-variable.entity.js +73 -0
  94. package/dist/entities/dashboard-variable.entity.js.map +1 -0
  95. package/dist/entities/dashboard.entity.d.ts +12 -0
  96. package/dist/entities/dashboard.entity.d.ts.map +1 -0
  97. package/dist/entities/dashboard.entity.js +50 -0
  98. package/dist/entities/dashboard.entity.js.map +1 -0
  99. package/dist/helpers/solid-registry.d.ts +9 -1
  100. package/dist/helpers/solid-registry.d.ts.map +1 -1
  101. package/dist/helpers/solid-registry.js +32 -0
  102. package/dist/helpers/solid-registry.js.map +1 -1
  103. package/dist/index.d.ts +10 -0
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +10 -0
  106. package/dist/index.js.map +1 -1
  107. package/dist/interfaces.d.ts +26 -1
  108. package/dist/interfaces.d.ts.map +1 -1
  109. package/dist/interfaces.js.map +1 -1
  110. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +11 -0
  111. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +1 -0
  112. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +39 -0
  113. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +1 -0
  114. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +8 -0
  115. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +1 -0
  116. package/dist/jobs/database/trigger-mcp-client-queue-options.js +10 -0
  117. package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +1 -0
  118. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +16 -0
  119. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -0
  120. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +71 -0
  121. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -0
  122. package/dist/mappers/dashboard-mapper.d.ts +6 -0
  123. package/dist/mappers/dashboard-mapper.d.ts.map +1 -0
  124. package/dist/mappers/dashboard-mapper.js +60 -0
  125. package/dist/mappers/dashboard-mapper.js.map +1 -0
  126. package/dist/repository/dashboard.repository.d.ts +9 -0
  127. package/dist/repository/dashboard.repository.d.ts.map +1 -0
  128. package/dist/repository/dashboard.repository.js +98 -0
  129. package/dist/repository/dashboard.repository.js.map +1 -0
  130. package/dist/seeders/module-metadata-seeder.service.d.ts +5 -1
  131. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  132. package/dist/seeders/module-metadata-seeder.service.js +18 -2
  133. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  134. package/dist/seeders/seed-data/solid-core-metadata.json +4172 -2411
  135. package/dist/services/ai-interaction.service.d.ts +31 -0
  136. package/dist/services/ai-interaction.service.d.ts.map +1 -0
  137. package/dist/services/ai-interaction.service.js +182 -0
  138. package/dist/services/ai-interaction.service.js.map +1 -0
  139. package/dist/services/chatter-message.service.d.ts.map +1 -1
  140. package/dist/services/chatter-message.service.js +8 -6
  141. package/dist/services/chatter-message.service.js.map +1 -1
  142. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +22 -0
  143. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +1 -0
  144. package/dist/services/dashboard-question-sql-dataset-config.service.js +56 -0
  145. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +1 -0
  146. package/dist/services/dashboard-question.service.d.ts +29 -0
  147. package/dist/services/dashboard-question.service.d.ts.map +1 -0
  148. package/dist/services/dashboard-question.service.js +117 -0
  149. package/dist/services/dashboard-question.service.js.map +1 -0
  150. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +12 -0
  151. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +1 -0
  152. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +55 -0
  153. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +1 -0
  154. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +11 -0
  155. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +1 -0
  156. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +45 -0
  157. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +1 -0
  158. package/dist/services/dashboard-variable.service.d.ts +23 -0
  159. package/dist/services/dashboard-variable.service.d.ts.map +1 -0
  160. package/dist/services/dashboard-variable.service.js +57 -0
  161. package/dist/services/dashboard-variable.service.js.map +1 -0
  162. package/dist/services/dashboard.service.d.ts +38 -0
  163. package/dist/services/dashboard.service.d.ts.map +1 -0
  164. package/dist/services/dashboard.service.js +179 -0
  165. package/dist/services/dashboard.service.js.map +1 -0
  166. package/dist/services/field-metadata.service.d.ts.map +1 -1
  167. package/dist/services/field-metadata.service.js +1 -0
  168. package/dist/services/field-metadata.service.js.map +1 -1
  169. package/dist/services/import-transaction.service.d.ts +3 -1
  170. package/dist/services/import-transaction.service.d.ts.map +1 -1
  171. package/dist/services/import-transaction.service.js +22 -0
  172. package/dist/services/import-transaction.service.js.map +1 -1
  173. package/dist/services/list-of-values.service.d.ts +1 -0
  174. package/dist/services/list-of-values.service.d.ts.map +1 -1
  175. package/dist/services/list-of-values.service.js +3 -0
  176. package/dist/services/list-of-values.service.js.map +1 -1
  177. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  178. package/dist/services/menu-item-metadata.service.js +1 -1
  179. package/dist/services/menu-item-metadata.service.js.map +1 -1
  180. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +36 -0
  181. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +1 -0
  182. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +89 -0
  183. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +1 -0
  184. package/dist/services/question-data-providers/helpers.d.ts +7 -0
  185. package/dist/services/question-data-providers/helpers.d.ts.map +1 -0
  186. package/dist/services/question-data-providers/helpers.js +25 -0
  187. package/dist/services/question-data-providers/helpers.js.map +1 -0
  188. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +17 -0
  189. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +1 -0
  190. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +70 -0
  191. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +1 -0
  192. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +19 -0
  193. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +1 -0
  194. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +92 -0
  195. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +1 -0
  196. package/dist/services/queues/publisher-factory.service.js +1 -1
  197. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  198. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  199. package/dist/services/scheduled-jobs/scheduler.service.js +22 -11
  200. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  201. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +11 -0
  202. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +1 -0
  203. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +46 -0
  204. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +1 -0
  205. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +11 -0
  206. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +1 -0
  207. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +47 -0
  208. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +1 -0
  209. package/dist/services/solid-introspect.service.d.ts +2 -0
  210. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  211. package/dist/services/solid-introspect.service.js +28 -0
  212. package/dist/services/solid-introspect.service.js.map +1 -1
  213. package/dist/services/sql-expression-resolver.service.d.ts +9 -0
  214. package/dist/services/sql-expression-resolver.service.d.ts.map +1 -0
  215. package/dist/services/sql-expression-resolver.service.js +105 -0
  216. package/dist/services/sql-expression-resolver.service.js.map +1 -0
  217. package/dist/solid-core.module.d.ts.map +1 -1
  218. package/dist/solid-core.module.js +75 -1
  219. package/dist/solid-core.module.js.map +1 -1
  220. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +16 -0
  221. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +1 -0
  222. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +72 -0
  223. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +1 -0
  224. package/dist/subscribers/dashboard-question.subscriber.d.ts +16 -0
  225. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +1 -0
  226. package/dist/subscribers/dashboard-question.subscriber.js +72 -0
  227. package/dist/subscribers/dashboard-question.subscriber.js.map +1 -0
  228. package/dist/subscribers/dashboard-variable.subscriber.d.ts +16 -0
  229. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +1 -0
  230. package/dist/subscribers/dashboard-variable.subscriber.js +72 -0
  231. package/dist/subscribers/dashboard-variable.subscriber.js.map +1 -0
  232. package/dist/subscribers/dashboard.subscriber.d.ts +15 -0
  233. package/dist/subscribers/dashboard.subscriber.d.ts.map +1 -0
  234. package/dist/subscribers/dashboard.subscriber.js +56 -0
  235. package/dist/subscribers/dashboard.subscriber.js.map +1 -0
  236. package/dist/tsconfig.tsbuildinfo +1 -1
  237. package/package.json +1 -1
  238. package/src/controllers/ai-interaction.controller.ts +104 -0
  239. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +93 -0
  240. package/src/controllers/dashboard-question.controller.ts +104 -0
  241. package/src/controllers/dashboard-variable.controller.ts +93 -0
  242. package/src/controllers/dashboard.controller.ts +99 -0
  243. package/src/controllers/test.controller.ts +1 -2
  244. package/src/decorators/dashboard-question-data-provider.decorator.ts +7 -0
  245. package/src/decorators/dashboard-selection-provider.decorator.ts +7 -0
  246. package/src/dtos/create-ai-interaction.dto.ts +60 -0
  247. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +42 -0
  248. package/src/dtos/create-dashboard-question.dto.ts +63 -0
  249. package/src/dtos/create-dashboard-variable.dto.ts +56 -0
  250. package/src/dtos/create-dashboard.dto.ts +53 -0
  251. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +29 -0
  252. package/src/dtos/invoke-ai-prompt.dto.ts +6 -0
  253. package/src/dtos/update-ai-interaction.dto.ts +65 -0
  254. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +49 -0
  255. package/src/dtos/update-dashboard-question.dto.ts +68 -0
  256. package/src/dtos/update-dashboard-variable.dto.ts +54 -0
  257. package/src/dtos/update-dashboard.dto.ts +57 -0
  258. package/src/entities/ai-interaction.entity.ts +39 -0
  259. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +25 -0
  260. package/src/entities/dashboard-question.entity.ts +33 -0
  261. package/src/entities/dashboard-variable.entity.ts +30 -0
  262. package/src/entities/dashboard.entity.ts +21 -0
  263. package/src/helpers/solid-registry.ts +44 -2
  264. package/src/index.ts +10 -2
  265. package/src/interfaces.ts +57 -29
  266. package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +22 -0
  267. package/src/jobs/database/trigger-mcp-client-queue-options.ts +9 -0
  268. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +71 -0
  269. package/src/mappers/dashboard-mapper.ts +52 -0
  270. package/src/repository/dashboard.repository.ts +101 -0
  271. package/src/seeders/module-metadata-seeder.service.ts +21 -1
  272. package/src/seeders/seed-data/solid-core-metadata.json +4175 -2414
  273. package/src/services/ai-interaction.service.ts +163 -0
  274. package/src/services/chatter-message.service.ts +12 -6
  275. package/src/services/dashboard-question-sql-dataset-config.service.ts +34 -0
  276. package/src/services/dashboard-question.service.ts +115 -0
  277. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +56 -0
  278. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +37 -0
  279. package/src/services/dashboard-variable.service.ts +36 -0
  280. package/src/services/dashboard.service.ts +147 -0
  281. package/src/services/field-metadata.service.ts +1 -0
  282. package/src/services/import-transaction.service.ts +29 -1
  283. package/src/services/list-of-values.service.ts +5 -0
  284. package/src/services/menu-item-metadata.service.ts +2 -1
  285. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +125 -0
  286. package/src/services/question-data-providers/helpers.ts +30 -0
  287. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +78 -0
  288. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +119 -0
  289. package/src/services/question-data-providers/test.sql +1 -0
  290. package/src/services/queues/publisher-factory.service.ts +1 -1
  291. package/src/services/scheduled-jobs/scheduler.service.ts +32 -64
  292. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +41 -0
  293. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +41 -0
  294. package/src/services/solid-introspect.service.ts +42 -0
  295. package/src/services/sql-expression-resolver.service.ts +125 -0
  296. package/src/solid-core.module.ts +77 -2
  297. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +61 -0
  298. package/src/subscribers/dashboard-question.subscriber.ts +62 -0
  299. package/src/subscribers/dashboard-variable.subscriber.ts +63 -0
  300. package/src/subscribers/dashboard.subscriber.ts +43 -0
@@ -5,7 +5,7 @@ import { CommonEntity } from 'src/entities/common.entity';
5
5
  import { Locale } from 'src/entities/locale.entity';
6
6
  import { SecurityRule } from 'src/entities/security-rule.entity';
7
7
  import { IScheduledJob } from 'src/services/scheduled-jobs/scheduled-job.interface';
8
- import { ISelectionProvider, ISelectionProviderContext } from "../interfaces";
8
+ import { IDashboardQuestionDataProvider, IDashboardVariableSelectionProvider, ISelectionProvider, ISelectionProviderContext } from "../interfaces";
9
9
 
10
10
  type ControllerMetadata = {
11
11
  name: string;
@@ -63,6 +63,8 @@ export class SolidRegistry {
63
63
  private securityRules: SecurityRule[] = [];
64
64
  private locales: Locale[] = [];
65
65
  private computedFieldMetadata: ComputedFieldMetadata[] = [];
66
+ private dashboardVariableSelectionProviders: Set<InstanceWrapper> = new Set();
67
+ private dashboardQuestionDataProviders: Set<InstanceWrapper> = new Set();
66
68
 
67
69
  registerController(name: string, methodNames: string[]): void {
68
70
  this.controllers.add({ name: name, methods: methodNames });
@@ -80,6 +82,14 @@ export class SolidRegistry {
80
82
  this.selectionProviders.add(selectionProvider);
81
83
  }
82
84
 
85
+ registerDashboardVariableSelectionProvider(dashboardSelectionProvider: InstanceWrapper): void {
86
+ this.dashboardVariableSelectionProviders.add(dashboardSelectionProvider);
87
+ }
88
+
89
+ registerDashboardQuestionDataProvider(dashboardQuestionDataProvider: InstanceWrapper): void {
90
+ this.dashboardQuestionDataProviders.add(dashboardQuestionDataProvider);
91
+ }
92
+
83
93
  registerComputedFieldProvider(computedFieldProvider: InstanceWrapper): void {
84
94
  this.computedFieldProviders.add(computedFieldProvider);
85
95
  }
@@ -119,6 +129,38 @@ export class SolidRegistry {
119
129
  }
120
130
  }
121
131
 
132
+ getDashboardVariableSelectionProviders(): Array<InstanceWrapper> {
133
+ return Array.from(this.dashboardVariableSelectionProviders);
134
+ }
135
+
136
+ getDashboardVariableSelectionProviderInstance<T extends ISelectionProviderContext>(name: string): IDashboardVariableSelectionProvider<T> {
137
+ const dashboardSelectionProviders = this.getDashboardVariableSelectionProviders();
138
+
139
+ for (let i = 0; i < dashboardSelectionProviders.length; i++) {
140
+ const dashboardSelectionProvider = dashboardSelectionProviders[i];
141
+ if (dashboardSelectionProvider.instance.name() === name) {
142
+ return dashboardSelectionProvider.instance;
143
+ }
144
+ }
145
+ }
146
+
147
+ getDashboardQuestionDataProviders(): Array<InstanceWrapper> {
148
+ return Array.from(this.dashboardQuestionDataProviders)
149
+ }
150
+
151
+ getDashboardQuestionDataProviderInstance<TContext, TData>(name: string): IDashboardQuestionDataProvider<TContext, TData> {
152
+ const dashboardQuestionDataProviders = this.getDashboardQuestionDataProviders();
153
+
154
+ for (let i = 0; i < dashboardQuestionDataProviders.length; i++) {
155
+ const dasbhoardQuestionDataProvider = dashboardQuestionDataProviders[i];
156
+ if (dasbhoardQuestionDataProvider.instance.name() === name) {
157
+ return dasbhoardQuestionDataProvider.instance;
158
+ }
159
+ }
160
+
161
+ }
162
+
163
+
122
164
  getComputedFieldProviders(): Array<InstanceWrapper> {
123
165
  return Array.from(this.computedFieldProviders);
124
166
  }
@@ -137,7 +179,7 @@ export class SolidRegistry {
137
179
  }
138
180
  }
139
181
  }
140
-
182
+
141
183
  getComputedFieldProvider(name: string): InstanceWrapper {
142
184
  const provider = this.getComputedFieldProviders().filter((provider) => provider.name === name).pop();
143
185
  if (!provider) {
package/src/index.ts CHANGED
@@ -125,6 +125,11 @@ export * from './entities/import-transaction.entity'
125
125
  export * from './entities/import-transaction-error-log.entity'
126
126
  export * from './entities/locale.entity'
127
127
  export * from './entities/user-activity-history.entity'
128
+ export * from './entities/dashboard.entity'
129
+ export * from './entities/dashboard-variable.entity'
130
+ export * from './entities/dashboard-question.entity'
131
+ export * from './entities/dashboard-question-sql-dataset-config.entity'
132
+ export * from './entities/ai-interaction.entity'
128
133
 
129
134
  export * from './enums/auth-type.enum'
130
135
 
@@ -159,7 +164,7 @@ export * from './helpers/field-crud-managers/SelectionDynamicFieldCrudManager' /
159
164
  export * from './helpers/field-crud-managers/SelectionStaticFieldCrudManager' //rename
160
165
  export * from './helpers/field-crud-managers/ShortTextFieldCrudManager' //rename
161
166
  export * from './helpers/field-crud-managers/UUIDFieldCrudManager' //rename
162
-
167
+ export * from './services/crud.service'
163
168
  export * from './interceptors/logging.interceptor'
164
169
  export * from './interceptors/wrap-response.interceptor'
165
170
 
@@ -248,7 +253,10 @@ export * from './services/chatter-message.service'
248
253
  export * from './services/chatter-message-details.service'
249
254
  export * from './services/locale.service'
250
255
  export * from './services/user-activity-history.service'
251
-
256
+ export * from './services/import-transaction.service'
257
+ export * from './services/import-transaction-error-log.service'
258
+ export * from './services/excel.service'
259
+ export * from './services/csv.service'
252
260
  // Repositories
253
261
  export * from './repository/solid-base.repository'
254
262
  export * from './repository/security-rule.repository'
package/src/interfaces.ts CHANGED
@@ -1,18 +1,18 @@
1
1
  import { CreateEmailTemplateDto } from 'src/dtos/create-email-template.dto';
2
2
  import { CreateSmsTemplateDto } from 'src/dtos/create-sms-template.dto';
3
3
  import { SignUpDto } from 'src/dtos/sign-up.dto';
4
- import { CreateActionMetadataDto } from './dtos/create-action-metadata.dto';
4
+ import { Readable } from 'stream';
5
5
  import { CreateMediaStorageProviderMetadataDto } from './dtos/create-media-storage-provider-metadata.dto';
6
- import { CreateMenuItemMetadataDto } from './dtos/create-menu-item-metadata.dto';
7
6
  import { DatasourceType } from './dtos/create-model-metadata.dto';
8
7
  import { CreateModuleMetadataDto } from './dtos/create-module-metadata.dto';
9
8
  import { CreateRoleMetadataDto } from './dtos/create-role-metadata.dto';
10
9
  import { CreateSecurityRuleDto } from './dtos/create-security-rule.dto';
11
- import { CreateViewMetadataDto } from './dtos/create-view-metadata.dto';
12
10
  import { FieldMetadata } from './entities/field-metadata.entity';
13
11
  import { Media } from './entities/media.entity';
14
- import { Readable } from 'stream';
12
+ import { DashboardQuestion } from './entities/dashboard-question.entity';
15
13
  import { ComputedFieldMetadata } from './helpers/solid-registry';
14
+ import { SqlExpression } from './services/question-data-providers/chartjs-sql-data-provider.service';
15
+ import { CreateDashboardDto } from './dtos/create-dashboard.dto';
16
16
 
17
17
  export interface FieldCrudManager {
18
18
  // fieldMetadata: FieldMetadata;
@@ -27,39 +27,56 @@ export interface FieldCrudManager {
27
27
  }
28
28
 
29
29
  export interface ValidationError {
30
- field: string;
31
- error: string;
30
+ field: string;
31
+ error: string;
32
32
  }
33
33
 
34
34
  // export interface MediaStorage
35
35
  export interface MediaStorageProvider<T> {
36
- store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
37
- delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void>;
38
- retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
39
- storeStreams(streamPairs: [Readable, string][], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
40
- // delete(file: string): Promise<void>;
36
+ store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
37
+ delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void>;
38
+ retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
39
+ storeStreams(streamPairs: [Readable, string][], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]>;
40
+ // delete(file: string): Promise<void>;
41
41
  }
42
42
 
43
43
  export interface ModuleMetadataConfiguration {
44
- moduleMetadata?: CreateModuleMetadataDto,
45
- roles?: CreateRoleMetadataDto[],
46
- users?: SignUpDto[],
47
- actions?: any[],
48
- menus?: any[],
49
- views?: any[],
50
- emailTemplates?: CreateEmailTemplateDto[],
51
- smsTemplates?: CreateSmsTemplateDto[],
52
- mediaStorageProviders?: CreateMediaStorageProviderMetadataDto[]
53
- securityRules?: CreateSecurityRuleDto[],
44
+ moduleMetadata?: CreateModuleMetadataDto,
45
+ roles?: CreateRoleMetadataDto[],
46
+ users?: SignUpDto[],
47
+ actions?: any[],
48
+ menus?: any[],
49
+ views?: any[],
50
+ emailTemplates?: CreateEmailTemplateDto[],
51
+ smsTemplates?: CreateSmsTemplateDto[],
52
+ mediaStorageProviders?: CreateMediaStorageProviderMetadataDto[]
53
+ securityRules?: CreateSecurityRuleDto[],
54
+ dashboards?: CreateDashboardDto[],
54
55
  }
55
56
 
56
57
  export interface CodeGenerationOptions {
57
- moduleId?: number;
58
- moduleUserKey?: string;
59
- modelId?: number;
60
- modelUserKey?: string;
61
- fieldIdsForRemoval?: number[];
62
- dryRun?: boolean;
58
+ moduleId?: number;
59
+ moduleUserKey?: string;
60
+ modelId?: number;
61
+ modelUserKey?: string;
62
+ fieldIdsForRemoval?: number[];
63
+ dryRun?: boolean;
64
+ }
65
+
66
+ export interface TriggerMcpClientOptions {
67
+ aiInteractionId: number;
68
+ }
69
+
70
+ export interface McpResponse {
71
+ success: boolean;
72
+ request: string;
73
+ response: string;
74
+ model?: string;
75
+ tools_invoked?: string[];
76
+ tool_calls?: any[];
77
+ duration_ms?: number;
78
+ errors?: string[];
79
+ trace?: string[];
63
80
  }
64
81
 
65
82
  export interface ISelectionProviderContext {
@@ -81,6 +98,17 @@ export interface ISelectionProvider<T extends ISelectionProviderContext> {
81
98
  values(query: any, ctxt: T): Promise<readonly ISelectionProviderValues[]>;
82
99
  }
83
100
 
101
+ export interface IDashboardVariableSelectionProvider<T extends ISelectionProviderContext> extends ISelectionProvider<T> {
102
+ }
103
+
104
+ export interface IDashboardQuestionDataProvider<TContext, TData> {
105
+ help(): string;
106
+
107
+ name(): string;
108
+
109
+ getData(question: DashboardQuestion, expressions?: SqlExpression[], ctxt?: TContext): Promise<TData[] | TData>;
110
+ }
111
+
84
112
  /**
85
113
  * @deprecated Use `IEntityComputedFieldProvider` instead.
86
114
  */
@@ -94,7 +122,7 @@ export interface IComputedFieldProvider<T> {
94
122
  computeValue(dto: any, ctxt: T): Promise<string | number>; // FIXME : Improve the types to make it more specific using generics
95
123
  }
96
124
 
97
- export interface IEntityComputedFieldProvider {
125
+ export interface IEntityComputedFieldProvider {
98
126
  help(): string;
99
127
 
100
128
  name(): string;
@@ -122,7 +150,7 @@ export class EventDetails<T> {
122
150
  constructor(
123
151
  public type: any,
124
152
  public payload: T,
125
- ) {}
153
+ ) { }
126
154
  }
127
155
 
128
156
  export interface IMail {
@@ -0,0 +1,22 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { QueuesModuleOptions, TriggerMcpClientOptions } from "src/interfaces";
3
+ import { MqMessageQueueService } from "src/services/mq-message-queue.service";
4
+ import { MqMessageService } from "src/services/mq-message.service";
5
+ import { DatabasePublisher } from "src/services/queues/database-publisher.service";
6
+ import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
7
+
8
+ @Injectable()
9
+ export class TriggerMcpClientPublisherDatabase extends DatabasePublisher<TriggerMcpClientOptions> {
10
+ constructor(
11
+ protected readonly mqMessageService: MqMessageService,
12
+ protected readonly mqMessageQueueService: MqMessageQueueService,
13
+ ) {
14
+ super(mqMessageService, mqMessageQueueService);
15
+ }
16
+
17
+ options(): QueuesModuleOptions {
18
+ return {
19
+ ...triggerMcpClientQueueOptions
20
+ };
21
+ }
22
+ }
@@ -0,0 +1,9 @@
1
+ import { BrokerType } from "src/interfaces";
2
+
3
+ const TRIGGER_MCP_CLIENT_QUEUE_NAME = 'trigger_mcp_client_queue';
4
+
5
+ export default {
6
+ name: 'triggerMcpClientQueue',
7
+ type: BrokerType.Database,
8
+ queueName: TRIGGER_MCP_CLIENT_QUEUE_NAME,
9
+ };
@@ -0,0 +1,71 @@
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+
3
+ import { QueueMessage } from 'src/interfaces/mq';
4
+ import { MqMessageService } from '../../services/mq-message.service';
5
+ import { MqMessageQueueService } from '../../services/mq-message-queue.service';
6
+ import { QueuesModuleOptions, TriggerMcpClientOptions } from "../../interfaces";
7
+ import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
8
+ import triggerMcpClientQueueOptions from "./trigger-mcp-client-queue-options";
9
+ import { AiInteractionService } from 'src/services/ai-interaction.service';
10
+
11
+ @Injectable()
12
+ export class TriggerMcpClientSubscriberDatabase extends DatabaseSubscriber<TriggerMcpClientOptions> {
13
+ private readonly triggerMcpClientSubscriberLogger = new Logger(TriggerMcpClientSubscriberDatabase.name);
14
+
15
+ constructor(
16
+ readonly mqMessageService: MqMessageService,
17
+ readonly mqMessageQueueService: MqMessageQueueService,
18
+ readonly aiInteractionService: AiInteractionService,
19
+ ) {
20
+ super(mqMessageService, mqMessageQueueService);
21
+ }
22
+
23
+ options(): QueuesModuleOptions {
24
+ return {
25
+ ...triggerMcpClientQueueOptions
26
+ }
27
+ }
28
+
29
+ async subscribe(message: QueueMessage<TriggerMcpClientOptions>) {
30
+ this.triggerMcpClientSubscriberLogger.debug(`Received message: ${JSON.stringify(message)}`);
31
+
32
+ const codeGnerationOptions = message.payload;
33
+
34
+ const aiInteraction = await this.aiInteractionService.findOne(codeGnerationOptions.aiInteractionId, {
35
+ populate: ['user']
36
+ });
37
+
38
+ // The message contains the users prompt.
39
+ const prompt = aiInteraction.message;
40
+
41
+ // Use this to invoke our mcp client
42
+ const aiResponse = await this.aiInteractionService.runMcpPrompt(prompt);
43
+ let nestedResponse = aiResponse.response.trim();
44
+ if (!aiResponse.success) {
45
+ // update the job entry with success... raising an error will lead the job to be marked as failed...
46
+ throw new Error(aiResponse.errors.join(','));
47
+ }
48
+ else {
49
+ // TODO: create a new entry not update...
50
+ // const updatedDto = {
51
+ // ...aiInteraction,
52
+ // message: nestedResponse,
53
+ // }
54
+ // await this.aiInteractionService.update(codeGnerationOptions.aiInteractionId, updatedDto);
55
+
56
+ await this.aiInteractionService.create({
57
+ userId: aiInteraction.user.id,
58
+ threadId: aiInteraction.threadId,
59
+ role: 'gen-ai',
60
+ message: nestedResponse,
61
+ contentType: '',
62
+ errorMessage: '',
63
+ modelUsed: aiResponse.model,
64
+ responseTimeMs: aiResponse.duration_ms,
65
+ metadata: JSON.stringify(aiResponse)
66
+ })
67
+ }
68
+
69
+ return aiResponse;
70
+ }
71
+ }
@@ -0,0 +1,52 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { SelectionDynamicSourceType } from "src/dtos/create-dashboard-variable.dto";
3
+ import { Dashboard } from "src/entities/dashboard.entity";
4
+
5
+ @Injectable()
6
+ export class DashboardMapper {
7
+ toDto(dashboard: Dashboard): any {
8
+ return {
9
+ name: dashboard.name,
10
+ layoutJson: this.safeParseJSON(dashboard.layoutJson, {}),
11
+ moduleUserKey: dashboard.module?.name ?? null, // safer fallback
12
+
13
+ dashboardVariables: (dashboard.dashboardVariables || []).map(variable => ({
14
+ variableName: variable.variableName,
15
+ variableType: variable.variableType,
16
+ selectionStaticValues: this.safeParseJSON(variable.selectionStaticValues, []),
17
+ selectionDynamicSourceType: variable.selectionDynamicSourceType as SelectionDynamicSourceType,
18
+ selectionDynamicSQL: variable.selectionDynamicSQL ?? null,
19
+ selectionDynamicProviderName: variable.selectionDynamicProviderName ?? null,
20
+ defaultValue: this.safeParseJSON(variable.defaultValue, []),
21
+ defaultOperator: variable.defaultOperator ?? null,
22
+ })),
23
+ questions: (dashboard.questions || []).map(question => ({
24
+ name: question.name,
25
+ sourceType: question.sourceType,
26
+ visualisedAs: question.visualisedAs,
27
+ providerName: question.providerName ?? null,
28
+ chartOptions: question.chartOptions ?? null,
29
+ labelSql: question.labelSql ?? null,
30
+ kpiSql: question.kpiSql ?? null,
31
+
32
+ questionSqlDatasetConfigs: (question.questionSqlDatasetConfigs || []).map(config => ({
33
+ sql: config.sql,
34
+ datasetName: config.datasetName,
35
+ datasetDisplayName: config.datasetDisplayName, // 🔧 fixed typo: `daataSetDisplayName`
36
+ description: config.description,
37
+ labelColumnName: config.labelColumnName,
38
+ valueColumnName: config.valueColumnName,
39
+ options: this.safeParseJSON(config.options, {}),
40
+ }))
41
+ }))
42
+ };
43
+ }
44
+
45
+ private safeParseJSON(json: string | null | undefined, fallback: any): any {
46
+ try {
47
+ return json ? JSON.parse(json) : fallback;
48
+ } catch {
49
+ return fallback;
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,101 @@
1
+ import { Injectable, Logger } from "@nestjs/common";
2
+ import { CreateDashboardDto } from "src/dtos/create-dashboard.dto";
3
+ import { DashboardVariable } from "src/entities/dashboard-variable.entity";
4
+ import { Dashboard } from "src/entities/dashboard.entity";
5
+ import { ModuleMetadata } from "src/entities/module-metadata.entity";
6
+ import { DashboardQuestionSqlDatasetConfig } from "src/entities/dashboard-question-sql-dataset-config.entity";
7
+ import { DashboardQuestion } from "src/entities/dashboard-question.entity";
8
+ import { DataSource, Repository } from "typeorm";
9
+
10
+ @Injectable()
11
+ export class DashboardRepository extends Repository<Dashboard> {
12
+ private readonly logger = new Logger(this.constructor.name);
13
+ constructor(
14
+ private dataSource: DataSource,
15
+ ) {
16
+ super(Dashboard, dataSource.createEntityManager());
17
+ }
18
+
19
+
20
+ async upsertWithDto(createDto: any) {
21
+ const moduleMetadataRepository = this.dataSource.getRepository(ModuleMetadata);
22
+ const module = await moduleMetadataRepository.findOneBy({ name: createDto.moduleUserKey });
23
+
24
+ if (!module) throw new Error(`Module with key ${createDto.moduleUserKey} not found`);
25
+
26
+ const existingDashboard = await this.findOne({
27
+ where: { name: createDto.name },
28
+ relations: ['dashboardVariables', 'questions', 'questions.questionSqlDatasetConfigs'],
29
+ });
30
+
31
+ if (existingDashboard) {
32
+ // Update basic fields
33
+ existingDashboard.layoutJson = JSON.stringify(createDto.layoutJson ?? {});
34
+ existingDashboard.module = module;
35
+
36
+ // Upsert dashboard variables
37
+ existingDashboard.dashboardVariables = createDto.dashboardVariables?.map(variable => {
38
+ const existingVar = existingDashboard.dashboardVariables.find(v => v.variableName === variable.variableName);
39
+ if (existingVar) {
40
+ return Object.assign(existingVar, {
41
+ ...variable,
42
+ selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),
43
+ defaultValue: JSON.stringify(variable.defaultValue ?? []),
44
+ });
45
+ }
46
+ return {
47
+ ...variable,
48
+ selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),
49
+ defaultValue: JSON.stringify(variable.defaultValue ?? []),
50
+ };
51
+ }) ?? [];
52
+
53
+ // Upsert questions and their configs
54
+ existingDashboard.questions = createDto.questions?.map(question => {
55
+ const existingQuestion = existingDashboard.questions.find(q => q.name === question.name);
56
+ const questionData: any = {
57
+ ...question,
58
+ questionSqlDatasetConfigs: question.questionSqlDatasetConfigs?.map(cfg => {
59
+ const existingCfg = existingQuestion?.questionSqlDatasetConfigs.find(c => c.datasetName === cfg.datasetName);
60
+ if (existingCfg) {
61
+ return Object.assign(existingCfg, {
62
+ ...cfg,
63
+ options: JSON.stringify(cfg.options ?? {}),
64
+ });
65
+ }
66
+ return {
67
+ ...cfg,
68
+ options: JSON.stringify(cfg.options ?? {}),
69
+ };
70
+ }) ?? [],
71
+ };
72
+
73
+ return existingQuestion ? Object.assign(existingQuestion, questionData) : questionData;
74
+ }) ?? [];
75
+
76
+ return this.save(existingDashboard);
77
+ }
78
+
79
+ // Else: new dashboard
80
+ const dashboardData = {
81
+ ...createDto,
82
+ module,
83
+ layoutJson: JSON.stringify(createDto.layoutJson ?? {}),
84
+ dashboardVariables: createDto.dashboardVariables?.map(variable => ({
85
+ ...variable,
86
+ selectionStaticValues: JSON.stringify(variable.selectionStaticValues ?? []),
87
+ defaultValue: JSON.stringify(variable.defaultValue ?? []),
88
+ })),
89
+ questions: createDto.questions?.map(question => ({
90
+ ...question,
91
+ questionSqlDatasetConfigs: question.questionSqlDatasetConfigs?.map(cfg => ({
92
+ ...cfg,
93
+ options: JSON.stringify(cfg.options ?? {}),
94
+ })),
95
+ })),
96
+ };
97
+
98
+ const newDashboard = this.create(dashboardData);
99
+ return this.save(newDashboard);
100
+ }
101
+ }
@@ -37,6 +37,8 @@ import { SecurityRuleRepository } from 'src/repository/security-rule.repository'
37
37
  import { ListOfValuesService } from 'src/services/list-of-values.service';
38
38
  import { CreateListOfValuesDto } from 'src/dtos/create-list-of-values.dto';
39
39
  import { SystemFieldsSeederService } from './system-fields-seeder.service';
40
+ import { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';
41
+ import { DashboardRepository } from 'src/repository/dashboard.repository';
40
42
 
41
43
  @Injectable()
42
44
  export class ModuleMetadataSeederService {
@@ -69,7 +71,8 @@ export class ModuleMetadataSeederService {
69
71
  @InjectRepository(Setting, 'default')
70
72
  readonly settingsRepo: Repository<Setting>,
71
73
  readonly securityRuleRepo: SecurityRuleRepository,
72
- readonly systemFieldsSeederService: SystemFieldsSeederService
74
+ readonly systemFieldsSeederService: SystemFieldsSeederService,
75
+ readonly dashboardRepo: DashboardRepository,
73
76
  ) { }
74
77
 
75
78
  async seed() {
@@ -212,6 +215,13 @@ export class ModuleMetadataSeederService {
212
215
  await this.seedListOfValues(listOfValues);
213
216
  this.logger.debug(`[End] Processing List Of Values for ${moduleMetadata.name}`);
214
217
 
218
+ // Dashboards
219
+ this.logger.debug(`[Start] Processing dashboards for ${moduleMetadata.name}`);
220
+ const dashboards: CreateDashboardDto[] = overallMetadata.dashboards;
221
+ await this.seedDashboards(dashboards);
222
+ this.logger.debug(`[End] Processing dashboards for ${moduleMetadata.name}`);
223
+
224
+
215
225
  this.logger.debug(`[End] module seed data: ${overallMetadata}`);
216
226
 
217
227
  }
@@ -559,4 +569,14 @@ export class ModuleMetadataSeederService {
559
569
  }
560
570
  }
561
571
 
572
+ async seedDashboards(dashboardDtos: CreateDashboardDto[]) {
573
+ if (!dashboardDtos || dashboardDtos.length === 0) {
574
+ this.logger.debug(`No dashboards found to seed`);
575
+ return;
576
+ }
577
+ for (const dto of dashboardDtos) {
578
+ await this.dashboardRepo.upsertWithDto(dto);
579
+ }
580
+ }
581
+
562
582
  }