@solidxai/core 0.1.10-beta.22 → 0.1.10-beta.24

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 (481) hide show
  1. package/CLAUDE.md +9 -1
  2. package/dist/commands/info.command.d.ts.map +1 -1
  3. package/dist/commands/info.command.js +0 -2
  4. package/dist/commands/info.command.js.map +1 -1
  5. package/dist/controllers/dashboard-user-layout.controller.d.ts +43 -0
  6. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
  7. package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
  8. package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
  9. package/dist/controllers/dashboard.controller.d.ts +12 -42
  10. package/dist/controllers/dashboard.controller.d.ts.map +1 -1
  11. package/dist/controllers/dashboard.controller.js +71 -141
  12. package/dist/controllers/dashboard.controller.js.map +1 -1
  13. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
  14. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
  15. package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
  16. package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
  17. package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
  18. package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
  19. package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
  20. package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
  21. package/dist/dtos/create-model-metadata.dto.d.ts +2 -2
  22. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  23. package/dist/dtos/create-model-metadata.dto.js +6 -11
  24. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  25. package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
  26. package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
  27. package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
  28. package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
  29. package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
  30. package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
  31. package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
  32. package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
  33. package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
  34. package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
  35. package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
  36. package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
  37. package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
  38. package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
  39. package/dist/entities/dashboard-user-layout.entity.js +52 -0
  40. package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
  41. package/dist/entities/legacy-common-with-id.entity.d.ts +2 -2
  42. package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -1
  43. package/dist/entities/legacy-common-with-id.entity.js +6 -6
  44. package/dist/entities/legacy-common-with-id.entity.js.map +1 -1
  45. package/dist/entities/legacy-common.entity.d.ts +1 -1
  46. package/dist/entities/legacy-common.entity.d.ts.map +1 -1
  47. package/dist/entities/legacy-common.entity.js +14 -14
  48. package/dist/entities/legacy-common.entity.js.map +1 -1
  49. package/dist/entities/model-metadata.entity.d.ts +2 -2
  50. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  51. package/dist/entities/model-metadata.entity.js +5 -8
  52. package/dist/entities/model-metadata.entity.js.map +1 -1
  53. package/dist/enums/legacy-table-type.enum.d.ts +6 -0
  54. package/dist/enums/legacy-table-type.enum.d.ts.map +1 -0
  55. package/dist/enums/legacy-table-type.enum.js +10 -0
  56. package/dist/enums/legacy-table-type.enum.js.map +1 -0
  57. package/dist/helpers/model-metadata-helper.service.d.ts +2 -1
  58. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  59. package/dist/helpers/model-metadata-helper.service.js +4 -3
  60. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  61. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  62. package/dist/helpers/module-metadata-helper.service.js +15 -4
  63. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  64. package/dist/helpers/solid-registry.d.ts +5 -9
  65. package/dist/helpers/solid-registry.d.ts.map +1 -1
  66. package/dist/helpers/solid-registry.js +13 -28
  67. package/dist/helpers/solid-registry.js.map +1 -1
  68. package/dist/index.d.ts +22 -5
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +22 -5
  71. package/dist/index.js.map +1 -1
  72. package/dist/interfaces.d.ts +24 -13
  73. package/dist/interfaces.d.ts.map +1 -1
  74. package/dist/interfaces.js.map +1 -1
  75. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +1 -3
  76. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  77. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +2 -25
  78. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  79. package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
  80. package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
  81. package/dist/{repository/dashboard-question-sql-dataset-config.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
  82. package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
  83. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -6
  84. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  85. package/dist/seeders/module-metadata-seeder.service.js +1 -60
  86. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  87. package/dist/seeders/seed-data/solid-core-metadata.json +6209 -6690
  88. package/dist/seeders/system-fields-seeder.service.js +1 -1
  89. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  90. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
  91. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
  92. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
  93. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
  94. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
  95. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
  96. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
  97. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
  98. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
  99. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
  100. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
  101. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
  102. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
  103. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
  104. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
  105. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
  106. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
  107. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
  108. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
  109. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
  110. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +17 -0
  111. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
  112. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +130 -0
  113. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
  114. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
  115. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
  116. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
  117. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
  118. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
  119. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
  120. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
  121. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
  122. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
  123. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
  124. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
  125. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
  126. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
  127. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
  128. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
  129. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
  130. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
  131. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
  132. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
  133. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
  134. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
  135. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
  136. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
  137. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
  138. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
  139. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
  140. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
  141. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
  142. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
  143. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
  144. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
  145. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
  146. package/dist/services/dashboard-runtime.service.d.ts +31 -0
  147. package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
  148. package/dist/services/dashboard-runtime.service.js +408 -0
  149. package/dist/services/dashboard-runtime.service.js.map +1 -0
  150. package/dist/services/dashboard-user-layout.service.d.ts +12 -0
  151. package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
  152. package/dist/services/{dashboard-variable.service.js → dashboard-user-layout.service.js} +11 -12
  153. package/dist/services/dashboard-user-layout.service.js.map +1 -0
  154. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +9 -9
  155. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  156. package/dist/services/model-metadata.service.d.ts +2 -2
  157. package/dist/services/model-metadata.service.d.ts.map +1 -1
  158. package/dist/services/model-metadata.service.js +3 -4
  159. package/dist/services/model-metadata.service.js.map +1 -1
  160. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
  161. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
  162. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +59 -0
  163. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
  164. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
  165. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
  166. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +60 -0
  167. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
  168. package/dist/services/solid-introspect.service.d.ts +1 -2
  169. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  170. package/dist/services/solid-introspect.service.js +12 -24
  171. package/dist/services/solid-introspect.service.js.map +1 -1
  172. package/dist/solid-core.module.d.ts.map +1 -1
  173. package/dist/solid-core.module.js +43 -66
  174. package/dist/solid-core.module.js.map +1 -1
  175. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
  176. package/dist/subscribers/model-metadata.subscriber.js +1 -3
  177. package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
  178. package/package.json +1 -1
  179. package/src/commands/info.command.ts +0 -2
  180. package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
  181. package/src/controllers/dashboard.controller.ts +70 -89
  182. package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
  183. package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
  184. package/src/dtos/create-model-metadata.dto.ts +5 -9
  185. package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
  186. package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
  187. package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
  188. package/src/entities/dashboard-user-layout.entity.ts +27 -0
  189. package/src/entities/legacy-common-with-id.entity.ts +2 -2
  190. package/src/entities/legacy-common.entity.ts +1 -1
  191. package/src/entities/model-metadata.entity.ts +3 -5
  192. package/src/enums/legacy-table-type.enum.ts +5 -0
  193. package/src/helpers/model-metadata-helper.service.ts +4 -3
  194. package/src/helpers/module-metadata-helper.service.ts +21 -6
  195. package/src/helpers/solid-registry.ts +15 -36
  196. package/src/index.ts +22 -5
  197. package/src/interfaces.ts +32 -19
  198. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -34
  199. package/src/repositories/dashboard-user-layout.repository.ts +19 -0
  200. package/src/seeders/module-metadata-seeder.service.ts +0 -67
  201. package/src/seeders/seed-data/solid-core-metadata.json +6210 -6691
  202. package/src/seeders/system-fields-seeder.service.ts +1 -1
  203. package/src/services/dashboard-providers/README.md +603 -0
  204. package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
  205. package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
  206. package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
  207. package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +58 -0
  208. package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +79 -0
  209. package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +165 -0
  210. package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +155 -0
  211. package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
  212. package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
  213. package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
  214. package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
  215. package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
  216. package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
  217. package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
  218. package/src/services/dashboard-runtime.service.ts +488 -0
  219. package/src/services/dashboard-user-layout.service.ts +20 -0
  220. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +11 -11
  221. package/src/services/model-metadata.service.ts +6 -8
  222. package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +52 -0
  223. package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +51 -0
  224. package/src/services/solid-introspect.service.ts +19 -34
  225. package/src/solid-core.module.ts +43 -72
  226. package/src/subscribers/model-metadata.subscriber.ts +1 -3
  227. package/CURRENT_PROMPT +0 -6
  228. package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
  229. package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
  230. package/dist/controllers/dashboard-layout.controller.js +0 -204
  231. package/dist/controllers/dashboard-layout.controller.js.map +0 -1
  232. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
  233. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
  234. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
  235. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
  236. package/dist/controllers/dashboard-question.controller.d.ts +0 -45
  237. package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
  238. package/dist/controllers/dashboard-question.controller.js +0 -194
  239. package/dist/controllers/dashboard-question.controller.js.map +0 -1
  240. package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
  241. package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
  242. package/dist/controllers/dashboard-variable.controller.js.map +0 -1
  243. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
  244. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
  245. package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
  246. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
  247. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
  248. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
  249. package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
  250. package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
  251. package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
  252. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
  253. package/dist/dtos/create-dashboard-layout.dto.js +0 -53
  254. package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
  255. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
  256. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  257. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
  258. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  259. package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
  260. package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
  261. package/dist/dtos/create-dashboard-question.dto.js +0 -105
  262. package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
  263. package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
  264. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
  265. package/dist/dtos/create-dashboard-variable.dto.js +0 -103
  266. package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
  267. package/dist/dtos/create-dashboard.dto.d.ts +0 -17
  268. package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
  269. package/dist/dtos/create-dashboard.dto.js +0 -102
  270. package/dist/dtos/create-dashboard.dto.js.map +0 -1
  271. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
  272. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
  273. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
  274. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
  275. package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
  276. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
  277. package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
  278. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
  279. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  280. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
  281. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  282. package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
  283. package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
  284. package/dist/dtos/update-dashboard-question.dto.js +0 -112
  285. package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
  286. package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
  287. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
  288. package/dist/dtos/update-dashboard-variable.dto.js +0 -101
  289. package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
  290. package/dist/dtos/update-dashboard.dto.d.ts +0 -18
  291. package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
  292. package/dist/dtos/update-dashboard.dto.js +0 -108
  293. package/dist/dtos/update-dashboard.dto.js.map +0 -1
  294. package/dist/entities/dashboard-layout.entity.d.ts +0 -9
  295. package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
  296. package/dist/entities/dashboard-layout.entity.js +0 -41
  297. package/dist/entities/dashboard-layout.entity.js.map +0 -1
  298. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
  299. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
  300. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
  301. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
  302. package/dist/entities/dashboard-question.entity.d.ts +0 -17
  303. package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
  304. package/dist/entities/dashboard-question.entity.js +0 -77
  305. package/dist/entities/dashboard-question.entity.js.map +0 -1
  306. package/dist/entities/dashboard-variable.entity.d.ts +0 -16
  307. package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
  308. package/dist/entities/dashboard-variable.entity.js +0 -79
  309. package/dist/entities/dashboard-variable.entity.js.map +0 -1
  310. package/dist/entities/dashboard.entity.d.ts +0 -16
  311. package/dist/entities/dashboard.entity.d.ts.map +0 -1
  312. package/dist/entities/dashboard.entity.js +0 -64
  313. package/dist/entities/dashboard.entity.js.map +0 -1
  314. package/dist/mappers/dashboard-mapper.d.ts +0 -6
  315. package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
  316. package/dist/mappers/dashboard-mapper.js +0 -62
  317. package/dist/mappers/dashboard-mapper.js.map +0 -1
  318. package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
  319. package/dist/repository/dashboard-layout.repository.js +0 -34
  320. package/dist/repository/dashboard-layout.repository.js.map +0 -1
  321. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
  322. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
  323. package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
  324. package/dist/repository/dashboard-question.repository.d.ts +0 -12
  325. package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
  326. package/dist/repository/dashboard-question.repository.js +0 -34
  327. package/dist/repository/dashboard-question.repository.js.map +0 -1
  328. package/dist/repository/dashboard-variable.repository.d.ts +0 -12
  329. package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
  330. package/dist/repository/dashboard-variable.repository.js +0 -34
  331. package/dist/repository/dashboard-variable.repository.js.map +0 -1
  332. package/dist/repository/dashboard.repository.d.ts +0 -13
  333. package/dist/repository/dashboard.repository.d.ts.map +0 -1
  334. package/dist/repository/dashboard.repository.js +0 -104
  335. package/dist/repository/dashboard.repository.js.map +0 -1
  336. package/dist/services/dashboard-layout.service.d.ts +0 -20
  337. package/dist/services/dashboard-layout.service.d.ts.map +0 -1
  338. package/dist/services/dashboard-layout.service.js +0 -120
  339. package/dist/services/dashboard-layout.service.js.map +0 -1
  340. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
  341. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
  342. package/dist/services/dashboard-question-sql-dataset-config.service.js +0 -38
  343. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
  344. package/dist/services/dashboard-question.service.d.ts +0 -23
  345. package/dist/services/dashboard-question.service.d.ts.map +0 -1
  346. package/dist/services/dashboard-question.service.js +0 -135
  347. package/dist/services/dashboard-question.service.js.map +0 -1
  348. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
  349. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
  350. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
  351. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
  352. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
  353. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
  354. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
  355. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
  356. package/dist/services/dashboard-variable.service.d.ts +0 -13
  357. package/dist/services/dashboard-variable.service.d.ts.map +0 -1
  358. package/dist/services/dashboard-variable.service.js.map +0 -1
  359. package/dist/services/dashboard.service.d.ts +0 -29
  360. package/dist/services/dashboard.service.d.ts.map +0 -1
  361. package/dist/services/dashboard.service.js +0 -171
  362. package/dist/services/dashboard.service.js.map +0 -1
  363. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
  364. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  365. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
  366. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
  367. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
  368. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  369. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
  370. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
  371. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
  372. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
  373. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
  374. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
  375. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
  376. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
  377. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
  378. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
  379. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
  380. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
  381. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
  382. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
  383. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
  384. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
  385. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
  386. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
  387. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
  388. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
  389. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
  390. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
  391. package/dist/services/question-data-providers/helpers.d.ts +0 -7
  392. package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
  393. package/dist/services/question-data-providers/helpers.js +0 -25
  394. package/dist/services/question-data-providers/helpers.js.map +0 -1
  395. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
  396. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
  397. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
  398. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
  399. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
  400. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
  401. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
  402. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
  403. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
  404. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
  405. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
  406. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
  407. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
  408. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
  409. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
  410. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
  411. package/dist/services/sql-expression-resolver.service.d.ts +0 -12
  412. package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
  413. package/dist/services/sql-expression-resolver.service.js +0 -121
  414. package/dist/services/sql-expression-resolver.service.js.map +0 -1
  415. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
  416. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
  417. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
  418. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
  419. package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
  420. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
  421. package/dist/subscribers/dashboard-question.subscriber.js +0 -72
  422. package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
  423. package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
  424. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
  425. package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
  426. package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
  427. package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
  428. package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
  429. package/dist/subscribers/dashboard.subscriber.js +0 -71
  430. package/dist/subscribers/dashboard.subscriber.js.map +0 -1
  431. package/src/controllers/dashboard-layout.controller.ts +0 -106
  432. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
  433. package/src/controllers/dashboard-question.controller.ts +0 -104
  434. package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
  435. package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
  436. package/src/dtos/create-dashboard-layout.dto.ts +0 -31
  437. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
  438. package/src/dtos/create-dashboard-question.dto.ts +0 -62
  439. package/src/dtos/create-dashboard-variable.dto.ts +0 -60
  440. package/src/dtos/create-dashboard.dto.ts +0 -61
  441. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
  442. package/src/dtos/update-dashboard-layout.dto.ts +0 -30
  443. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
  444. package/src/dtos/update-dashboard-question.dto.ts +0 -67
  445. package/src/dtos/update-dashboard-variable.dto.ts +0 -58
  446. package/src/dtos/update-dashboard.dto.ts +0 -65
  447. package/src/entities/dashboard-layout.entity.ts +0 -18
  448. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
  449. package/src/entities/dashboard-question.entity.ts +0 -46
  450. package/src/entities/dashboard-variable.entity.ts +0 -44
  451. package/src/entities/dashboard.entity.ts +0 -36
  452. package/src/mappers/dashboard-mapper.ts +0 -53
  453. package/src/repository/dashboard-layout.repository.ts +0 -17
  454. package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
  455. package/src/repository/dashboard-question.repository.ts +0 -17
  456. package/src/repository/dashboard-variable.repository.ts +0 -17
  457. package/src/repository/dashboard.repository.ts +0 -101
  458. package/src/services/dashboard-layout.service.ts +0 -111
  459. package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
  460. package/src/services/dashboard-question.service.ts +0 -150
  461. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
  462. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
  463. package/src/services/dashboard-variable.service.ts +0 -27
  464. package/src/services/dashboard.service.ts +0 -148
  465. package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
  466. package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
  467. package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
  468. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
  469. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
  470. package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
  471. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
  472. package/src/services/question-data-providers/helpers.ts +0 -30
  473. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
  474. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
  475. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
  476. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
  477. package/src/services/sql-expression-resolver.service.ts +0 -140
  478. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
  479. package/src/subscribers/dashboard-question.subscriber.ts +0 -62
  480. package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
  481. package/src/subscribers/dashboard.subscriber.ts +0 -62
@@ -0,0 +1,488 @@
1
+ import { Injectable, Logger, NotFoundException } from '@nestjs/common';
2
+ import qs from 'qs';
3
+ import { ERROR_MESSAGES } from 'src/constants/error-messages';
4
+ import { DashboardVariableOptionsQueryDto } from 'src/dtos/dashboard-variable-options-query.dto';
5
+ import { DashboardBatchDataRequestDto, DashboardSaveLayoutDto, DashboardWidgetDataRequestDto } from 'src/dtos/dashboard-widget-data-request.dto';
6
+ import { ModuleMetadata } from 'src/entities/module-metadata.entity';
7
+ import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
8
+ import { SolidRegistry } from 'src/helpers/solid-registry';
9
+ import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
10
+ import { IDashboardWidgetDataProviderContext } from 'src/interfaces';
11
+ import { DashboardUserLayoutService } from './dashboard-user-layout.service';
12
+
13
+ @Injectable()
14
+ export class DashboardRuntimeService {
15
+ private readonly logger = new Logger(DashboardRuntimeService.name);
16
+
17
+ constructor(
18
+ private readonly moduleMetadataHelperService: ModuleMetadataHelperService,
19
+ private readonly solidRegistry: SolidRegistry,
20
+ private readonly dashboardUserLayoutService: DashboardUserLayoutService,
21
+ ) { }
22
+
23
+ async getDashboardDefinition(moduleName: string, dashboardName: string): Promise<any> {
24
+ const moduleMetadata = await this.getModuleMetadata(moduleName);
25
+ const dashboards = this.getDashboards(moduleMetadata);
26
+ const dashboard = dashboards.find((d) => d?.name === dashboardName || d?.routeName === dashboardName);
27
+
28
+ if (!dashboard) {
29
+ throw new NotFoundException(`Dashboard ${dashboardName} not found for module ${moduleName}.`);
30
+ }
31
+
32
+ return dashboard;
33
+ }
34
+
35
+ async getWidgetData(
36
+ moduleName: string,
37
+ dashboardName: string,
38
+ widgetName: string,
39
+ request: DashboardWidgetDataRequestDto = {},
40
+ activeUser?: ActiveUserData,
41
+ ): Promise<any> {
42
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
43
+ return this.getWidgetDataFromDefinition(dashboardDefinition, moduleName, dashboardName, widgetName, request, activeUser);
44
+ }
45
+
46
+ async getDashboardData(
47
+ moduleName: string,
48
+ dashboardName: string,
49
+ request: DashboardBatchDataRequestDto = {},
50
+ activeUser?: ActiveUserData,
51
+ ): Promise<any> {
52
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
53
+ const allWidgets = Array.isArray(dashboardDefinition.widgets) ? dashboardDefinition.widgets : [];
54
+
55
+ const targetWidgets = request.widgetNames?.length
56
+ ? allWidgets.filter((widget) => request.widgetNames.includes(widget.id) || request.widgetNames.includes(widget.name))
57
+ : allWidgets;
58
+
59
+ const widgets = await Promise.all(
60
+ targetWidgets.map((widget) => this.getWidgetDataFromDefinition(
61
+ dashboardDefinition,
62
+ moduleName,
63
+ dashboardName,
64
+ widget.id ?? widget.name,
65
+ request,
66
+ activeUser
67
+ ))
68
+ );
69
+
70
+ return {
71
+ moduleName,
72
+ dashboardName: dashboardDefinition.name,
73
+ variables: request.variables ?? {},
74
+ widgets,
75
+ };
76
+ }
77
+
78
+ async getVariableOptions(
79
+ moduleName: string,
80
+ dashboardName: string,
81
+ variableName: string,
82
+ query: DashboardVariableOptionsQueryDto,
83
+ ): Promise<any> {
84
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
85
+ const variable = (dashboardDefinition.variables ?? []).find((v) => v.name === variableName);
86
+
87
+ if (!variable) {
88
+ throw new NotFoundException(`Variable ${variableName} not found in dashboard ${dashboardName}.`);
89
+ }
90
+
91
+ if (variable.type === 'selectionStatic') {
92
+ const values = Array.isArray(variable.selectionStaticValues) ? variable.selectionStaticValues : [];
93
+ return values.map((entry: string) => {
94
+ const [value, label] = `${entry}`.split(':');
95
+ return { label: label ?? value, value };
96
+ });
97
+ }
98
+
99
+ if (variable.type !== 'selectionDynamic') {
100
+ return [];
101
+ }
102
+
103
+ const providerName = variable?.selectionConfig?.providerName;
104
+ if (!providerName) {
105
+ throw new NotFoundException(`Variable ${variableName} does not define a dynamic selection provider.`);
106
+ }
107
+
108
+ const selectionProvider = this.solidRegistry.getSelectionProviderInstance(providerName);
109
+ if (!selectionProvider) {
110
+ throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(providerName));
111
+ }
112
+
113
+ const providerContext = {
114
+ ...(variable?.selectionConfig?.providerContext ?? {}),
115
+ limit: query?.limit ?? 10,
116
+ offset: query?.offset ?? 0,
117
+ formValues: this.parseFormValues(query?.formValues),
118
+ };
119
+
120
+ if (query.optionValue) {
121
+ return selectionProvider.value(query.optionValue, providerContext as any);
122
+ }
123
+
124
+ return selectionProvider.values(query?.query ?? '', providerContext as any);
125
+ }
126
+
127
+ async getLayout(moduleName: string, dashboardName: string, activeUser?: ActiveUserData): Promise<any> {
128
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
129
+ const defaultLayout = dashboardDefinition.defaultLayout ?? {};
130
+ const userId = activeUser?.sub ?? null;
131
+ let userLayoutRecord = null;
132
+ try {
133
+ userLayoutRecord = userId
134
+ ? await this.dashboardUserLayoutService.repo.findOne({
135
+ where: {
136
+ user: { id: userId },
137
+ module: { name: moduleName },
138
+ dashboardName: dashboardDefinition.name,
139
+ } as any,
140
+ })
141
+ : null;
142
+ } catch (err: any) {
143
+ const isEntityMetadataMissing = `${err?.message ?? ''}`.includes('No metadata for "DashboardUserLayout" was found');
144
+ if (!isEntityMetadataMissing) throw err;
145
+ this.logger.warn('DashboardUserLayout entity metadata is not registered yet. Returning default layout fallback.');
146
+ }
147
+ const userLayout = this.parseLayoutJson(userLayoutRecord?.layoutJson);
148
+ const effectiveLayout = this.mergeLayouts(defaultLayout, userLayout);
149
+
150
+ return {
151
+ moduleName,
152
+ dashboardName: dashboardDefinition.name,
153
+ userId,
154
+ defaultLayout,
155
+ userLayout,
156
+ effectiveLayout,
157
+ persisted: !!userLayoutRecord,
158
+ };
159
+ }
160
+
161
+ async saveLayout(
162
+ moduleName: string,
163
+ dashboardName: string,
164
+ dto: DashboardSaveLayoutDto,
165
+ activeUser?: ActiveUserData,
166
+ ): Promise<any> {
167
+ const dashboardDefinition = await this.getDashboardDefinition(moduleName, dashboardName);
168
+ const resolvedDashboardName = dashboardDefinition?.name ?? dashboardName;
169
+ const resolvedLayoutJson = this.resolveLayoutPayload(dto);
170
+ const userId = activeUser?.sub;
171
+ if (!userId) {
172
+ return {
173
+ moduleName,
174
+ dashboardName: resolvedDashboardName,
175
+ userId: null,
176
+ persisted: false,
177
+ message: 'Unable to persist layout without active user context.',
178
+ layoutJson: resolvedLayoutJson,
179
+ };
180
+ }
181
+ const layoutJsonAsString = typeof resolvedLayoutJson === 'string'
182
+ ? resolvedLayoutJson
183
+ : JSON.stringify(resolvedLayoutJson ?? {});
184
+ let savedLayout: any = null;
185
+ try {
186
+ const layoutRepo = this.dashboardUserLayoutService.repo;
187
+ const existing = await layoutRepo.findOne({
188
+ where: {
189
+ user: { id: userId },
190
+ module: { name: moduleName },
191
+ dashboardName: resolvedDashboardName,
192
+ } as any,
193
+ });
194
+
195
+ const moduleRepo = this.dashboardUserLayoutService.entityManager.getRepository(ModuleMetadata);
196
+ const moduleEntity = await moduleRepo.findOne({ where: { name: moduleName } as any });
197
+
198
+ if (!moduleEntity) {
199
+ throw new NotFoundException(`Module ${moduleName} not found.`);
200
+ }
201
+
202
+ const toSave = layoutRepo.create({
203
+ ...(existing ? { id: existing.id } : {}),
204
+ user: { id: userId } as any,
205
+ module: { id: moduleEntity.id } as any,
206
+ dashboardName: resolvedDashboardName,
207
+ layoutJson: layoutJsonAsString,
208
+ version: (existing?.version ?? 0) + 1,
209
+ } as any);
210
+
211
+ savedLayout = await layoutRepo.save(toSave);
212
+ } catch (err: any) {
213
+ const isEntityMetadataMissing = `${err?.message ?? ''}`.includes('No metadata for "DashboardUserLayout" was found');
214
+ if (!isEntityMetadataMissing) throw err;
215
+ this.logger.warn('DashboardUserLayout entity metadata is not registered yet. Returning non-persistent save fallback.');
216
+ return {
217
+ moduleName,
218
+ dashboardName: resolvedDashboardName,
219
+ userId,
220
+ persisted: false,
221
+ message: 'Layout model generated but entity is not registered in TypeORM yet. Please add DashboardUserLayout to module TypeOrm entities and restart.',
222
+ layoutJson: resolvedLayoutJson,
223
+ };
224
+ }
225
+
226
+ return {
227
+ moduleName,
228
+ dashboardName: resolvedDashboardName,
229
+ userId,
230
+ persisted: true,
231
+ message: 'Layout saved successfully.',
232
+ layoutJson: this.parseLayoutJson(savedLayout.layoutJson),
233
+ };
234
+ }
235
+
236
+ private async getModuleMetadata(moduleName: string): Promise<any> {
237
+ const configPath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
238
+ const moduleMetadata = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(configPath);
239
+
240
+ if (!moduleMetadata) {
241
+ throw new NotFoundException(ERROR_MESSAGES.MODULE_NOT_FOUND(moduleName));
242
+ }
243
+
244
+ return moduleMetadata;
245
+ }
246
+
247
+ private getDashboards(moduleMetadata: any): any[] {
248
+ return Array.isArray(moduleMetadata?.dashboards) ? moduleMetadata.dashboards : [];
249
+ }
250
+
251
+ private findWidgetDefinition(dashboardDefinition: any, widgetName: string): any {
252
+ const widgets = Array.isArray(dashboardDefinition.widgets) ? dashboardDefinition.widgets : [];
253
+ const widgetDefinition = widgets.find((widget) => widget?.id === widgetName || widget?.name === widgetName);
254
+
255
+ if (!widgetDefinition) {
256
+ throw new NotFoundException(`Widget ${widgetName} not found in dashboard ${dashboardDefinition?.name ?? ''}.`);
257
+ }
258
+
259
+ return widgetDefinition;
260
+ }
261
+
262
+ private async getWidgetDataFromDefinition(
263
+ dashboardDefinition: any,
264
+ moduleName: string,
265
+ dashboardName: string,
266
+ widgetName: string,
267
+ request: DashboardWidgetDataRequestDto = {},
268
+ activeUser?: ActiveUserData,
269
+ ): Promise<any> {
270
+ const widgetDefinition = this.findWidgetDefinition(dashboardDefinition, widgetName);
271
+ const resolvedWidgetName = widgetDefinition.id ?? widgetDefinition.name ?? widgetName;
272
+ const providerName = widgetDefinition.dataProvider;
273
+
274
+ if (!this.hasDashboardWidgetPermission(activeUser, dashboardDefinition?.name ?? dashboardName, resolvedWidgetName)) {
275
+ return this.buildUnauthorizedWidgetResponse(
276
+ dashboardDefinition?.name ?? dashboardName,
277
+ resolvedWidgetName,
278
+ providerName,
279
+ );
280
+ }
281
+
282
+ if (!providerName) {
283
+ throw new NotFoundException(`Widget ${widgetName} is missing dataProvider definition.`);
284
+ }
285
+
286
+ const provider = this.solidRegistry.getDashboardWidgetDataProviderInstance(providerName);
287
+ if (!provider) {
288
+ throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(providerName));
289
+ }
290
+
291
+ const providerContext = {
292
+ ...(widgetDefinition.providerContext ?? {}),
293
+ ...(request.providerContext ?? {}),
294
+ };
295
+
296
+ const runtimeContext: IDashboardWidgetDataProviderContext = {
297
+ moduleName,
298
+ dashboardName,
299
+ widgetName: resolvedWidgetName,
300
+ variables: request.variables ?? {},
301
+ providerContext,
302
+ activeUser,
303
+ };
304
+
305
+ const startTime = Date.now();
306
+ const providerResponse = await provider.getData(widgetDefinition, runtimeContext);
307
+ const durationMs = Date.now() - startTime;
308
+
309
+ if (providerResponse && typeof providerResponse === 'object' && providerResponse.data !== undefined) {
310
+ const nextMeta = {
311
+ ...(providerResponse.meta ?? {}),
312
+ providerName,
313
+ widgetName: runtimeContext.widgetName,
314
+ durationMs: providerResponse?.meta?.durationMs ?? durationMs,
315
+ generatedAt: providerResponse?.meta?.generatedAt ?? new Date().toISOString(),
316
+ };
317
+
318
+ return {
319
+ ...providerResponse,
320
+ meta: nextMeta,
321
+ };
322
+ }
323
+
324
+ this.logger.debug(`Widget provider ${providerName} returned a non-envelope payload for ${runtimeContext.widgetName}. Normalizing response.`);
325
+ return {
326
+ meta: {
327
+ providerName,
328
+ widgetName: runtimeContext.widgetName,
329
+ durationMs,
330
+ generatedAt: new Date().toISOString(),
331
+ },
332
+ data: providerResponse,
333
+ };
334
+ }
335
+
336
+ private parseFormValues(formValues?: Record<string, any> | string): Record<string, any> {
337
+ if (!formValues) {
338
+ return {};
339
+ }
340
+ if (typeof formValues === 'object') {
341
+ return formValues;
342
+ }
343
+
344
+ try {
345
+ const parsedFromQueryString = qs.parse(formValues);
346
+ if (parsedFromQueryString && typeof parsedFromQueryString === 'object') {
347
+ if (parsedFromQueryString['formValues'] && typeof parsedFromQueryString['formValues'] === 'object') {
348
+ return parsedFromQueryString['formValues'] as Record<string, any>;
349
+ }
350
+ return parsedFromQueryString as Record<string, any>;
351
+ }
352
+ } catch (err) {
353
+ // ignore parse errors and try JSON
354
+ }
355
+
356
+ try {
357
+ return JSON.parse(formValues);
358
+ } catch (err) {
359
+ return {};
360
+ }
361
+ }
362
+
363
+ private hasDashboardWidgetPermission(
364
+ activeUser: ActiveUserData | undefined,
365
+ dashboardName: string,
366
+ widgetName: string,
367
+ ): boolean {
368
+ const permissions = Array.isArray(activeUser?.permissions) ? activeUser.permissions : [];
369
+ if (!dashboardName || !widgetName || permissions.length === 0) {
370
+ return false;
371
+ }
372
+
373
+ return permissions.some((permission) => this.matchesDashboardWidgetPermission(permission, dashboardName, widgetName));
374
+ }
375
+
376
+ private matchesDashboardWidgetPermission(permission: string, dashboardName: string, widgetName: string): boolean {
377
+ const match = /^dashboard:([^:]+):(.+)$/.exec(`${permission ?? ''}`.trim());
378
+ if (!match) {
379
+ return false;
380
+ }
381
+
382
+ const [, permissionDashboardName, widgetPattern] = match;
383
+ if (permissionDashboardName !== dashboardName || !widgetPattern) {
384
+ return false;
385
+ }
386
+
387
+ if (widgetPattern === '*') {
388
+ return true;
389
+ }
390
+
391
+ if (widgetPattern === widgetName) {
392
+ return true;
393
+ }
394
+
395
+ try {
396
+ return new RegExp(widgetPattern).test(widgetName);
397
+ } catch {
398
+ return false;
399
+ }
400
+ }
401
+
402
+ private buildUnauthorizedWidgetResponse(
403
+ dashboardName: string,
404
+ widgetName: string,
405
+ providerName?: string,
406
+ ): any {
407
+ return {
408
+ meta: {
409
+ providerName: providerName ?? null,
410
+ widgetName,
411
+ durationMs: 0,
412
+ generatedAt: new Date().toISOString(),
413
+ unauthorized: true,
414
+ permissionExpression: `dashboard:${dashboardName}:${widgetName}`,
415
+ },
416
+ data: null,
417
+ uiHints: {
418
+ state: 'unauthorized',
419
+ message: 'Unauthorized',
420
+ },
421
+ };
422
+ }
423
+
424
+ private parseLayoutJson(layoutJson: any): any {
425
+ if (layoutJson === null || layoutJson === undefined) return null;
426
+ if (typeof layoutJson !== 'string') return layoutJson;
427
+ try {
428
+ return JSON.parse(layoutJson);
429
+ } catch {
430
+ return layoutJson;
431
+ }
432
+ }
433
+
434
+ private resolveLayoutPayload(dto: DashboardSaveLayoutDto | Record<string, any> | null | undefined): any {
435
+ if (!dto) return {};
436
+ if (dto.layoutJson !== undefined) return dto.layoutJson;
437
+ if ((dto as any).layout !== undefined) return (dto as any).layout;
438
+ return dto;
439
+ }
440
+
441
+ private mergeLayouts(defaultLayout: any, userLayout: any): any {
442
+ if (!defaultLayout && !userLayout) return {};
443
+ if (!defaultLayout) return userLayout ?? {};
444
+ if (!userLayout) return defaultLayout ?? {};
445
+
446
+ const defaultItems = Array.isArray(defaultLayout?.items) ? defaultLayout.items : [];
447
+ const userItems = Array.isArray(userLayout?.items) ? userLayout.items : [];
448
+
449
+ if (!defaultItems.length) {
450
+ return {
451
+ ...defaultLayout,
452
+ ...userLayout,
453
+ items: userItems,
454
+ };
455
+ }
456
+
457
+ const userByWidget = new Map<string, any>();
458
+ userItems.forEach((item: any) => {
459
+ const key = item?.widgetId ?? item?.id;
460
+ if (key) userByWidget.set(key, item);
461
+ });
462
+
463
+ const mergedDefaultItems = defaultItems.map((baseItem: any) => {
464
+ const key = baseItem?.widgetId ?? baseItem?.id;
465
+ if (!key) return baseItem;
466
+ const override = userByWidget.get(key);
467
+ return override ? { ...baseItem, ...override, widgetId: key } : baseItem;
468
+ });
469
+
470
+ const defaultKeys = new Set(
471
+ defaultItems
472
+ .map((item: any) => item?.widgetId ?? item?.id)
473
+ .filter((value: any) => !!value)
474
+ );
475
+
476
+ const userOnlyItems = userItems.filter((item: any) => {
477
+ const key = item?.widgetId ?? item?.id;
478
+ return !!key && !defaultKeys.has(key);
479
+ });
480
+
481
+ return {
482
+ ...defaultLayout,
483
+ ...userLayout,
484
+ columns: userLayout?.columns ?? defaultLayout?.columns ?? 12,
485
+ items: [...mergedDefaultItems, ...userOnlyItems],
486
+ };
487
+ }
488
+ }
@@ -0,0 +1,20 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { InjectEntityManager } from '@nestjs/typeorm';
3
+ import { ModuleRef } from "@nestjs/core";
4
+ import { EntityManager } from 'typeorm';
5
+ import { CRUDService } from 'src/services/crud.service';
6
+ import { DashboardUserLayout } from '../entities/dashboard-user-layout.entity';
7
+ import { DashboardUserLayoutRepository } from '../repositories/dashboard-user-layout.repository';
8
+
9
+ @Injectable()
10
+ export class DashboardUserLayoutService extends CRUDService<DashboardUserLayout>{
11
+ constructor(
12
+ @InjectEntityManager("default")
13
+ readonly entityManager: EntityManager,
14
+ readonly repo: DashboardUserLayoutRepository,
15
+ readonly moduleRef: ModuleRef,
16
+
17
+ ) {
18
+ super(entityManager, repo, 'dashboardUserLayout', 'solid-core', moduleRef);
19
+ }
20
+ }
@@ -2,8 +2,8 @@ import { Injectable, Logger } from "@nestjs/common";
2
2
  import { ConfigService } from "@nestjs/config";
