@solidxai/core 0.1.10-beta.21 → 0.1.10-beta.23

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 (476) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CLAUDE.md +18 -0
  3. package/CURRENT_PROMPT +6 -0
  4. package/dist/commands/info.command.d.ts.map +1 -1
  5. package/dist/commands/info.command.js +0 -2
  6. package/dist/commands/info.command.js.map +1 -1
  7. package/dist/controllers/dashboard-user-layout.controller.d.ts +43 -0
  8. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
  9. package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
  10. package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
  11. package/dist/controllers/dashboard.controller.d.ts +12 -42
  12. package/dist/controllers/dashboard.controller.d.ts.map +1 -1
  13. package/dist/controllers/dashboard.controller.js +71 -141
  14. package/dist/controllers/dashboard.controller.js.map +1 -1
  15. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
  16. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
  17. package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
  18. package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
  19. package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
  20. package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
  21. package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
  22. package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
  23. package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
  24. package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
  25. package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
  26. package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
  27. package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
  28. package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
  29. package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
  30. package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
  31. package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
  32. package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
  33. package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
  34. package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
  35. package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
  36. package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
  37. package/dist/entities/dashboard-user-layout.entity.js +52 -0
  38. package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
  39. package/dist/helpers/bootstrap.helper.js +1 -1
  40. package/dist/helpers/bootstrap.helper.js.map +1 -1
  41. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  42. package/dist/helpers/module-metadata-helper.service.js +15 -4
  43. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  44. package/dist/helpers/solid-registry.d.ts +5 -9
  45. package/dist/helpers/solid-registry.d.ts.map +1 -1
  46. package/dist/helpers/solid-registry.js +13 -28
  47. package/dist/helpers/solid-registry.js.map +1 -1
  48. package/dist/index.d.ts +21 -5
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +21 -5
  51. package/dist/index.js.map +1 -1
  52. package/dist/interfaces.d.ts +24 -13
  53. package/dist/interfaces.d.ts.map +1 -1
  54. package/dist/interfaces.js.map +1 -1
  55. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +1 -3
  56. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  57. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +2 -25
  58. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  59. package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
  60. package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
  61. package/dist/{repository/dashboard-layout.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
  62. package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
  63. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -6
  64. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  65. package/dist/seeders/module-metadata-seeder.service.js +1 -60
  66. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  67. package/dist/seeders/seed-data/solid-core-metadata.json +6236 -6645
  68. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
  69. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
  70. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
  71. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
  72. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
  73. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
  74. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
  75. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
  76. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
  77. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
  78. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
  79. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
  80. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
  81. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
  82. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
  83. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
  84. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
  85. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
  86. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
  87. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
  88. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +17 -0
  89. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
  90. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +130 -0
  91. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
  92. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
  93. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
  94. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
  95. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
  96. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
  97. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
  98. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
  99. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
  100. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
  101. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
  102. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
  103. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
  104. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
  105. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
  106. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
  107. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
  108. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
  109. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
  110. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
  111. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
  112. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
  113. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
  114. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
  115. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
  116. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
  117. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
  118. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
  119. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
  120. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
  121. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
  122. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
  123. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
  124. package/dist/services/dashboard-runtime.service.d.ts +31 -0
  125. package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
  126. package/dist/services/dashboard-runtime.service.js +408 -0
  127. package/dist/services/dashboard-runtime.service.js.map +1 -0
  128. package/dist/services/dashboard-user-layout.service.d.ts +12 -0
  129. package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
  130. package/dist/services/{dashboard-variable.service.js → dashboard-user-layout.service.js} +11 -12
  131. package/dist/services/dashboard-user-layout.service.js.map +1 -0
  132. package/dist/services/module-metadata.service.js +1 -1
  133. package/dist/services/module-metadata.service.js.map +1 -1
  134. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
  135. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
  136. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +59 -0
  137. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
  138. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
  139. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
  140. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +60 -0
  141. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
  142. package/dist/services/solid-introspect.service.d.ts +1 -2
  143. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  144. package/dist/services/solid-introspect.service.js +12 -24
  145. package/dist/services/solid-introspect.service.js.map +1 -1
  146. package/dist/solid-core.module.d.ts.map +1 -1
  147. package/dist/solid-core.module.js +43 -66
  148. package/dist/solid-core.module.js.map +1 -1
  149. package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
  150. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  151. package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
  152. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  153. package/dist/testing/steps/ui/index.d.ts.map +1 -1
  154. package/dist/testing/steps/ui/index.js +2 -0
  155. package/dist/testing/steps/ui/index.js.map +1 -1
  156. package/dist/testing/steps/ui/manual.step.d.ts +3 -0
  157. package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
  158. package/dist/testing/steps/ui/manual.step.js +56 -0
  159. package/dist/testing/steps/ui/manual.step.js.map +1 -0
  160. package/package.json +1 -1
  161. package/src/commands/info.command.ts +0 -2
  162. package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
  163. package/src/controllers/dashboard.controller.ts +70 -89
  164. package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
  165. package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
  166. package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
  167. package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
  168. package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
  169. package/src/entities/dashboard-user-layout.entity.ts +27 -0
  170. package/src/helpers/bootstrap.helper.ts +1 -1
  171. package/src/helpers/field-crud-managers/field-quality-check-fixes.md +36 -6
  172. package/src/helpers/module-metadata-helper.service.ts +21 -6
  173. package/src/helpers/solid-registry.ts +15 -36
  174. package/src/index.ts +21 -5
  175. package/src/interfaces.ts +32 -19
  176. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -34
  177. package/src/repositories/dashboard-user-layout.repository.ts +19 -0
  178. package/src/seeders/module-metadata-seeder.service.ts +0 -67
  179. package/src/seeders/seed-data/solid-core-metadata.json +6237 -6646
  180. package/src/services/1.js +6 -0
  181. package/src/services/dashboard-providers/README.md +603 -0
  182. package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
  183. package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
  184. package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
  185. package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +58 -0
  186. package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +79 -0
  187. package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +165 -0
  188. package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +155 -0
  189. package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
  190. package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
  191. package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
  192. package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
  193. package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
  194. package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
  195. package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
  196. package/src/services/dashboard-runtime.service.ts +488 -0
  197. package/src/services/dashboard-user-layout.service.ts +20 -0
  198. package/src/services/module-metadata.service.ts +1 -1
  199. package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +52 -0
  200. package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +51 -0
  201. package/src/services/solid-introspect.service.ts +19 -34
  202. package/src/solid-core.module.ts +43 -72
  203. package/src/testing/README.md +42 -4
  204. package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
  205. package/src/testing/steps/ui/index.ts +2 -0
  206. package/src/testing/steps/ui/manual.step.ts +80 -0
  207. package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
  208. package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
  209. package/dist/controllers/dashboard-layout.controller.js +0 -204
  210. package/dist/controllers/dashboard-layout.controller.js.map +0 -1
  211. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
  212. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
  213. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
  214. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
  215. package/dist/controllers/dashboard-question.controller.d.ts +0 -45
  216. package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
  217. package/dist/controllers/dashboard-question.controller.js +0 -194
  218. package/dist/controllers/dashboard-question.controller.js.map +0 -1
  219. package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
  220. package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
  221. package/dist/controllers/dashboard-variable.controller.js.map +0 -1
  222. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
  223. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
  224. package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
  225. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
  226. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
  227. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
  228. package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
  229. package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
  230. package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
  231. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
  232. package/dist/dtos/create-dashboard-layout.dto.js +0 -53
  233. package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
  234. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
  235. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  236. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
  237. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  238. package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
  239. package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
  240. package/dist/dtos/create-dashboard-question.dto.js +0 -105
  241. package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
  242. package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
  243. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
  244. package/dist/dtos/create-dashboard-variable.dto.js +0 -103
  245. package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
  246. package/dist/dtos/create-dashboard.dto.d.ts +0 -17
  247. package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
  248. package/dist/dtos/create-dashboard.dto.js +0 -102
  249. package/dist/dtos/create-dashboard.dto.js.map +0 -1
  250. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
  251. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
  252. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
  253. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
  254. package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
  255. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
  256. package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
  257. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
  258. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  259. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
  260. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  261. package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
  262. package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
  263. package/dist/dtos/update-dashboard-question.dto.js +0 -112
  264. package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
  265. package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
  266. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
  267. package/dist/dtos/update-dashboard-variable.dto.js +0 -101
  268. package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
  269. package/dist/dtos/update-dashboard.dto.d.ts +0 -18
  270. package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
  271. package/dist/dtos/update-dashboard.dto.js +0 -108
  272. package/dist/dtos/update-dashboard.dto.js.map +0 -1
  273. package/dist/entities/dashboard-layout.entity.d.ts +0 -9
  274. package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
  275. package/dist/entities/dashboard-layout.entity.js +0 -41
  276. package/dist/entities/dashboard-layout.entity.js.map +0 -1
  277. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
  278. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
  279. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
  280. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
  281. package/dist/entities/dashboard-question.entity.d.ts +0 -17
  282. package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
  283. package/dist/entities/dashboard-question.entity.js +0 -77
  284. package/dist/entities/dashboard-question.entity.js.map +0 -1
  285. package/dist/entities/dashboard-variable.entity.d.ts +0 -16
  286. package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
  287. package/dist/entities/dashboard-variable.entity.js +0 -79
  288. package/dist/entities/dashboard-variable.entity.js.map +0 -1
  289. package/dist/entities/dashboard.entity.d.ts +0 -16
  290. package/dist/entities/dashboard.entity.d.ts.map +0 -1
  291. package/dist/entities/dashboard.entity.js +0 -64
  292. package/dist/entities/dashboard.entity.js.map +0 -1
  293. package/dist/mappers/dashboard-mapper.d.ts +0 -6
  294. package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
  295. package/dist/mappers/dashboard-mapper.js +0 -62
  296. package/dist/mappers/dashboard-mapper.js.map +0 -1
  297. package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
  298. package/dist/repository/dashboard-layout.repository.js.map +0 -1
  299. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
  300. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
  301. package/dist/repository/dashboard-question-sql-dataset-config.repository.js +0 -34
  302. package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
  303. package/dist/repository/dashboard-question.repository.d.ts +0 -12
  304. package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
  305. package/dist/repository/dashboard-question.repository.js +0 -34
  306. package/dist/repository/dashboard-question.repository.js.map +0 -1
  307. package/dist/repository/dashboard-variable.repository.d.ts +0 -12
  308. package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
  309. package/dist/repository/dashboard-variable.repository.js +0 -34
  310. package/dist/repository/dashboard-variable.repository.js.map +0 -1
  311. package/dist/repository/dashboard.repository.d.ts +0 -13
  312. package/dist/repository/dashboard.repository.d.ts.map +0 -1
  313. package/dist/repository/dashboard.repository.js +0 -104
  314. package/dist/repository/dashboard.repository.js.map +0 -1
  315. package/dist/services/dashboard-layout.service.d.ts +0 -20
  316. package/dist/services/dashboard-layout.service.d.ts.map +0 -1
  317. package/dist/services/dashboard-layout.service.js +0 -120
  318. package/dist/services/dashboard-layout.service.js.map +0 -1
  319. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
  320. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
  321. package/dist/services/dashboard-question-sql-dataset-config.service.js +0 -38
  322. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
  323. package/dist/services/dashboard-question.service.d.ts +0 -23
  324. package/dist/services/dashboard-question.service.d.ts.map +0 -1
  325. package/dist/services/dashboard-question.service.js +0 -135
  326. package/dist/services/dashboard-question.service.js.map +0 -1
  327. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
  328. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
  329. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
  330. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
  331. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
  332. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
  333. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
  334. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
  335. package/dist/services/dashboard-variable.service.d.ts +0 -13
  336. package/dist/services/dashboard-variable.service.d.ts.map +0 -1
  337. package/dist/services/dashboard-variable.service.js.map +0 -1
  338. package/dist/services/dashboard.service.d.ts +0 -29
  339. package/dist/services/dashboard.service.d.ts.map +0 -1
  340. package/dist/services/dashboard.service.js +0 -171
  341. package/dist/services/dashboard.service.js.map +0 -1
  342. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
  343. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  344. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
  345. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
  346. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
  347. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  348. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
  349. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
  350. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
  351. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
  352. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
  353. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
  354. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
  355. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
  356. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
  357. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
  358. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
  359. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
  360. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
  361. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
  362. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
  363. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
  364. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
  365. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
  366. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
  367. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
  368. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
  369. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
  370. package/dist/services/question-data-providers/helpers.d.ts +0 -7
  371. package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
  372. package/dist/services/question-data-providers/helpers.js +0 -25
  373. package/dist/services/question-data-providers/helpers.js.map +0 -1
  374. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
  375. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
  376. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
  377. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
  378. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
  379. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
  380. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
  381. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
  382. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
  383. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
  384. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
  385. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
  386. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
  387. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
  388. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
  389. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
  390. package/dist/services/sql-expression-resolver.service.d.ts +0 -12
  391. package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
  392. package/dist/services/sql-expression-resolver.service.js +0 -121
  393. package/dist/services/sql-expression-resolver.service.js.map +0 -1
  394. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
  395. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
  396. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
  397. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
  398. package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
  399. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
  400. package/dist/subscribers/dashboard-question.subscriber.js +0 -72
  401. package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
  402. package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
  403. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
  404. package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
  405. package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
  406. package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
  407. package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
  408. package/dist/subscribers/dashboard.subscriber.js +0 -71
  409. package/dist/subscribers/dashboard.subscriber.js.map +0 -1
  410. package/dist-tests/api/authenticate.spec.js +0 -119
  411. package/dist-tests/api/authenticate.spec.js.map +0 -1
  412. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  413. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  414. package/dist-tests/api/ping.spec.js +0 -21
  415. package/dist-tests/api/ping.spec.js.map +0 -1
  416. package/dist-tests/helpers/auth.js +0 -41
  417. package/dist-tests/helpers/auth.js.map +0 -1
  418. package/dist-tests/helpers/env.js +0 -11
  419. package/dist-tests/helpers/env.js.map +0 -1
  420. package/docs/grouping-enhancements.md +0 -89
  421. package/docs/java-spring/README.md +0 -3
  422. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  423. package/docs/seed-changes.md +0 -65
  424. package/docs/test-data-workflow.md +0 -200
  425. package/docs/type-declaration-import-issue.md +0 -24
  426. package/src/controllers/dashboard-layout.controller.ts +0 -106
  427. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
  428. package/src/controllers/dashboard-question.controller.ts +0 -104
  429. package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
  430. package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
  431. package/src/dtos/create-dashboard-layout.dto.ts +0 -31
  432. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
  433. package/src/dtos/create-dashboard-question.dto.ts +0 -62
  434. package/src/dtos/create-dashboard-variable.dto.ts +0 -60
  435. package/src/dtos/create-dashboard.dto.ts +0 -61
  436. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
  437. package/src/dtos/update-dashboard-layout.dto.ts +0 -30
  438. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
  439. package/src/dtos/update-dashboard-question.dto.ts +0 -67
  440. package/src/dtos/update-dashboard-variable.dto.ts +0 -58
  441. package/src/dtos/update-dashboard.dto.ts +0 -65
  442. package/src/entities/dashboard-layout.entity.ts +0 -18
  443. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
  444. package/src/entities/dashboard-question.entity.ts +0 -46
  445. package/src/entities/dashboard-variable.entity.ts +0 -44
  446. package/src/entities/dashboard.entity.ts +0 -36
  447. package/src/mappers/dashboard-mapper.ts +0 -53
  448. package/src/repository/dashboard-layout.repository.ts +0 -17
  449. package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
  450. package/src/repository/dashboard-question.repository.ts +0 -17
  451. package/src/repository/dashboard-variable.repository.ts +0 -17
  452. package/src/repository/dashboard.repository.ts +0 -101
  453. package/src/services/dashboard-layout.service.ts +0 -111
  454. package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
  455. package/src/services/dashboard-question.service.ts +0 -150
  456. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
  457. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
  458. package/src/services/dashboard-variable.service.ts +0 -27
  459. package/src/services/dashboard.service.ts +0 -148
  460. package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
  461. package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
  462. package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
  463. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
  464. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
  465. package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
  466. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
  467. package/src/services/question-data-providers/helpers.ts +0 -30
  468. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
  469. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
  470. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
  471. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
  472. package/src/services/sql-expression-resolver.service.ts +0 -140
  473. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
  474. package/src/subscribers/dashboard-question.subscriber.ts +0 -62
  475. package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
  476. package/src/subscribers/dashboard.subscriber.ts +0 -62
@@ -0,0 +1,6 @@
1
+ 1. Do i need to create a storeStreams method for aws service too?
2
+ - Handle later
3
+ 2. queues handling -> if queues is enabled by default, i.e triggerExport(exportTransactionEntity.id).
4
+ - startExport should either return the data or return the transaction id
5
+ 3. How to handle scenarios wherein, nested related exist.(do i need to only get the userkey)
6
+ - show the userKey
@@ -0,0 +1,603 @@
1
+ # Dashboarding Architecture and Developer Guide
2
+
3
+ This document is the canonical guide for SolidX dashboarding in its new metadata-driven architecture.
4
+
5
+ It covers:
6
+ - end-to-end architecture (`solid-core-module` + `solid-core-ui`)
7
+ - metadata authoring model
8
+ - backend widget data providers
9
+ - frontend default/custom widget rendering
10
+ - layout persistence model
11
+ - extension points and troubleshooting
12
+
13
+ ---
14
+
15
+ ## 1. Guiding Principles
16
+
17
+ - **Metadata-first**: dashboard definitions live in module metadata JSON under root-level `dashboards`.
18
+ - **Provider-driven backend**: every widget resolves data through a backend data provider.
19
+ - **Extension-driven frontend**: widgets render through extension registry components (`dashboardWidget` type).
20
+ - **User personalization**: only user layout overrides are persisted; dashboard definitions are not persisted.
21
+
22
+ ---
23
+
24
+ ## 2. Source of Truth (Important)
25
+
26
+ ### 2.1 What is persisted vs what is not
27
+
28
+ Persisted:
29
+ - user-specific layout override (`ss_dashboard_user_layout`)
30
+
31
+ Not persisted:
32
+ - dashboard definitions (`dashboards` metadata)
33
+ - variables
34
+ - widgets
35
+ - default layout
36
+
37
+ ### 2.2 Metadata location resolution
38
+
39
+ At runtime, metadata is read from file paths resolved by `ModuleMetadataHelperService`:
40
+
41
+ 1. `module-metadata/<module-name>/<module-name>-metadata.json`
42
+ 2. fallback (solid-core local run): `src/seeders/seed-data/solid-core-metadata.json`
43
+ 3. fallback (consuming project): `node_modules/@solidxai/core/src/seeders/seed-data/solid-core-metadata.json`
44
+
45
+ This is the most common reason for “changes not taking effect”: the running service may be reading the installed package metadata, not local source metadata.
46
+
47
+ ---
48
+
49
+ ## 3. End-to-End Runtime Flow
50
+
51
+ 1. UI route opens dashboard page:
52
+ - `/admin/core/:moduleName/dashboard/:dashboardName`
53
+
54
+ 2. UI loads definition:
55
+ - `GET /dashboard/:module/:dashboardName/definition`
56
+
57
+ 3. UI loads layout:
58
+ - `GET /dashboard/:module/:dashboardName/layout`
59
+ - backend returns `{ defaultLayout, userLayout, effectiveLayout }`
60
+
61
+ 4. UI resolves filters and requests data:
62
+ - `POST /dashboard/:module/:dashboardName/data`
63
+
64
+ 5. Backend runtime service:
65
+ - reads metadata dashboard definition
66
+ - resolves provider per widget from registry
67
+ - checks widget permissions for the active user
68
+ - executes providers with variables + provider context only for authorized widgets
69
+ - returns normalized provider envelopes
70
+
71
+ 6. User drag/resize save:
72
+ - `PUT /dashboard/:module/:dashboardName/layout`
73
+ - persists user layout override
74
+
75
+ ---
76
+
77
+ ## 4. Backend Architecture (`solid-core-module`)
78
+
79
+ ### 4.1 Core runtime controller
80
+
81
+ File:
82
+ - `src/controllers/dashboard.controller.ts`
83
+
84
+ Endpoints:
85
+ - `GET /dashboard/:moduleName/:dashboardName/definition`
86
+ - `POST /dashboard/:moduleName/:dashboardName/widgets/:widgetName/data`
87
+ - `POST /dashboard/:moduleName/:dashboardName/data`
88
+ - `GET /dashboard/:moduleName/:dashboardName/variable-options/:variableName`
89
+ - `GET /dashboard/:moduleName/:dashboardName/layout`
90
+ - `PUT /dashboard/:moduleName/:dashboardName/layout`
91
+
92
+ All runtime dashboard endpoints are JWT-protected (`@ApiBearerAuth('jwt')`).
93
+
94
+ ### 4.2 Runtime service
95
+
96
+ File:
97
+ - `src/services/dashboard-runtime.service.ts`
98
+
99
+ Responsibilities:
100
+ - load dashboard definition from metadata
101
+ - resolve and invoke widget providers
102
+ - resolve static/dynamic variable options
103
+ - compute `effectiveLayout` via default+user merge
104
+ - save per-user layout
105
+
106
+ ### 4.3 Provider contract
107
+
108
+ File:
109
+ - `src/interfaces.ts`
110
+
111
+ Interfaces:
112
+ - `IDashboardWidgetDataProviderContext`
113
+ - `IDashboardWidgetDataResponseEnvelope`
114
+ - `IDashboardWidgetDataProvider`
115
+
116
+ Provider contract:
117
+ - `name(): string`
118
+ - `help(): string`
119
+ - `getData(widgetDefinition, ctxt): Promise<Envelope | any>`
120
+
121
+ Envelope shape:
122
+ - `meta`: provider name, widget name, duration, generatedAt
123
+ - `data`: widget payload
124
+ - `uiHints` (optional)
125
+
126
+ ### 4.4 Provider registration flow
127
+
128
+ Files:
129
+ - decorator: `src/decorators/dashboard-widget-data-provider.decorator.ts`
130
+ - introspection: `src/services/solid-introspect.service.ts`
131
+ - registry: `src/helpers/solid-registry.ts`
132
+
133
+ Pattern:
134
+ - annotate with `@DashboardWidgetDataProvider()`
135
+ - introspection discovers providers
136
+ - registry stores providers
137
+ - runtime resolves by `widget.dataProvider`
138
+
139
+ ### 4.5 Variable options providers
140
+
141
+ Dynamic selection variables reuse existing selection provider infrastructure.
142
+
143
+ Reference providers:
144
+ - `src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts`
145
+ - `src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts`
146
+
147
+ Metadata variable uses:
148
+ - `type: "selectionDynamic"`
149
+ - `selectionConfig.providerName`
150
+
151
+ ### 4.6 Queue-health reference providers
152
+
153
+ Folder:
154
+ - `src/services/dashboard-providers/`
155
+
156
+ Includes KPI + charts + table providers:
157
+ - `mq-dashboard-total-messages-kpi-provider.service.ts`
158
+ - `mq-dashboard-succeeded-messages-kpi-provider.service.ts`
159
+ - `mq-dashboard-failed-messages-kpi-provider.service.ts`
160
+ - `mq-dashboard-inflight-messages-kpi-provider.service.ts`
161
+ - `mq-dashboard-success-rate-kpi-provider.service.ts`
162
+ - `mq-dashboard-avg-elapsed-kpi-provider.service.ts`
163
+ - `mq-dashboard-messages-over-time-provider.service.ts`
164
+ - `mq-dashboard-stage-distribution-provider.service.ts`
165
+ - `mq-dashboard-queue-wise-failures-provider.service.ts`
166
+ - `mq-dashboard-queue-wise-avg-elapsed-provider.service.ts`
167
+ - `mq-dashboard-latency-trend-provider.service.ts`
168
+ - `mq-dashboard-recent-failures-provider.service.ts`
169
+
170
+ Shared filter utilities:
171
+ - `mq-dashboard-provider-utils.ts`
172
+
173
+ ### 4.7 Layout persistence model
174
+
175
+ Generated model and assets:
176
+ - entity: `src/entities/dashboard-user-layout.entity.ts`
177
+ - repository: `src/repositories/dashboard-user-layout.repository.ts`
178
+ - service: `src/services/dashboard-user-layout.service.ts`
179
+ - controller: `src/controllers/dashboard-user-layout.controller.ts`
180
+
181
+ Table:
182
+ - `ss_dashboard_user_layout`
183
+
184
+ Uniqueness:
185
+ - `(user_id, module_id, dashboard_name)`
186
+
187
+ Stored payload:
188
+ - `layoutJson` with Gridstack-compatible `items`.
189
+
190
+ ---
191
+
192
+ ## 5. Metadata Contract (`dashboards`)
193
+
194
+ Metadata file (solid-core reference):
195
+ - `src/seeders/seed-data/solid-core-metadata.json`
196
+
197
+ `dashboards` is a root peer of `actions`, `menus`, `roles`, `users`, etc.
198
+
199
+ ### 5.1 Dashboard definition shape
200
+
201
+ Typical fields:
202
+ - `dashboardSchemaVersion`
203
+ - `name`
204
+ - `displayName`
205
+ - `description`
206
+ - `moduleUserKey`
207
+ - `variables[]`
208
+ - `widgets[]`
209
+ - `defaultLayout`
210
+
211
+ ### 5.2 Variable types in current implementation
212
+
213
+ - `date`
214
+ - `selectionStatic`
215
+ - `selectionDynamic`
216
+ - `isMultiSelect` supported for selection types
217
+
218
+ Date variable payload sent to backend:
219
+ - `{ from?: ISO, to?: ISO }`
220
+ - UI preset flow supports `today`, `last_24_hours`, `last_7_days`, `last_30_days`, `custom`
221
+
222
+ Static selection:
223
+ - `selectionStaticValues: ["value:Label", ...]`
224
+
225
+ Dynamic selection:
226
+ - `selectionConfig.providerName`
227
+ - optional `selectionConfig.providerContext`
228
+
229
+ ### 5.3 Widget definition shape
230
+
231
+ Typical fields:
232
+ - `id`
233
+ - `name`
234
+ - `type` (`kpi`, `lineChart`, `barChart`, `pieChart`, `table`, `customChart`, ...)
235
+ - `dataProvider`
236
+ - `providerContext`
237
+ - optional UI override:
238
+ - `componentName` (or equivalent custom component key)
239
+
240
+ ### 5.4 Default layout shape
241
+
242
+ `defaultLayout`:
243
+ - `engine: "gridstack"`
244
+ - `columns: number`
245
+ - `items[]` each with:
246
+ - `widgetId`, `x`, `y`, `w`, `h`, optional `minW`, `minH`
247
+
248
+ ### 5.5 Explicit widget permissions
249
+
250
+ Dashboards use SolidX's existing explicit permission mechanism for widget-level authorization.
251
+
252
+ Permission format:
253
+ - `dashboard:<dashboard-name>:<widget-pattern>`
254
+
255
+ Rules:
256
+ - the first segment is always `dashboard`
257
+ - the dashboard name must match exactly
258
+ - the widget segment supports:
259
+ - exact widget names
260
+ - `*`
261
+ - regex-style patterns
262
+
263
+ Queue-health reference example:
264
+ - `dashboard:queue-health:kpi-.*`
265
+ - `dashboard:queue-health:chart-queue-.*`
266
+ - `dashboard:queue-health:chart-processing-latency-trend`
267
+
268
+ What this means:
269
+ - all KPI widgets are authorized by `kpi-.*`
270
+ - queue-oriented chart widgets such as `chart-queue-wise-failures`, `chart-queue-wise-avg-elapsed`, and `chart-queue-sla-heatmap` are authorized by `chart-queue-.*`
271
+ - `chart-processing-latency-trend` is authorized explicitly
272
+ - widgets like `chart-stage-distribution`, `chart-messages-over-time`, and `table-recent-failures` remain unauthorized unless extra permissions are granted
273
+
274
+ Important:
275
+ - dashboard developers must declare these permissions explicitly in module metadata
276
+ - they must then assign them to roles
277
+ - users receive them through standard SolidX RBAC
278
+
279
+ ---
280
+
281
+ ## 6. Frontend Architecture (`solid-core-ui`)
282
+
283
+ ### 6.1 Route and page
284
+
285
+ Route registration:
286
+ - `src/routes/solidRoutes.tsx`
287
+ - path: `/admin/core/:moduleName/dashboard/:dashboardName`
288
+
289
+ Page:
290
+ - `src/routes/pages/admin/core/DashboardPage.tsx`
291
+
292
+ ### 6.2 Dashboard API slice
293
+
294
+ File:
295
+ - `src/redux/api/dashboardRuntimeApi.ts`
296
+
297
+ Hooks:
298
+ - `useGetDashboardDefinitionQuery`
299
+ - `useGetDashboardLayoutQuery`
300
+ - `useSaveDashboardLayoutMutation`
301
+ - `useGetDashboardDataMutation`
302
+ - `useLazyGetDashboardVariableOptionsQuery`
303
+
304
+ ### 6.3 Filter UX (current)
305
+
306
+ - Filters are rendered in a modal dialog (not inline panel)
307
+ - Header has icon CTAs: filter, refresh, save layout
308
+ - Filter icon shows applied-filter badge count
309
+ - Date variable UX:
310
+ - preset dropdown first
311
+ - selecting `custom` reveals start/end date pickers
312
+ - Dynamic selection uses Solid autocomplete primitives
313
+ - Static selection uses Solid primitives (single/multi behavior)
314
+
315
+ ### 6.4 Layout engine
316
+
317
+ - Gridstack integration in `DashboardPage`
318
+ - layout source order:
319
+ - `effectiveLayout.items` from backend
320
+ - fallback computed layout from widget order
321
+ - save sends full layout snapshot for all widgets
322
+
323
+ ### 6.5 Widget extension system
324
+
325
+ Types:
326
+ - `src/types/extension-registry.ts`
327
+ - includes `dashboardWidget`
328
+
329
+ Registry:
330
+ - `src/helpers/registry.ts`
331
+
332
+ Dashboard widget props:
333
+ - `src/types/dashboard.ts` (`DashboardWidgetComponentProps`)
334
+
335
+ Default registered dashboard widgets:
336
+ - `DefaultDashboardKpiWidget`
337
+ - `DefaultDashboardLineChartWidget`
338
+ - `DefaultDashboardBarChartWidget`
339
+ - `DefaultDashboardPieChartWidget`
340
+ - `DefaultDashboardTableWidget`
341
+ - `DefaultDashboardUnknownWidget`
342
+
343
+ ### 6.6 Unauthorized widget rendering
344
+
345
+ Authorization is enforced on the backend first and reflected in the frontend second.
346
+
347
+ Current behavior:
348
+ - if the active user lacks widget permission, the backend does not invoke the widget provider at all
349
+ - the backend returns a normalized unauthorized envelope
350
+ - the frontend still renders the widget card in the dashboard grid
351
+ - the widget body shows a compact centered `Unauthorized` state
352
+
353
+ This preserves layout stability while ensuring protected widget data never leaves the server.
354
+
355
+ ### 6.7 Chart abstraction
356
+
357
+ - baseline chart engine: Apache ECharts
358
+ - mapper lives under:
359
+ - `src/components/core/dashboard/mappers/echartsOptionMapper`
360
+ - default chart widgets convert provider payload -> ECharts options
361
+
362
+ ---
363
+
364
+ ## 7. Developer Workflows
365
+
366
+ ## 7.1 Create a new dashboard (metadata-first)
367
+
368
+ 1. Add dashboard block under root `dashboards[]`
369
+ 2. Define variables
370
+ 3. Define widgets with `dataProvider`
371
+ 4. Define `defaultLayout`
372
+ 5. Add action/menu entries for navigation
373
+ 6. ensure route points to `/admin/core/<module>/dashboard/<dashboardName>`
374
+
375
+ ## 7.2 Add a new backend widget provider
376
+
377
+ 1. Create provider class under `src/services/dashboard-providers`
378
+ 2. Implement `IDashboardWidgetDataProvider`
379
+ 3. Annotate with `@DashboardWidgetDataProvider()` + `@Injectable()`
380
+ 4. Inject repositories and use security-rule-aware query builders
381
+ 5. Return envelope with `meta` and `data`
382
+ 6. Reference provider name in metadata widget definition
383
+
384
+ Minimal skeleton:
385
+
386
+ ```ts
387
+ @DashboardWidgetDataProvider()
388
+ @Injectable()
389
+ export class MyWidgetProvider implements IDashboardWidgetDataProvider {
390
+ name(): string {
391
+ return "MyWidgetProvider";
392
+ }
393
+
394
+ help(): string {
395
+ return "Returns data for My Widget.";
396
+ }
397
+
398
+ async getData(widgetDefinition: Record<string, any>, ctxt: IDashboardWidgetDataProviderContext) {
399
+ return {
400
+ meta: {
401
+ providerName: this.name(),
402
+ widgetName: ctxt.widgetName,
403
+ generatedAt: new Date().toISOString(),
404
+ durationMs: 0,
405
+ },
406
+ data: {
407
+ value: 123,
408
+ },
409
+ };
410
+ }
411
+ }
412
+ ```
413
+
414
+ ## 7.3 Add dynamic variable options provider
415
+
416
+ 1. Create `ISelectionProvider` class
417
+ 2. Decorate with `@SelectionProvider()`
418
+ 3. Implement `value()` and `values()`
419
+ 4. Reference provider in variable `selectionConfig.providerName`
420
+
421
+ ## 7.4 Add a custom frontend widget (optional)
422
+
423
+ Custom rendering is optional.
424
+
425
+ Model:
426
+ - backend provider is mandatory for data
427
+ - custom widget component is optional override
428
+
429
+ Steps:
430
+ 1. Create component in UI project
431
+ 2. Register with `registerExtensionComponent(..., ExtensionComponentTypes.dashboardWidget)`
432
+ 3. Reference component in widget metadata (`componentName`)
433
+ 4. If no custom widget is provided, framework default widgets are used
434
+
435
+ ---
436
+
437
+ ## 8. Queue Health Reference Implementation
438
+
439
+ Reference dashboard:
440
+ - module: `solid-core`
441
+ - dashboard: `queue-health`
442
+
443
+ Variables:
444
+ - `date` (`type: date`)
445
+ - `queueName` (`selectionDynamic`)
446
+ - `stage` (`selectionStatic`, multi)
447
+ - `messageBroker` (`selectionDynamic`)
448
+
449
+ Widgets include:
450
+ - KPIs (total, succeeded, failed, in-flight, success rate, avg elapsed)
451
+ - Charts (time series, stage distribution, queue failures, queue avg elapsed, latency trend)
452
+ - Custom chart (Queue SLA Heatmap)
453
+ - Table (recent failures)
454
+
455
+ This RI is the baseline for future dashboards and for custom widget extension examples.
456
+
457
+ It also now includes the canonical 100% custom widget example:
458
+ - backend provider: `MqDashboardQueueSlaHeatmapProvider`
459
+ - frontend widget: `QueueSlaHeatmapWidget`
460
+
461
+ Heatmap provider response contract:
462
+ - `xCategories`
463
+ - `yCategories`
464
+ - `points` (`[xIndex, yIndex, metricValue]`)
465
+ - optional `tooltipFields`
466
+ - optional `pointDetails`
467
+ - optional `legendThresholds`
468
+
469
+ Queue-health permission example used for validating the authorization flow:
470
+ - `dashboard:queue-health:kpi-.*`
471
+ - `dashboard:queue-health:chart-queue-.*`
472
+ - `dashboard:queue-health:chart-processing-latency-trend`
473
+
474
+ ---
475
+
476
+ ## 9. Troubleshooting Guide
477
+
478
+ ### 9.1 Metadata change not reflecting
479
+
480
+ Check which metadata file runtime reads (see Section 2.2 precedence).
481
+
482
+ In consuming projects, ensure latest package is linked/installed:
483
+ - `@solidxai/core`
484
+ - `@solidxai/core-ui`
485
+
486
+ Then restart backend and frontend dev servers.
487
+
488
+ ### 9.2 Layout saves but refresh shows old layout
489
+
490
+ Checklist:
491
+ - verify `GET /dashboard/:module/:dashboard/layout` returns updated `userLayout` / `effectiveLayout`
492
+ - confirm UI bundle includes latest `DashboardPage` grid initialization logic
493
+ - clear Vite cache and hard refresh browser
494
+
495
+ ### 9.3 Dynamic options not showing
496
+
497
+ Checklist:
498
+ - variable `type` is exactly `selectionDynamic`
499
+ - `selectionConfig.providerName` matches provider `name()`
500
+ - provider class has `@SelectionProvider()` and is registered via module wiring
501
+
502
+ ### 9.4 Widget shows fallback/unknown renderer
503
+
504
+ Checklist:
505
+ - provider returns expected shape in `data`
506
+ - widget metadata `type` aligns with default mapper support
507
+ - if using custom renderer, ensure component is registered as `dashboardWidget`
508
+
509
+ ### 9.5 Auth / permission issues
510
+
511
+ - Dashboard runtime endpoints require JWT
512
+ - verify the authenticated user can access the module and dashboard route in the consuming app
513
+ - verify explicit dashboard widget permissions are declared in metadata
514
+ - verify those permissions are assigned to the correct roles
515
+ - remember that unauthorized widgets still render their card, but the provider will not run and the body will show `Unauthorized`
516
+
517
+ ---
518
+
519
+ ## 10. Security and Guardrails (Current + Near-term)
520
+
521
+ Current:
522
+ - JWT-protected endpoints
523
+ - repository/security-rule-aware query builder usage in reference providers
524
+
525
+ Recommended next:
526
+ - strict provider allowlist enforcement in runtime layer
527
+ - query timeout and payload-size limits
528
+ - row limits for heavy chart/table providers
529
+
530
+ ---
531
+
532
+ ## 11. API Examples
533
+
534
+ ### 11.1 Fetch definition
535
+
536
+ ```bash
537
+ curl -H "Authorization: Bearer $TOKEN" \
538
+ "$BASE_URL/dashboard/solid-core/queue-health/definition"
539
+ ```
540
+
541
+ ### 11.2 Fetch full dashboard data
542
+
543
+ ```bash
544
+ curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
545
+ "$BASE_URL/dashboard/solid-core/queue-health/data" \
546
+ -d '{
547
+ "variables": {
548
+ "date": { "from": "2026-05-01T00:00:00.000Z", "to": "2026-05-31T23:59:59.999Z" },
549
+ "queueName": "create_sandbox_dev_sandbox_provisioning_queue",
550
+ "stage": ["failed", "retrying"]
551
+ }
552
+ }'
553
+ ```
554
+
555
+ ### 11.3 Save layout
556
+
557
+ ```bash
558
+ curl -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
559
+ "$BASE_URL/dashboard/solid-core/queue-health/layout" \
560
+ -d '{
561
+ "layout": {
562
+ "engine": "gridstack",
563
+ "columns": 12,
564
+ "items": [
565
+ { "widgetId": "kpi-total-messages", "x": 0, "y": 0, "w": 2, "h": 2 }
566
+ ]
567
+ }
568
+ }'
569
+ ```
570
+
571
+ ---
572
+
573
+ ## 12. What to Reuse vs What to Customize
574
+
575
+ Reuse defaults when:
576
+ - metric/table/chart fits existing renderer types
577
+ - ECharts mapper can render your shape
578
+
579
+ Create custom component when:
580
+ - interaction/visual behavior is domain-specific
581
+ - advanced chart behavior is needed beyond generic renderer
582
+
583
+ Always keep backend provider contract stable so UI remains pluggable.
584
+
585
+ ---
586
+
587
+ ## 13. Current Status Snapshot
588
+
589
+ Implemented:
590
+ - metadata-driven dashboard runtime
591
+ - backend provider contracts + registry wiring
592
+ - dashboard controller endpoints
593
+ - queue-health reference providers
594
+ - dynamic variable options providers
595
+ - frontend dashboard page, filter modal, Gridstack persistence
596
+ - ECharts-based default dashboard widgets
597
+ - `dashboardWidget` extension type and default registrations
598
+ - user layout persistence via generated model assets
599
+
600
+ Pending/next:
601
+ - stronger runtime schema validation and guardrails
602
+ - richer renderer pluggability contract (`chartRenderer` beyond v1)
603
+ - additional documentation templates and automated validation helpers
@@ -0,0 +1,49 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { DashboardWidgetDataProvider } from "src/decorators/dashboard-widget-data-provider.decorator";
3
+ import { MqMessageRepository } from "src/repository/mq-message.repository";
4
+ import { IDashboardWidgetDataProvider, IDashboardWidgetDataProviderContext, IDashboardWidgetDataResponseEnvelope } from "src/interfaces";
5
+ import { applyMqDashboardFilters, toNumber } from "src/services/dashboard-providers/mq-dashboard-provider-utils";
6
+
7
+ @DashboardWidgetDataProvider()
8
+ @Injectable()
9
+ export class MqDashboardAvgElapsedKpiProvider implements IDashboardWidgetDataProvider {
10
+ constructor(
11
+ private readonly mqMessageRepository: MqMessageRepository,
12
+ ) { }
13
+
14
+ name(): string {
15
+ return "MqDashboardAvgElapsedKpiProvider";
16
+ }
17
+
18
+ help(): string {
19
+ return "Returns average elapsed millis after applying dashboard variables.";
20
+ }
21
+
22
+ async getData(
23
+ widgetDefinition: Record<string, any>,
24
+ ctxt: IDashboardWidgetDataProviderContext,
25
+ ): Promise<IDashboardWidgetDataResponseEnvelope<{ value: number; label: string }>> {
26
+ const qb = await this.mqMessageRepository.createSecurityRuleAwareQueryBuilder("mqMessage");
27
+ applyMqDashboardFilters(qb, ctxt.variables ?? {});
28
+ qb.andWhere("mqMessage.elapsedMillis IS NOT NULL");
29
+
30
+ const raw = await qb
31
+ .select("AVG(mqMessage.elapsedMillis)", "avgElapsed")
32
+ .getRawOne<{ avgElapsed?: string | number }>();
33
+
34
+ const value = Number(toNumber(raw?.avgElapsed, 0).toFixed(2));
35
+ return {
36
+ meta: {
37
+ providerName: this.name(),
38
+ generatedAt: new Date().toISOString(),
39
+ widgetName: ctxt.widgetName,
40
+ durationMs: 0,
41
+ },
42
+ data: {
43
+ value,
44
+ label: widgetDefinition?.name ?? "Avg Elapsed (ms)",
45
+ },
46
+ };
47
+ }
48
+ }
49
+
@@ -0,0 +1,45 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { DashboardWidgetDataProvider } from "src/decorators/dashboard-widget-data-provider.decorator";
3
+ import { MqMessageRepository } from "src/repository/mq-message.repository";
4
+ import { IDashboardWidgetDataProvider, IDashboardWidgetDataProviderContext, IDashboardWidgetDataResponseEnvelope } from "src/interfaces";
5
+ import { applyMqDashboardFilters } from "src/services/dashboard-providers/mq-dashboard-provider-utils";
6
+
7
+ @DashboardWidgetDataProvider()
8
+ @Injectable()
9
+ export class MqDashboardFailedMessagesKpiProvider implements IDashboardWidgetDataProvider {
10
+ constructor(
11
+ private readonly mqMessageRepository: MqMessageRepository,
12
+ ) { }
13
+
14
+ name(): string {
15
+ return "MqDashboardFailedMessagesKpiProvider";
16
+ }
17
+
18
+ help(): string {
19
+ return "Returns failed mq message count after applying dashboard variables.";
20
+ }
21
+
22
+ async getData(
23
+ widgetDefinition: Record<string, any>,
24
+ ctxt: IDashboardWidgetDataProviderContext,
25
+ ): Promise<IDashboardWidgetDataResponseEnvelope<{ value: number; label: string }>> {
26
+ const qb = await this.mqMessageRepository.createSecurityRuleAwareQueryBuilder("mqMessage");
27
+ applyMqDashboardFilters(qb, ctxt.variables ?? {}, { ignoreStage: true });
28
+ qb.andWhere("mqMessage.stage = :stage", { stage: "failed" });
29
+
30
+ const value = await qb.getCount();
31
+ return {
32
+ meta: {
33
+ providerName: this.name(),
34
+ generatedAt: new Date().toISOString(),
35
+ widgetName: ctxt.widgetName,
36
+ durationMs: 0,
37
+ },
38
+ data: {
39
+ value,
40
+ label: widgetDefinition?.name ?? "Failed",
41
+ },
42
+ };
43
+ }
44
+ }
45
+