3
3
  import { CommonEntity } from "src/entities/common.entity";
4
4
  import { FieldMetadata } from "src/entities/field-metadata.entity";
5
- import { LegacyCommonEntity } from "src/entities/legacy-common.entity";
6
- import { LegacyCommonWithIdEntity } from "src/entities/legacy-common-with-id.entity";
5
+ import { LegacyCommonEntityWithExistingId } from "src/entities/legacy-common.entity";
6
+ import { LegacyCommonEntityWithGeneratedId } from "src/entities/legacy-common-with-id.entity";
7
7
  import { Media } from "src/entities/media.entity";
8
8
  import { MediaStorageProvider } from "src/interfaces";
9
9
  import { DiskFileService, S3FileService } from "src/services/file";
@@ -27,10 +27,10 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
27
27
 
28
28
  async retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
29
29
  const isSupportedEntity = entity instanceof CommonEntity
30
- || entity instanceof LegacyCommonEntity
31
- || entity instanceof LegacyCommonWithIdEntity;
30
+ || entity instanceof LegacyCommonEntityWithExistingId
31
+ || entity instanceof LegacyCommonEntityWithGeneratedId;
32
32
  if (!isSupportedEntity) {
33
- throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntity or LegacyCommonWithIdEntity"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
33
+ throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntityWithExistingId or LegacyCommonEntityWithGeneratedId"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
34
34
  }
35
35
  // @ts-ignore
36
36
  const media = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
@@ -60,10 +60,10 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
60
60
 
61
61
  async store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
62
62
  const isSupportedEntity = entity instanceof CommonEntity
63
- || entity instanceof LegacyCommonEntity
64
- || entity instanceof LegacyCommonWithIdEntity;
63
+ || entity instanceof LegacyCommonEntityWithExistingId
64
+ || entity instanceof LegacyCommonEntityWithGeneratedId;
65
65
  if (!isSupportedEntity) {
66
- throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntity or LegacyCommonWithIdEntity"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
66
+ throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntityWithExistingId or LegacyCommonEntityWithGeneratedId"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
67
67
  }
68
68
  const result: Media[] = [];
69
69
  const storageProvider = mediaFieldMetadata.mediaStorageProvider;
@@ -102,10 +102,10 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
102
102
 
103
103
  async delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void> {
104
104
  const isSupportedEntity = entity instanceof CommonEntity
105
- || entity instanceof LegacyCommonEntity
106
- || entity instanceof LegacyCommonWithIdEntity;
105
+ || entity instanceof LegacyCommonEntityWithExistingId
106
+ || entity instanceof LegacyCommonEntityWithGeneratedId;
107
107
  if (!isSupportedEntity) {
108
- throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntity or LegacyCommonWithIdEntity"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
108
+ throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntityWithExistingId or LegacyCommonEntityWithGeneratedId"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
109
109
  }
110
110
  const storageProvider = mediaFieldMetadata.mediaStorageProvider;
111
111
  const region = this.getEffectiveRegion(storageProvider.region);
@@ -2,17 +2,16 @@ import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundEx
2
2
  import { InjectDataSource } from '@nestjs/typeorm';
3
3
  import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
4
4
  import * as path from 'path';
5
- import { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';
5
+ import { DataSource, EntityManager, Repository, SelectQueryBuilder } from 'typeorm';
6
6
  import { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';
7
7
  import { ModelMetadata } from '../entities/model-metadata.entity';
8
8
  import { ModuleMetadata } from '../entities/module-metadata.entity';
9
9
 
10
10
  import { kebabCase } from 'lodash';
11
- import { classify } from '../helpers/string.helper';
12
11
  import { ERROR_MESSAGES } from 'src/constants/error-messages';
13
12
  import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
14
13
  import { SolidFieldType } from 'src/dtos/create-field-metadata.dto';
15
- import { PermissionMetadata } from 'src/entities/permission-metadata.entity';
14
+ import { NavigationDto } from 'src/dtos/navigation.dto';
16
15
  import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
17
16
  import { FieldMetadataRepository } from 'src/repository/field-metadata.repository';
18
17
  import { ModelMetadataRepository } from 'src/repository/model-metadata.repository';
@@ -22,20 +21,20 @@ import { ActionMetadata } from '../entities/action-metadata.entity';
22
21
  import { FieldMetadata } from '../entities/field-metadata.entity';
23
22
  import { MenuItemMetadata } from '../entities/menu-item-metadata.entity';
24
23
  import { ViewMetadata } from '../entities/view-metadata.entity';
24
+ import { CommandService } from '../helpers/command.service';
25
25
  import {
26
26
  REFRESH_MODEL_COMMAND,
27
27
  REMOVE_FIELDS_COMMAND,
28
28
  SchematicService
29
29
  } from '../helpers/schematic.service';
30
- import { CommandService } from '../helpers/command.service';
30
+ import { classify } from '../helpers/string.helper';
31
31
  import { CodeGenerationOptions } from '../interfaces';
32
32
  import { CrudHelperService } from './crud-helper.service';
33
+ import { CRUDService } from './crud.service';
33
34
  import { FieldMetadataService } from './field-metadata.service';
34
35
  import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
35
36
  import { RoleMetadataService } from './role-metadata.service';
36
- import { NavigationDto } from 'src/dtos/navigation.dto';
37
37
  import { SolidIntrospectService } from './solid-introspect.service';
38
- import { CRUDService } from './crud.service';
39
38
  import { SolidTsMorphService } from './solid-ts-morph.service';
40
39
 
41
40
  @Injectable()
@@ -288,8 +287,7 @@ export class ModelMetadataService {
288
287
  tableName: model.tableName,
289
288
  userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,
290
289
  isChild: model?.isChild,
291
- isLegacyTable: model?.isLegacyTable,
292
- isLegacyTableWithId: model?.isLegacyTableWithId,
290
+ legacyTableType: model?.legacyTableType,
293
291
  parentModelUserKey: model?.parentModel?.singularName,
294
292
  enableAuditTracking: model?.enableAuditTracking,
295
293
  enableSoftDelete: model?.enableSoftDelete,
@@ -0,0 +1,52 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { SelectionProvider } from "src/decorators/selection-provider.decorator";
3
+ import { MqMessageRepository } from "src/repository/mq-message.repository";
4
+ import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "src/interfaces";
5
+
6
+ @SelectionProvider()
7
+ @Injectable()
8
+ export class MqDashboardMessageBrokerVariableOptionsProvider implements ISelectionProvider<ISelectionProviderContext> {
9
+ constructor(
10
+ private readonly mqMessageRepository: MqMessageRepository,
11
+ ) { }
12
+
13
+ name(): string {
14
+ return "MqDashboardMessageBrokerVariableOptionsProvider";
15
+ }
16
+
17
+ help(): string {
18
+ return "Dynamic options provider for dashboard messageBroker variable.";
19
+ }
20
+
21
+ async value(optionValue: string): Promise<ISelectionProviderValues | null> {
22
+ if (!optionValue) return null;
23
+ return { label: optionValue, value: optionValue };
24
+ }
25
+
26
+ async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {
27
+ const qb = await this.mqMessageRepository.createSecurityRuleAwareQueryBuilder("mqMessage");
28
+ const limit = Math.min(Math.max(ctxt?.limit ?? 25, 1), 200);
29
+ const offset = Math.max(ctxt?.offset ?? 0, 0);
30
+
31
+ qb.select("DISTINCT mqMessage.messageBroker", "value")
32
+ .where("mqMessage.messageBroker IS NOT NULL");
33
+
34
+ if (query) {
35
+ qb.andWhere("mqMessage.messageBroker ILIKE :query", { query: `%${query}%` });
36
+ }
37
+
38
+ const rows = await qb
39
+ .orderBy("value", "ASC")
40
+ .take(limit)
41
+ .skip(offset)
42
+ .getRawMany<{ value: string }>();
43
+
44
+ return rows
45
+ .filter((r) => !!r?.value)
46
+ .map((r) => ({
47
+ label: r.value,
48
+ value: r.value,
49
+ }));
50
+ }
51
+ }
52
+