@solidxai/core 0.1.10-beta.8 → 0.1.10

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 (1043) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CHANGELOG.md +415 -0
  3. package/MICROSOFT_ACTIVE_DIRECTORY_OAUTH_FLOW.md +616 -0
  4. package/ai-interaction-cleanup.sql +53 -0
  5. package/dist/commands/info.command.d.ts.map +1 -1
  6. package/dist/commands/info.command.js +0 -2
  7. package/dist/commands/info.command.js.map +1 -1
  8. package/dist/commands/refresh-model.command.d.ts +1 -7
  9. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  10. package/dist/commands/refresh-model.command.js +4 -49
  11. package/dist/commands/refresh-model.command.js.map +1 -1
  12. package/dist/commands/refresh-module.command.d.ts +0 -2
  13. package/dist/commands/refresh-module.command.d.ts.map +1 -1
  14. package/dist/commands/refresh-module.command.js +3 -16
  15. package/dist/commands/refresh-module.command.js.map +1 -1
  16. package/dist/commands/test-data.command.d.ts +2 -0
  17. package/dist/commands/test-data.command.d.ts.map +1 -1
  18. package/dist/commands/test-data.command.js +32 -6
  19. package/dist/commands/test-data.command.js.map +1 -1
  20. package/dist/constants/error-messages.d.ts +1 -0
  21. package/dist/constants/error-messages.d.ts.map +1 -1
  22. package/dist/constants/error-messages.js +1 -0
  23. package/dist/constants/error-messages.js.map +1 -1
  24. package/dist/controllers/action-metadata.controller.d.ts +1 -20
  25. package/dist/controllers/action-metadata.controller.d.ts.map +1 -1
  26. package/dist/controllers/agent-event.controller.d.ts +1 -20
  27. package/dist/controllers/agent-event.controller.d.ts.map +1 -1
  28. package/dist/controllers/agent-session.controller.d.ts +1 -20
  29. package/dist/controllers/agent-session.controller.d.ts.map +1 -1
  30. package/dist/controllers/chatter-message-details.controller.d.ts +1 -20
  31. package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
  32. package/dist/controllers/chatter-message.controller.d.ts +3 -20
  33. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  34. package/dist/controllers/chatter-message.controller.js +17 -0
  35. package/dist/controllers/chatter-message.controller.js.map +1 -1
  36. package/dist/controllers/dashboard-user-layout.controller.d.ts +24 -0
  37. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -0
  38. package/dist/controllers/{dashboard-variable.controller.js → dashboard-user-layout.controller.js} +30 -30
  39. package/dist/controllers/dashboard-user-layout.controller.js.map +1 -0
  40. package/dist/controllers/dashboard.controller.d.ts +12 -42
  41. package/dist/controllers/dashboard.controller.d.ts.map +1 -1
  42. package/dist/controllers/dashboard.controller.js +71 -141
  43. package/dist/controllers/dashboard.controller.js.map +1 -1
  44. package/dist/controllers/email-template.controller.d.ts +1 -20
  45. package/dist/controllers/email-template.controller.d.ts.map +1 -1
  46. package/dist/controllers/export-template.controller.d.ts +1 -20
  47. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  48. package/dist/controllers/export-transaction.controller.d.ts +1 -20
  49. package/dist/controllers/export-transaction.controller.d.ts.map +1 -1
  50. package/dist/controllers/gupshup-webhook.controller.d.ts +11 -0
  51. package/dist/controllers/gupshup-webhook.controller.d.ts.map +1 -0
  52. package/dist/controllers/gupshup-webhook.controller.js +87 -0
  53. package/dist/controllers/gupshup-webhook.controller.js.map +1 -0
  54. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -20
  55. package/dist/controllers/import-transaction-error-log.controller.d.ts.map +1 -1
  56. package/dist/controllers/import-transaction.controller.d.ts +1 -20
  57. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  58. package/dist/controllers/list-of-values.controller.d.ts +1 -20
  59. package/dist/controllers/list-of-values.controller.d.ts.map +1 -1
  60. package/dist/controllers/locale.controller.d.ts +1 -20
  61. package/dist/controllers/locale.controller.d.ts.map +1 -1
  62. package/dist/controllers/mcp-audit-log.controller.d.ts +16 -0
  63. package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
  64. package/dist/controllers/{dashboard-question.controller.js → mcp-audit-log.controller.js} +44 -91
  65. package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
  66. package/dist/controllers/media.controller.d.ts +1 -20
  67. package/dist/controllers/media.controller.d.ts.map +1 -1
  68. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -20
  69. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  70. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts +16 -0
  71. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.d.ts.map +1 -0
  72. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js +133 -0
  73. package/dist/controllers/meta-cloud-whatsapp-webhook.controller.js.map +1 -0
  74. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts +28 -0
  75. package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts.map +1 -0
  76. package/dist/controllers/microsoft-active-directory-authentication.controller.js +122 -0
  77. package/dist/controllers/microsoft-active-directory-authentication.controller.js.map +1 -0
  78. package/dist/controllers/model-metadata.controller.d.ts +11 -31
  79. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  80. package/dist/controllers/model-metadata.controller.js +4 -4
  81. package/dist/controllers/model-metadata.controller.js.map +1 -1
  82. package/dist/controllers/model-sequence.controller.d.ts +1 -20
  83. package/dist/controllers/model-sequence.controller.d.ts.map +1 -1
  84. package/dist/controllers/module-metadata-explorer.controller.d.ts +171 -0
  85. package/dist/controllers/module-metadata-explorer.controller.d.ts.map +1 -0
  86. package/dist/controllers/module-metadata-explorer.controller.js +143 -0
  87. package/dist/controllers/module-metadata-explorer.controller.js.map +1 -0
  88. package/dist/controllers/module-metadata.controller.d.ts +5 -0
  89. package/dist/controllers/module-metadata.controller.d.ts.map +1 -1
  90. package/dist/controllers/module-metadata.controller.js +13 -1
  91. package/dist/controllers/module-metadata.controller.js.map +1 -1
  92. package/dist/controllers/module-package.controller.d.ts +622 -0
  93. package/dist/controllers/module-package.controller.d.ts.map +1 -0
  94. package/dist/controllers/module-package.controller.js +150 -0
  95. package/dist/controllers/module-package.controller.js.map +1 -0
  96. package/dist/controllers/mq-message-queue.controller.d.ts +1 -20
  97. package/dist/controllers/mq-message-queue.controller.d.ts.map +1 -1
  98. package/dist/controllers/mq-message.controller.d.ts +1 -20
  99. package/dist/controllers/mq-message.controller.d.ts.map +1 -1
  100. package/dist/controllers/permission-metadata.controller.d.ts +1 -20
  101. package/dist/controllers/permission-metadata.controller.d.ts.map +1 -1
  102. package/dist/controllers/role-metadata.controller.d.ts +1 -20
  103. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  104. package/dist/controllers/saved-filters.controller.d.ts +1 -20
  105. package/dist/controllers/saved-filters.controller.d.ts.map +1 -1
  106. package/dist/controllers/scheduled-job.controller.d.ts +1 -20
  107. package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
  108. package/dist/controllers/security-rule.controller.d.ts +1 -20
  109. package/dist/controllers/security-rule.controller.d.ts.map +1 -1
  110. package/dist/controllers/service.controller.d.ts +1 -5
  111. package/dist/controllers/service.controller.d.ts.map +1 -1
  112. package/dist/controllers/service.controller.js +6 -11
  113. package/dist/controllers/service.controller.js.map +1 -1
  114. package/dist/controllers/sms-template.controller.d.ts +1 -20
  115. package/dist/controllers/sms-template.controller.d.ts.map +1 -1
  116. package/dist/controllers/test.controller.d.ts +1 -6
  117. package/dist/controllers/test.controller.d.ts.map +1 -1
  118. package/dist/controllers/test.controller.js +2 -20
  119. package/dist/controllers/test.controller.js.map +1 -1
  120. package/dist/controllers/user-activity-history.controller.d.ts +1 -20
  121. package/dist/controllers/user-activity-history.controller.d.ts.map +1 -1
  122. package/dist/controllers/user-view-metadata.controller.d.ts +1 -20
  123. package/dist/controllers/user-view-metadata.controller.d.ts.map +1 -1
  124. package/dist/controllers/user.controller.d.ts +1 -20
  125. package/dist/controllers/user.controller.d.ts.map +1 -1
  126. package/dist/controllers/view-metadata.controller.d.ts +1 -20
  127. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  128. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts +3 -0
  129. package/dist/decorators/dashboard-widget-data-provider.decorator.d.ts.map +1 -0
  130. package/dist/decorators/dashboard-widget-data-provider.decorator.js +8 -0
  131. package/dist/decorators/dashboard-widget-data-provider.decorator.js.map +1 -0
  132. package/dist/dtos/confirm-module-package-import.dto.d.ts +4 -0
  133. package/dist/dtos/confirm-module-package-import.dto.d.ts.map +1 -0
  134. package/dist/dtos/confirm-module-package-import.dto.js +34 -0
  135. package/dist/dtos/confirm-module-package-import.dto.js.map +1 -0
  136. package/dist/dtos/create-dashboard-user-layout.dto.d.ts +10 -0
  137. package/dist/dtos/create-dashboard-user-layout.dto.d.ts.map +1 -0
  138. package/dist/dtos/create-dashboard-user-layout.dto.js +66 -0
  139. package/dist/dtos/create-dashboard-user-layout.dto.js.map +1 -0
  140. package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
  141. package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
  142. package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
  143. package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
  144. package/dist/dtos/create-model-metadata.dto.d.ts +2 -2
  145. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  146. package/dist/dtos/create-model-metadata.dto.js +6 -11
  147. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  148. package/dist/dtos/create-permission-metadata.dto.d.ts.map +1 -1
  149. package/dist/dtos/create-permission-metadata.dto.js +2 -0
  150. package/dist/dtos/create-permission-metadata.dto.js.map +1 -1
  151. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  152. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  153. package/dist/dtos/create-role-metadata.dto.js +13 -1
  154. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  155. package/dist/dtos/dashboard-variable-options-query.dto.d.ts +7 -0
  156. package/dist/dtos/dashboard-variable-options-query.dto.d.ts.map +1 -0
  157. package/dist/dtos/dashboard-variable-options-query.dto.js +40 -0
  158. package/dist/dtos/dashboard-variable-options-query.dto.js.map +1 -0
  159. package/dist/dtos/dashboard-widget-data-request.dto.d.ts +12 -0
  160. package/dist/dtos/dashboard-widget-data-request.dto.d.ts.map +1 -0
  161. package/dist/dtos/dashboard-widget-data-request.dto.js +65 -0
  162. package/dist/dtos/dashboard-widget-data-request.dto.js.map +1 -0
  163. package/dist/dtos/import-instructions.dto.d.ts +2 -0
  164. package/dist/dtos/import-instructions.dto.d.ts.map +1 -1
  165. package/dist/dtos/import-instructions.dto.js +15 -1
  166. package/dist/dtos/import-instructions.dto.js.map +1 -1
  167. package/dist/dtos/metadata-explorer-references-query.dto.d.ts +10 -0
  168. package/dist/dtos/metadata-explorer-references-query.dto.d.ts.map +1 -0
  169. package/dist/dtos/metadata-explorer-references-query.dto.js +69 -0
  170. package/dist/dtos/metadata-explorer-references-query.dto.js.map +1 -0
  171. package/dist/dtos/metadata-explorer-search-query.dto.d.ts +8 -0
  172. package/dist/dtos/metadata-explorer-search-query.dto.d.ts.map +1 -0
  173. package/dist/dtos/metadata-explorer-search-query.dto.js +55 -0
  174. package/dist/dtos/metadata-explorer-search-query.dto.js.map +1 -0
  175. package/dist/dtos/metadata-explorer-write.dto.d.ts +4 -0
  176. package/dist/dtos/metadata-explorer-write.dto.d.ts.map +1 -0
  177. package/dist/dtos/{invoke-ai-prompt.dto.js → metadata-explorer-write.dto.js} +12 -12
  178. package/dist/dtos/metadata-explorer-write.dto.js.map +1 -0
  179. package/dist/dtos/run-module-package-build.dto.d.ts +5 -0
  180. package/dist/dtos/run-module-package-build.dto.d.ts.map +1 -0
  181. package/dist/dtos/run-module-package-build.dto.js +38 -0
  182. package/dist/dtos/run-module-package-build.dto.js.map +1 -0
  183. package/dist/dtos/run-module-package-seed.dto.d.ts +4 -0
  184. package/dist/dtos/run-module-package-seed.dto.d.ts.map +1 -0
  185. package/dist/dtos/run-module-package-seed.dto.js +34 -0
  186. package/dist/dtos/run-module-package-seed.dto.js.map +1 -0
  187. package/dist/dtos/update-chatter-note-message.dto.d.ts +5 -0
  188. package/dist/dtos/update-chatter-note-message.dto.d.ts.map +1 -0
  189. package/dist/dtos/update-chatter-note-message.dto.js +34 -0
  190. package/dist/dtos/update-chatter-note-message.dto.js.map +1 -0
  191. package/dist/dtos/update-dashboard-user-layout.dto.d.ts +11 -0
  192. package/dist/dtos/update-dashboard-user-layout.dto.d.ts.map +1 -0
  193. package/dist/dtos/{update-dashboard-layout.dto.js → update-dashboard-user-layout.dto.js} +34 -16
  194. package/dist/dtos/update-dashboard-user-layout.dto.js.map +1 -0
  195. package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
  196. package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
  197. package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
  198. package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
  199. package/dist/dtos/update-permission-metadata.dto.d.ts.map +1 -1
  200. package/dist/dtos/update-permission-metadata.dto.js +3 -1
  201. package/dist/dtos/update-permission-metadata.dto.js.map +1 -1
  202. package/dist/dtos/update-role-metadata.dto.d.ts +2 -0
  203. package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
  204. package/dist/dtos/update-role-metadata.dto.js +13 -1
  205. package/dist/dtos/update-role-metadata.dto.js.map +1 -1
  206. package/dist/dtos/update-user.dto.d.ts +1 -0
  207. package/dist/dtos/update-user.dto.d.ts.map +1 -1
  208. package/dist/dtos/update-user.dto.js +7 -1
  209. package/dist/dtos/update-user.dto.js.map +1 -1
  210. package/dist/entities/action-metadata.entity.d.ts.map +1 -1
  211. package/dist/entities/action-metadata.entity.js +1 -0
  212. package/dist/entities/action-metadata.entity.js.map +1 -1
  213. package/dist/entities/agent-event.entity.d.ts.map +1 -1
  214. package/dist/entities/agent-event.entity.js +1 -0
  215. package/dist/entities/agent-event.entity.js.map +1 -1
  216. package/dist/entities/agent-session.entity.d.ts.map +1 -1
  217. package/dist/entities/agent-session.entity.js +1 -0
  218. package/dist/entities/agent-session.entity.js.map +1 -1
  219. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  220. package/dist/entities/chatter-message.entity.js +2 -0
  221. package/dist/entities/chatter-message.entity.js.map +1 -1
  222. package/dist/entities/dashboard-user-layout.entity.d.ts +11 -0
  223. package/dist/entities/dashboard-user-layout.entity.d.ts.map +1 -0
  224. package/dist/entities/dashboard-user-layout.entity.js +52 -0
  225. package/dist/entities/dashboard-user-layout.entity.js.map +1 -0
  226. package/dist/entities/email-template.entity.d.ts.map +1 -1
  227. package/dist/entities/email-template.entity.js +1 -0
  228. package/dist/entities/email-template.entity.js.map +1 -1
  229. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  230. package/dist/entities/field-metadata.entity.js +4 -0
  231. package/dist/entities/field-metadata.entity.js.map +1 -1
  232. package/dist/entities/legacy-common-with-id.entity.d.ts +2 -2
  233. package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -1
  234. package/dist/entities/legacy-common-with-id.entity.js +6 -6
  235. package/dist/entities/legacy-common-with-id.entity.js.map +1 -1
  236. package/dist/entities/legacy-common.entity.d.ts +1 -1
  237. package/dist/entities/legacy-common.entity.d.ts.map +1 -1
  238. package/dist/entities/legacy-common.entity.js +14 -14
  239. package/dist/entities/legacy-common.entity.js.map +1 -1
  240. package/dist/entities/list-of-values.entity.d.ts.map +1 -1
  241. package/dist/entities/list-of-values.entity.js +4 -0
  242. package/dist/entities/list-of-values.entity.js.map +1 -1
  243. package/dist/entities/locale.entity.d.ts.map +1 -1
  244. package/dist/entities/locale.entity.js +1 -0
  245. package/dist/entities/locale.entity.js.map +1 -1
  246. package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
  247. package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
  248. package/dist/entities/mcp-audit-log.entity.js +90 -0
  249. package/dist/entities/mcp-audit-log.entity.js.map +1 -0
  250. package/dist/entities/media.entity.d.ts.map +1 -1
  251. package/dist/entities/media.entity.js +1 -0
  252. package/dist/entities/media.entity.js.map +1 -1
  253. package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
  254. package/dist/entities/menu-item-metadata.entity.js +2 -0
  255. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  256. package/dist/entities/model-metadata.entity.d.ts +2 -2
  257. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  258. package/dist/entities/model-metadata.entity.js +8 -8
  259. package/dist/entities/model-metadata.entity.js.map +1 -1
  260. package/dist/entities/module-metadata.entity.d.ts.map +1 -1
  261. package/dist/entities/module-metadata.entity.js +2 -0
  262. package/dist/entities/module-metadata.entity.js.map +1 -1
  263. package/dist/entities/permission-metadata.entity.d.ts.map +1 -1
  264. package/dist/entities/permission-metadata.entity.js.map +1 -1
  265. package/dist/entities/role-metadata.entity.d.ts +2 -0
  266. package/dist/entities/role-metadata.entity.d.ts.map +1 -1
  267. package/dist/entities/role-metadata.entity.js +10 -2
  268. package/dist/entities/role-metadata.entity.js.map +1 -1
  269. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  270. package/dist/entities/saved-filters.entity.js +3 -0
  271. package/dist/entities/saved-filters.entity.js.map +1 -1
  272. package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
  273. package/dist/entities/scheduled-job.entity.js +2 -0
  274. package/dist/entities/scheduled-job.entity.js.map +1 -1
  275. package/dist/entities/security-rule.entity.d.ts.map +1 -1
  276. package/dist/entities/security-rule.entity.js +1 -0
  277. package/dist/entities/security-rule.entity.js.map +1 -1
  278. package/dist/entities/sms-template.entity.d.ts.map +1 -1
  279. package/dist/entities/sms-template.entity.js +2 -0
  280. package/dist/entities/sms-template.entity.js.map +1 -1
  281. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  282. package/dist/entities/user-activity-history.entity.js +1 -0
  283. package/dist/entities/user-activity-history.entity.js.map +1 -1
  284. package/dist/entities/user.entity.d.ts +3 -0
  285. package/dist/entities/user.entity.d.ts.map +1 -1
  286. package/dist/entities/user.entity.js +16 -1
  287. package/dist/entities/user.entity.js.map +1 -1
  288. package/dist/entities/view-metadata.entity.d.ts.map +1 -1
  289. package/dist/entities/view-metadata.entity.js +2 -0
  290. package/dist/entities/view-metadata.entity.js.map +1 -1
  291. package/dist/enums/legacy-table-type.enum.d.ts +6 -0
  292. package/dist/enums/legacy-table-type.enum.d.ts.map +1 -0
  293. package/dist/enums/legacy-table-type.enum.js +10 -0
  294. package/dist/enums/legacy-table-type.enum.js.map +1 -0
  295. package/dist/factories/whatsapp.factory.d.ts.map +1 -1
  296. package/dist/factories/whatsapp.factory.js +13 -11
  297. package/dist/factories/whatsapp.factory.js.map +1 -1
  298. package/dist/helpers/bootstrap.helper.d.ts +1 -0
  299. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  300. package/dist/helpers/bootstrap.helper.js +6 -3
  301. package/dist/helpers/bootstrap.helper.js.map +1 -1
  302. package/dist/helpers/command.service.d.ts +1 -0
  303. package/dist/helpers/command.service.d.ts.map +1 -1
  304. package/dist/helpers/command.service.js +2 -1
  305. package/dist/helpers/command.service.js.map +1 -1
  306. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts +34 -0
  307. package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts.map +1 -0
  308. package/dist/helpers/microsoft-active-directory-oauth.helper.js +43 -0
  309. package/dist/helpers/microsoft-active-directory-oauth.helper.js.map +1 -0
  310. package/dist/helpers/model-metadata-helper.service.d.ts +2 -1
  311. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  312. package/dist/helpers/model-metadata-helper.service.js +4 -3
  313. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  314. package/dist/helpers/module-metadata-helper.service.d.ts +2 -0
  315. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  316. package/dist/helpers/module-metadata-helper.service.js +23 -10
  317. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  318. package/dist/helpers/module.helper.d.ts.map +1 -1
  319. package/dist/helpers/module.helper.js +6 -6
  320. package/dist/helpers/module.helper.js.map +1 -1
  321. package/dist/helpers/solid-registry.d.ts +5 -9
  322. package/dist/helpers/solid-registry.d.ts.map +1 -1
  323. package/dist/helpers/solid-registry.js +13 -28
  324. package/dist/helpers/solid-registry.js.map +1 -1
  325. package/dist/helpers/typeorm-migration-helpers.d.ts +12 -0
  326. package/dist/helpers/typeorm-migration-helpers.d.ts.map +1 -0
  327. package/dist/helpers/typeorm-migration-helpers.js +119 -0
  328. package/dist/helpers/typeorm-migration-helpers.js.map +1 -0
  329. package/dist/helpers/user-helper.d.ts.map +1 -1
  330. package/dist/helpers/user-helper.js +4 -0
  331. package/dist/helpers/user-helper.js.map +1 -1
  332. package/dist/index.d.ts +37 -10
  333. package/dist/index.d.ts.map +1 -1
  334. package/dist/index.js +37 -10
  335. package/dist/index.js.map +1 -1
  336. package/dist/interfaces.d.ts +23 -21
  337. package/dist/interfaces.d.ts.map +1 -1
  338. package/dist/interfaces.js.map +1 -1
  339. package/dist/listeners/user-registration.listener.d.ts +5 -2
  340. package/dist/listeners/user-registration.listener.d.ts.map +1 -1
  341. package/dist/listeners/user-registration.listener.js +37 -4
  342. package/dist/listeners/user-registration.listener.js.map +1 -1
  343. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts +14 -0
  344. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts.map +1 -0
  345. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js +67 -0
  346. package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js.map +1 -0
  347. package/dist/{repository/dashboard-layout.repository.d.ts → repositories/dashboard-user-layout.repository.d.ts} +5 -5
  348. package/dist/repositories/dashboard-user-layout.repository.d.ts.map +1 -0
  349. package/dist/{repository/dashboard-question-sql-dataset-config.repository.js → repositories/dashboard-user-layout.repository.js} +15 -10
  350. package/dist/repositories/dashboard-user-layout.repository.js.map +1 -0
  351. package/dist/repository/{ai-interaction.repository.d.ts → mcp-audit-log.repository.d.ts} +3 -3
  352. package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
  353. package/dist/repository/{ai-interaction.repository.js → mcp-audit-log.repository.js} +8 -8
  354. package/dist/repository/mcp-audit-log.repository.js.map +1 -0
  355. package/dist/seeders/module-metadata-seeder.service.d.ts +2 -6
  356. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  357. package/dist/seeders/module-metadata-seeder.service.js +58 -98
  358. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  359. package/dist/seeders/module-test-data.service.d.ts +2 -0
  360. package/dist/seeders/module-test-data.service.d.ts.map +1 -1
  361. package/dist/seeders/module-test-data.service.js +62 -1
  362. package/dist/seeders/module-test-data.service.js.map +1 -1
  363. package/dist/seeders/seed-data/solid-core-metadata.json +5009 -4283
  364. package/dist/seeders/system-fields-seeder.service.js +1 -1
  365. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  366. package/dist/services/authentication.service.d.ts +18 -1
  367. package/dist/services/authentication.service.d.ts.map +1 -1
  368. package/dist/services/authentication.service.js +208 -14
  369. package/dist/services/authentication.service.js.map +1 -1
  370. package/dist/services/chatter-message.service.d.ts +7 -1
  371. package/dist/services/chatter-message.service.d.ts.map +1 -1
  372. package/dist/services/chatter-message.service.js +94 -2
  373. package/dist/services/chatter-message.service.js.map +1 -1
  374. package/dist/services/crud-helper.service.d.ts +18 -0
  375. package/dist/services/crud-helper.service.d.ts.map +1 -1
  376. package/dist/services/crud-helper.service.js +76 -2
  377. package/dist/services/crud-helper.service.js.map +1 -1
  378. package/dist/services/crud.service.d.ts +1 -21
  379. package/dist/services/crud.service.d.ts.map +1 -1
  380. package/dist/services/crud.service.js +23 -87
  381. package/dist/services/crud.service.js.map +1 -1
  382. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts +13 -0
  383. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.d.ts.map +1 -0
  384. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js +55 -0
  385. package/dist/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.js.map +1 -0
  386. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts +13 -0
  387. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.d.ts.map +1 -0
  388. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js +52 -0
  389. package/dist/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.js.map +1 -0
  390. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts +13 -0
  391. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.d.ts.map +1 -0
  392. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js +52 -0
  393. package/dist/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.js.map +1 -0
  394. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts +10 -0
  395. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -0
  396. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +62 -0
  397. package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -0
  398. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts +10 -0
  399. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -0
  400. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +82 -0
  401. package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -0
  402. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +17 -0
  403. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -0
  404. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +130 -0
  405. package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -0
  406. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts +37 -0
  407. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -0
  408. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +112 -0
  409. package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -0
  410. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts +10 -0
  411. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.d.ts.map +1 -0
  412. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js +57 -0
  413. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.js.map +1 -0
  414. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts +10 -0
  415. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.d.ts.map +1 -0
  416. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js +57 -0
  417. package/dist/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.js.map +1 -0
  418. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts +10 -0
  419. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.d.ts.map +1 -0
  420. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js +100 -0
  421. package/dist/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.js.map +1 -0
  422. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts +10 -0
  423. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.d.ts.map +1 -0
  424. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js +55 -0
  425. package/dist/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.js.map +1 -0
  426. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts +13 -0
  427. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.d.ts.map +1 -0
  428. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js +52 -0
  429. package/dist/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.js.map +1 -0
  430. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts +15 -0
  431. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.d.ts.map +1 -0
  432. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js +60 -0
  433. package/dist/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.js.map +1 -0
  434. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts +13 -0
  435. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.d.ts.map +1 -0
  436. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js +51 -0
  437. package/dist/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.js.map +1 -0
  438. package/dist/services/dashboard-runtime.service.d.ts +31 -0
  439. package/dist/services/dashboard-runtime.service.d.ts.map +1 -0
  440. package/dist/services/dashboard-runtime.service.js +408 -0
  441. package/dist/services/dashboard-runtime.service.js.map +1 -0
  442. package/dist/services/dashboard-user-layout.service.d.ts +12 -0
  443. package/dist/services/dashboard-user-layout.service.d.ts.map +1 -0
  444. package/dist/services/{dashboard-question-sql-dataset-config.service.js → dashboard-user-layout.service.js} +10 -10
  445. package/dist/services/dashboard-user-layout.service.js.map +1 -0
  446. package/dist/services/import-transaction.service.d.ts.map +1 -1
  447. package/dist/services/import-transaction.service.js +6 -0
  448. package/dist/services/import-transaction.service.js.map +1 -1
  449. package/dist/services/mcp-audit-log.service.d.ts +12 -0
  450. package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
  451. package/dist/services/{dashboard-variable.service.js → mcp-audit-log.service.js} +9 -10
  452. package/dist/services/mcp-audit-log.service.js.map +1 -0
  453. package/dist/services/media.service.d.ts +1 -20
  454. package/dist/services/media.service.d.ts.map +1 -1
  455. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts +1 -0
  456. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  457. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +51 -11
  458. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  459. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts +1 -0
  460. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  461. package/dist/services/mediaStorageProviders/file-storage-provider.js +11 -1
  462. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  463. package/dist/services/model-metadata.service.d.ts +20 -32
  464. package/dist/services/model-metadata.service.d.ts.map +1 -1
  465. package/dist/services/model-metadata.service.js +271 -42
  466. package/dist/services/model-metadata.service.js.map +1 -1
  467. package/dist/services/module-metadata-explorer.service.d.ts +161 -0
  468. package/dist/services/module-metadata-explorer.service.d.ts.map +1 -0
  469. package/dist/services/module-metadata-explorer.service.js +485 -0
  470. package/dist/services/module-metadata-explorer.service.js.map +1 -0
  471. package/dist/services/module-metadata.service.d.ts +11 -1
  472. package/dist/services/module-metadata.service.d.ts.map +1 -1
  473. package/dist/services/module-metadata.service.js +140 -4
  474. package/dist/services/module-metadata.service.js.map +1 -1
  475. package/dist/services/module-package.service.d.ts +266 -0
  476. package/dist/services/module-package.service.d.ts.map +1 -0
  477. package/dist/services/module-package.service.js +980 -0
  478. package/dist/services/module-package.service.js.map +1 -0
  479. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts +11 -0
  480. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -0
  481. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +59 -0
  482. package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -0
  483. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts +11 -0
  484. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -0
  485. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +60 -0
  486. package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -0
  487. package/dist/services/settings/default-settings-provider.service.d.ts +292 -0
  488. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  489. package/dist/services/settings/default-settings-provider.service.js +164 -0
  490. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  491. package/dist/services/solid-introspect.service.d.ts +1 -2
  492. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  493. package/dist/services/solid-introspect.service.js +12 -24
  494. package/dist/services/solid-introspect.service.js.map +1 -1
  495. package/dist/services/user.service.d.ts +2 -0
  496. package/dist/services/user.service.d.ts.map +1 -1
  497. package/dist/services/user.service.js +47 -1
  498. package/dist/services/user.service.js.map +1 -1
  499. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts +11 -0
  500. package/dist/services/whatsapp/GupshupOtpWhatsappService.d.ts.map +1 -0
  501. package/dist/services/whatsapp/GupshupOtpWhatsappService.js +127 -0
  502. package/dist/services/whatsapp/GupshupOtpWhatsappService.js.map +1 -0
  503. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts +17 -0
  504. package/dist/services/whatsapp/MetaCloudWhatsappService.d.ts.map +1 -0
  505. package/dist/services/whatsapp/MetaCloudWhatsappService.js +209 -0
  506. package/dist/services/whatsapp/MetaCloudWhatsappService.js.map +1 -0
  507. package/dist/solid-core.module.d.ts +2 -2
  508. package/dist/solid-core.module.d.ts.map +1 -1
  509. package/dist/solid-core.module.js +79 -103
  510. package/dist/solid-core.module.js.map +1 -1
  511. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
  512. package/dist/subscribers/model-metadata.subscriber.js +1 -3
  513. package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
  514. package/dist/subscribers/scheduled-job.subscriber.js +1 -1
  515. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  516. package/dist/subscribers/security-rule.subscriber.js +1 -1
  517. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  518. package/dist/testing/adapters/ui/playwright-adapter.d.ts +1 -0
  519. package/dist/testing/adapters/ui/playwright-adapter.d.ts.map +1 -1
  520. package/dist/testing/adapters/ui/playwright-adapter.js +3 -0
  521. package/dist/testing/adapters/ui/playwright-adapter.js.map +1 -1
  522. package/dist/testing/steps/ui/index.d.ts.map +1 -1
  523. package/dist/testing/steps/ui/index.js +2 -0
  524. package/dist/testing/steps/ui/index.js.map +1 -1
  525. package/dist/testing/steps/ui/manual.step.d.ts +3 -0
  526. package/dist/testing/steps/ui/manual.step.d.ts.map +1 -0
  527. package/dist/testing/steps/ui/manual.step.js +56 -0
  528. package/dist/testing/steps/ui/manual.step.js.map +1 -0
  529. package/dist/winston.logger.d.ts +5 -0
  530. package/dist/winston.logger.d.ts.map +1 -1
  531. package/dist/winston.logger.js +6 -4
  532. package/dist/winston.logger.js.map +1 -1
  533. package/package.json +5 -8
  534. package/src/commands/info.command.ts +0 -2
  535. package/src/commands/refresh-model.command.ts +6 -51
  536. package/src/commands/refresh-module.command.ts +3 -16
  537. package/src/commands/test-data.command.ts +29 -6
  538. package/src/constants/error-messages.ts +2 -1
  539. package/src/controllers/chatter-message.controller.ts +12 -0
  540. package/src/controllers/{dashboard-variable.controller.ts → dashboard-user-layout.controller.ts} +10 -10
  541. package/src/controllers/dashboard.controller.ts +70 -89
  542. package/src/controllers/gupshup-webhook.controller.ts +91 -0
  543. package/src/controllers/mcp-audit-log.controller.ts +70 -0
  544. package/src/controllers/meta-cloud-whatsapp-webhook.controller.ts +155 -0
  545. package/src/controllers/microsoft-active-directory-authentication.controller.ts +104 -0
  546. package/src/controllers/model-metadata.controller.ts +1 -1
  547. package/src/controllers/module-metadata-explorer.controller.ts +83 -0
  548. package/src/controllers/module-metadata.controller.ts +7 -1
  549. package/src/controllers/module-package.controller.ts +102 -0
  550. package/src/controllers/service.controller.ts +4 -7
  551. package/src/controllers/test.controller.ts +0 -9
  552. package/src/decorators/dashboard-widget-data-provider.decorator.ts +6 -0
  553. package/src/dtos/confirm-module-package-import.dto.ts +12 -0
  554. package/src/dtos/create-dashboard-user-layout.dto.ts +41 -0
  555. package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
  556. package/src/dtos/create-model-metadata.dto.ts +5 -9
  557. package/src/dtos/create-permission-metadata.dto.ts +3 -0
  558. package/src/dtos/create-role-metadata.dto.ts +11 -1
  559. package/src/dtos/dashboard-variable-options-query.dto.ts +20 -0
  560. package/src/dtos/dashboard-widget-data-request.dto.ts +34 -0
  561. package/src/dtos/import-instructions.dto.ts +11 -1
  562. package/src/dtos/metadata-explorer-references-query.dto.ts +39 -0
  563. package/src/dtos/metadata-explorer-search-query.dto.ts +28 -0
  564. package/src/dtos/metadata-explorer-write.dto.ts +11 -0
  565. package/src/dtos/run-module-package-build.dto.ts +14 -0
  566. package/src/dtos/run-module-package-seed.dto.ts +12 -0
  567. package/src/dtos/update-chatter-note-message.dto.ts +14 -0
  568. package/src/dtos/update-dashboard-user-layout.dto.ts +45 -0
  569. package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
  570. package/src/dtos/update-permission-metadata.dto.ts +4 -1
  571. package/src/dtos/update-role-metadata.dto.ts +21 -1
  572. package/src/dtos/update-user.dto.ts +4 -0
  573. package/src/entities/action-metadata.entity.ts +1 -0
  574. package/src/entities/agent-event.entity.ts +1 -0
  575. package/src/entities/agent-session.entity.ts +1 -0
  576. package/src/entities/chatter-message.entity.ts +2 -0
  577. package/src/entities/dashboard-user-layout.entity.ts +27 -0
  578. package/src/entities/email-template.entity.ts +1 -0
  579. package/src/entities/field-metadata.entity.ts +4 -1
  580. package/src/entities/legacy-common-with-id.entity.ts +2 -2
  581. package/src/entities/legacy-common.entity.ts +1 -1
  582. package/src/entities/list-of-values.entity.ts +5 -1
  583. package/src/entities/locale.entity.ts +1 -0
  584. package/src/entities/mcp-audit-log.entity.ts +55 -0
  585. package/src/entities/media.entity.ts +1 -0
  586. package/src/entities/menu-item-metadata.entity.ts +2 -0
  587. package/src/entities/model-metadata.entity.ts +6 -5
  588. package/src/entities/module-metadata.entity.ts +2 -0
  589. package/src/entities/permission-metadata.entity.ts +2 -2
  590. package/src/entities/role-metadata.entity.ts +11 -3
  591. package/src/entities/saved-filters.entity.ts +3 -0
  592. package/src/entities/scheduled-job.entity.ts +2 -0
  593. package/src/entities/security-rule.entity.ts +1 -0
  594. package/src/entities/sms-template.entity.ts +2 -0
  595. package/src/entities/user-activity-history.entity.ts +1 -0
  596. package/src/entities/user.entity.ts +16 -2
  597. package/src/entities/view-metadata.entity.ts +2 -0
  598. package/src/enums/legacy-table-type.enum.ts +5 -0
  599. package/src/factories/whatsapp.factory.ts +33 -32
  600. package/src/helpers/bootstrap.helper.ts +13 -6
  601. package/src/helpers/command.service.ts +3 -1
  602. package/src/helpers/field-crud-managers/field-quality-check-fixes.md +208 -0
  603. package/src/helpers/microsoft-active-directory-oauth.helper.ts +83 -0
  604. package/src/helpers/model-metadata-helper.service.ts +4 -3
  605. package/src/helpers/module-metadata-helper.service.ts +33 -20
  606. package/src/helpers/module.helper.ts +12 -9
  607. package/src/helpers/solid-registry.ts +15 -36
  608. package/src/helpers/typeorm-migration-helpers.ts +163 -0
  609. package/src/helpers/user-helper.ts +5 -1
  610. package/src/index.ts +37 -10
  611. package/src/interfaces.ts +32 -29
  612. package/src/listeners/user-registration.listener.ts +49 -6
  613. package/src/passport-strategies/microsoft-active-directory-oauth.strategy.ts +63 -0
  614. package/src/repositories/dashboard-user-layout.repository.ts +19 -0
  615. package/src/repository/mcp-audit-log.repository.ts +17 -0
  616. package/src/seeders/module-metadata-seeder.service.ts +63 -105
  617. package/src/seeders/module-test-data.service.ts +80 -3
  618. package/src/seeders/seed-data/solid-core-metadata.json +5010 -4284
  619. package/src/seeders/system-fields-seeder.service.ts +1 -1
  620. package/src/services/1.js +6 -0
  621. package/src/services/authentication.service.ts +359 -46
  622. package/src/services/chatter-message.service.ts +112 -2
  623. package/src/services/crud-helper.service.ts +86 -2
  624. package/src/services/crud.service.ts +26 -119
  625. package/src/services/dashboard-providers/README.md +603 -0
  626. package/src/services/dashboard-providers/mq-dashboard-avg-elapsed-kpi-provider.service.ts +49 -0
  627. package/src/services/dashboard-providers/mq-dashboard-failed-messages-kpi-provider.service.ts +45 -0
  628. package/src/services/dashboard-providers/mq-dashboard-inflight-messages-kpi-provider.service.ts +45 -0
  629. package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +58 -0
  630. package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +79 -0
  631. package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +165 -0
  632. package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +155 -0
  633. package/src/services/dashboard-providers/mq-dashboard-queue-wise-avg-elapsed-provider.service.ts +51 -0
  634. package/src/services/dashboard-providers/mq-dashboard-queue-wise-failures-provider.service.ts +51 -0
  635. package/src/services/dashboard-providers/mq-dashboard-recent-failures-provider.service.ts +95 -0
  636. package/src/services/dashboard-providers/mq-dashboard-stage-distribution-provider.service.ts +49 -0
  637. package/src/services/dashboard-providers/mq-dashboard-succeeded-messages-kpi-provider.service.ts +45 -0
  638. package/src/services/dashboard-providers/mq-dashboard-success-rate-kpi-provider.service.ts +55 -0
  639. package/src/services/dashboard-providers/mq-dashboard-total-messages-kpi-provider.service.ts +44 -0
  640. package/src/services/dashboard-runtime.service.ts +488 -0
  641. package/src/services/dashboard-user-layout.service.ts +20 -0
  642. package/src/services/import-transaction.service.ts +11 -1
  643. package/src/services/mcp-audit-log.service.ts +19 -0
  644. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +60 -13
  645. package/src/services/mediaStorageProviders/file-storage-provider.ts +13 -2
  646. package/src/services/model-metadata.service.ts +318 -115
  647. package/src/services/module-metadata-explorer.service.ts +670 -0
  648. package/src/services/module-metadata.service.ts +148 -10
  649. package/src/services/module-package.service.ts +1171 -0
  650. package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +52 -0
  651. package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +51 -0
  652. package/src/services/settings/default-settings-provider.service.ts +167 -0
  653. package/src/services/solid-introspect.service.ts +19 -34
  654. package/src/services/user.service.ts +62 -1
  655. package/src/services/whatsapp/GupshupOtpWhatsappService.ts +174 -0
  656. package/src/services/whatsapp/MetaCloudWhatsappService.ts +253 -0
  657. package/src/solid-core.module.ts +251 -282
  658. package/src/subscribers/model-metadata.subscriber.ts +1 -3
  659. package/src/subscribers/scheduled-job.subscriber.ts +1 -1
  660. package/src/subscribers/security-rule.subscriber.ts +1 -1
  661. package/src/testing/README.md +55 -2
  662. package/src/testing/adapters/ui/playwright-adapter.ts +4 -0
  663. package/src/testing/steps/ui/index.ts +2 -0
  664. package/src/testing/steps/ui/manual.step.ts +80 -0
  665. package/src/winston.logger.ts +5 -7
  666. package/dist/commands/ingest.command.d.ts +0 -16
  667. package/dist/commands/ingest.command.d.ts.map +0 -1
  668. package/dist/commands/ingest.command.js +0 -50
  669. package/dist/commands/ingest.command.js.map +0 -1
  670. package/dist/controllers/ai-interaction.controller.d.ts +0 -48
  671. package/dist/controllers/ai-interaction.controller.d.ts.map +0 -1
  672. package/dist/controllers/ai-interaction.controller.js +0 -218
  673. package/dist/controllers/ai-interaction.controller.js.map +0 -1
  674. package/dist/controllers/dashboard-layout.controller.d.ts +0 -47
  675. package/dist/controllers/dashboard-layout.controller.d.ts.map +0 -1
  676. package/dist/controllers/dashboard-layout.controller.js +0 -204
  677. package/dist/controllers/dashboard-layout.controller.js.map +0 -1
  678. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +0 -43
  679. package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +0 -1
  680. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js +0 -179
  681. package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +0 -1
  682. package/dist/controllers/dashboard-question.controller.d.ts +0 -45
  683. package/dist/controllers/dashboard-question.controller.d.ts.map +0 -1
  684. package/dist/controllers/dashboard-question.controller.js.map +0 -1
  685. package/dist/controllers/dashboard-variable.controller.d.ts +0 -43
  686. package/dist/controllers/dashboard-variable.controller.d.ts.map +0 -1
  687. package/dist/controllers/dashboard-variable.controller.js.map +0 -1
  688. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts +0 -3
  689. package/dist/decorators/dashboard-question-data-provider.decorator.d.ts.map +0 -1
  690. package/dist/decorators/dashboard-question-data-provider.decorator.js +0 -11
  691. package/dist/decorators/dashboard-question-data-provider.decorator.js.map +0 -1
  692. package/dist/decorators/dashboard-selection-provider.decorator.d.ts +0 -3
  693. package/dist/decorators/dashboard-selection-provider.decorator.d.ts.map +0 -1
  694. package/dist/decorators/dashboard-selection-provider.decorator.js +0 -11
  695. package/dist/decorators/dashboard-selection-provider.decorator.js.map +0 -1
  696. package/dist/dtos/create-ai-interaction.dto.d.ts +0 -23
  697. package/dist/dtos/create-ai-interaction.dto.d.ts.map +0 -1
  698. package/dist/dtos/create-ai-interaction.dto.js +0 -149
  699. package/dist/dtos/create-ai-interaction.dto.js.map +0 -1
  700. package/dist/dtos/create-dashboard-layout.dto.d.ts +0 -8
  701. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +0 -1
  702. package/dist/dtos/create-dashboard-layout.dto.js +0 -53
  703. package/dist/dtos/create-dashboard-layout.dto.js.map +0 -1
  704. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts +0 -12
  705. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  706. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js +0 -77
  707. package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  708. package/dist/dtos/create-dashboard-question.dto.d.ts +0 -17
  709. package/dist/dtos/create-dashboard-question.dto.d.ts.map +0 -1
  710. package/dist/dtos/create-dashboard-question.dto.js +0 -105
  711. package/dist/dtos/create-dashboard-question.dto.js.map +0 -1
  712. package/dist/dtos/create-dashboard-variable.dto.d.ts +0 -19
  713. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +0 -1
  714. package/dist/dtos/create-dashboard-variable.dto.js +0 -103
  715. package/dist/dtos/create-dashboard-variable.dto.js.map +0 -1
  716. package/dist/dtos/create-dashboard.dto.d.ts +0 -17
  717. package/dist/dtos/create-dashboard.dto.d.ts.map +0 -1
  718. package/dist/dtos/create-dashboard.dto.js +0 -102
  719. package/dist/dtos/create-dashboard.dto.js.map +0 -1
  720. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts +0 -8
  721. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.d.ts.map +0 -1
  722. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js +0 -52
  723. package/dist/dtos/dashboard-variable-selection-dynamic-query.dto.js.map +0 -1
  724. package/dist/dtos/invoke-ai-prompt.dto.d.ts +0 -5
  725. package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +0 -1
  726. package/dist/dtos/invoke-ai-prompt.dto.js.map +0 -1
  727. package/dist/dtos/update-ai-interaction.dto.d.ts +0 -24
  728. package/dist/dtos/update-ai-interaction.dto.d.ts.map +0 -1
  729. package/dist/dtos/update-ai-interaction.dto.js +0 -150
  730. package/dist/dtos/update-ai-interaction.dto.js.map +0 -1
  731. package/dist/dtos/update-dashboard-layout.dto.d.ts +0 -8
  732. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +0 -1
  733. package/dist/dtos/update-dashboard-layout.dto.js.map +0 -1
  734. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts +0 -13
  735. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +0 -1
  736. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js +0 -86
  737. package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +0 -1
  738. package/dist/dtos/update-dashboard-question.dto.d.ts +0 -18
  739. package/dist/dtos/update-dashboard-question.dto.d.ts.map +0 -1
  740. package/dist/dtos/update-dashboard-question.dto.js +0 -112
  741. package/dist/dtos/update-dashboard-question.dto.js.map +0 -1
  742. package/dist/dtos/update-dashboard-variable.dto.d.ts +0 -16
  743. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +0 -1
  744. package/dist/dtos/update-dashboard-variable.dto.js +0 -101
  745. package/dist/dtos/update-dashboard-variable.dto.js.map +0 -1
  746. package/dist/dtos/update-dashboard.dto.d.ts +0 -18
  747. package/dist/dtos/update-dashboard.dto.d.ts.map +0 -1
  748. package/dist/dtos/update-dashboard.dto.js +0 -108
  749. package/dist/dtos/update-dashboard.dto.js.map +0 -1
  750. package/dist/entities/ai-interaction.entity.d.ts +0 -24
  751. package/dist/entities/ai-interaction.entity.d.ts.map +0 -1
  752. package/dist/entities/ai-interaction.entity.js +0 -116
  753. package/dist/entities/ai-interaction.entity.js.map +0 -1
  754. package/dist/entities/dashboard-layout.entity.d.ts +0 -9
  755. package/dist/entities/dashboard-layout.entity.d.ts.map +0 -1
  756. package/dist/entities/dashboard-layout.entity.js +0 -41
  757. package/dist/entities/dashboard-layout.entity.js.map +0 -1
  758. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +0 -14
  759. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +0 -1
  760. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +0 -66
  761. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +0 -1
  762. package/dist/entities/dashboard-question.entity.d.ts +0 -17
  763. package/dist/entities/dashboard-question.entity.d.ts.map +0 -1
  764. package/dist/entities/dashboard-question.entity.js +0 -77
  765. package/dist/entities/dashboard-question.entity.js.map +0 -1
  766. package/dist/entities/dashboard-variable.entity.d.ts +0 -16
  767. package/dist/entities/dashboard-variable.entity.d.ts.map +0 -1
  768. package/dist/entities/dashboard-variable.entity.js +0 -79
  769. package/dist/entities/dashboard-variable.entity.js.map +0 -1
  770. package/dist/entities/dashboard.entity.d.ts +0 -16
  771. package/dist/entities/dashboard.entity.d.ts.map +0 -1
  772. package/dist/entities/dashboard.entity.js +0 -64
  773. package/dist/entities/dashboard.entity.js.map +0 -1
  774. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +0 -11
  775. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +0 -1
  776. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +0 -39
  777. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +0 -1
  778. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +0 -8
  779. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +0 -1
  780. package/dist/jobs/database/trigger-mcp-client-queue-options.js +0 -10
  781. package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +0 -1
  782. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +0 -27
  783. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +0 -1
  784. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +0 -245
  785. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +0 -1
  786. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +0 -11
  787. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +0 -1
  788. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js +0 -39
  789. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +0 -1
  790. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts +0 -8
  791. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +0 -1
  792. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js +0 -10
  793. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +0 -1
  794. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +0 -18
  795. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
  796. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js +0 -103
  797. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +0 -1
  798. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +0 -11
  799. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +0 -1
  800. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +0 -39
  801. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +0 -1
  802. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +0 -8
  803. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +0 -1
  804. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +0 -10
  805. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +0 -1
  806. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +0 -18
  807. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +0 -1
  808. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +0 -103
  809. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +0 -1
  810. package/dist/mappers/dashboard-mapper.d.ts +0 -6
  811. package/dist/mappers/dashboard-mapper.d.ts.map +0 -1
  812. package/dist/mappers/dashboard-mapper.js +0 -62
  813. package/dist/mappers/dashboard-mapper.js.map +0 -1
  814. package/dist/repository/ai-interaction.repository.d.ts.map +0 -1
  815. package/dist/repository/ai-interaction.repository.js.map +0 -1
  816. package/dist/repository/dashboard-layout.repository.d.ts.map +0 -1
  817. package/dist/repository/dashboard-layout.repository.js +0 -34
  818. package/dist/repository/dashboard-layout.repository.js.map +0 -1
  819. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +0 -12
  820. package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +0 -1
  821. package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +0 -1
  822. package/dist/repository/dashboard-question.repository.d.ts +0 -12
  823. package/dist/repository/dashboard-question.repository.d.ts.map +0 -1
  824. package/dist/repository/dashboard-question.repository.js +0 -34
  825. package/dist/repository/dashboard-question.repository.js.map +0 -1
  826. package/dist/repository/dashboard-variable.repository.d.ts +0 -12
  827. package/dist/repository/dashboard-variable.repository.d.ts.map +0 -1
  828. package/dist/repository/dashboard-variable.repository.js +0 -34
  829. package/dist/repository/dashboard-variable.repository.js.map +0 -1
  830. package/dist/repository/dashboard.repository.d.ts +0 -13
  831. package/dist/repository/dashboard.repository.d.ts.map +0 -1
  832. package/dist/repository/dashboard.repository.js +0 -104
  833. package/dist/repository/dashboard.repository.js.map +0 -1
  834. package/dist/services/ai-interaction.service.d.ts +0 -23
  835. package/dist/services/ai-interaction.service.d.ts.map +0 -1
  836. package/dist/services/ai-interaction.service.js +0 -217
  837. package/dist/services/ai-interaction.service.js.map +0 -1
  838. package/dist/services/dashboard-layout.service.d.ts +0 -20
  839. package/dist/services/dashboard-layout.service.d.ts.map +0 -1
  840. package/dist/services/dashboard-layout.service.js +0 -120
  841. package/dist/services/dashboard-layout.service.js.map +0 -1
  842. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +0 -12
  843. package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +0 -1
  844. package/dist/services/dashboard-question-sql-dataset-config.service.js.map +0 -1
  845. package/dist/services/dashboard-question.service.d.ts +0 -23
  846. package/dist/services/dashboard-question.service.d.ts.map +0 -1
  847. package/dist/services/dashboard-question.service.js +0 -135
  848. package/dist/services/dashboard-question.service.js.map +0 -1
  849. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts +0 -12
  850. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.d.ts.map +0 -1
  851. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js +0 -55
  852. package/dist/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.js.map +0 -1
  853. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts +0 -11
  854. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.d.ts.map +0 -1
  855. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js +0 -45
  856. package/dist/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.js.map +0 -1
  857. package/dist/services/dashboard-variable.service.d.ts +0 -13
  858. package/dist/services/dashboard-variable.service.d.ts.map +0 -1
  859. package/dist/services/dashboard-variable.service.js.map +0 -1
  860. package/dist/services/dashboard.service.d.ts +0 -29
  861. package/dist/services/dashboard.service.d.ts.map +0 -1
  862. package/dist/services/dashboard.service.js +0 -171
  863. package/dist/services/dashboard.service.js.map +0 -1
  864. package/dist/services/database/database-bootstrap.service.d.ts +0 -12
  865. package/dist/services/database/database-bootstrap.service.d.ts.map +0 -1
  866. package/dist/services/database/database-bootstrap.service.js +0 -115
  867. package/dist/services/database/database-bootstrap.service.js.map +0 -1
  868. package/dist/services/genai/ingest-metadata.service.d.ts +0 -38
  869. package/dist/services/genai/ingest-metadata.service.d.ts.map +0 -1
  870. package/dist/services/genai/ingest-metadata.service.js +0 -542
  871. package/dist/services/genai/ingest-metadata.service.js.map +0 -1
  872. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +0 -9
  873. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +0 -1
  874. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +0 -39
  875. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +0 -1
  876. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts +0 -12
  877. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  878. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js +0 -41
  879. package/dist/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.js.map +0 -1
  880. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts +0 -12
  881. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.d.ts.map +0 -1
  882. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js +0 -42
  883. package/dist/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.js.map +0 -1
  884. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts +0 -25
  885. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.d.ts.map +0 -1
  886. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js +0 -116
  887. package/dist/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.js.map +0 -1
  888. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts +0 -12
  889. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.d.ts.map +0 -1
  890. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js +0 -37
  891. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.js.map +0 -1
  892. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts +0 -12
  893. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.d.ts.map +0 -1
  894. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js +0 -38
  895. package/dist/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.js.map +0 -1
  896. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts +0 -12
  897. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.d.ts.map +0 -1
  898. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js +0 -38
  899. package/dist/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.js.map +0 -1
  900. package/dist/services/genai/r2r-helper.service.d.ts +0 -9
  901. package/dist/services/genai/r2r-helper.service.d.ts.map +0 -1
  902. package/dist/services/genai/r2r-helper.service.js +0 -40
  903. package/dist/services/genai/r2r-helper.service.js.map +0 -1
  904. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +0 -34
  905. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +0 -1
  906. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +0 -90
  907. package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +0 -1
  908. package/dist/services/question-data-providers/helpers.d.ts +0 -7
  909. package/dist/services/question-data-providers/helpers.d.ts.map +0 -1
  910. package/dist/services/question-data-providers/helpers.js +0 -25
  911. package/dist/services/question-data-providers/helpers.js.map +0 -1
  912. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +0 -14
  913. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +0 -1
  914. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +0 -71
  915. package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +0 -1
  916. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +0 -16
  917. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +0 -1
  918. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +0 -93
  919. package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +0 -1
  920. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts +0 -11
  921. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +0 -1
  922. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +0 -49
  923. package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +0 -1
  924. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts +0 -11
  925. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.d.ts.map +0 -1
  926. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js +0 -47
  927. package/dist/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.js.map +0 -1
  928. package/dist/services/sql-expression-resolver.service.d.ts +0 -12
  929. package/dist/services/sql-expression-resolver.service.d.ts.map +0 -1
  930. package/dist/services/sql-expression-resolver.service.js +0 -121
  931. package/dist/services/sql-expression-resolver.service.js.map +0 -1
  932. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts +0 -16
  933. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +0 -1
  934. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js +0 -72
  935. package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +0 -1
  936. package/dist/subscribers/dashboard-question.subscriber.d.ts +0 -16
  937. package/dist/subscribers/dashboard-question.subscriber.d.ts.map +0 -1
  938. package/dist/subscribers/dashboard-question.subscriber.js +0 -72
  939. package/dist/subscribers/dashboard-question.subscriber.js.map +0 -1
  940. package/dist/subscribers/dashboard-variable.subscriber.d.ts +0 -16
  941. package/dist/subscribers/dashboard-variable.subscriber.d.ts.map +0 -1
  942. package/dist/subscribers/dashboard-variable.subscriber.js +0 -72
  943. package/dist/subscribers/dashboard-variable.subscriber.js.map +0 -1
  944. package/dist/subscribers/dashboard.subscriber.d.ts +0 -16
  945. package/dist/subscribers/dashboard.subscriber.d.ts.map +0 -1
  946. package/dist/subscribers/dashboard.subscriber.js +0 -71
  947. package/dist/subscribers/dashboard.subscriber.js.map +0 -1
  948. package/dist-tests/api/authenticate.spec.js +0 -119
  949. package/dist-tests/api/authenticate.spec.js.map +0 -1
  950. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  951. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  952. package/dist-tests/api/ping.spec.js +0 -21
  953. package/dist-tests/api/ping.spec.js.map +0 -1
  954. package/dist-tests/helpers/auth.js +0 -41
  955. package/dist-tests/helpers/auth.js.map +0 -1
  956. package/dist-tests/helpers/env.js +0 -11
  957. package/dist-tests/helpers/env.js.map +0 -1
  958. package/docs/grouping-enhancements.md +0 -89
  959. package/docs/java-spring/README.md +0 -3
  960. package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
  961. package/docs/seed-changes.md +0 -65
  962. package/docs/test-data-workflow.md +0 -200
  963. package/docs/type-declaration-import-issue.md +0 -24
  964. package/sql/default/mariadb/proc_CleanupModelMetadata.sql +0 -153
  965. package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +0 -56
  966. package/sql/default/mssql/proc_CleanupModuleMetadata.sql +0 -78
  967. package/sql/default/mysql/proc_CleanupModelMetadata.sql +0 -153
  968. package/sql/default/mysql/proc_CleanupModuleMetadata.sql +0 -56
  969. package/sql/default/postgres/proc_CleanupModelMetadata.sql +0 -148
  970. package/sql/default/postgres/proc_CleanupModuleMetadata.sql +0 -50
  971. package/sql/default/postgres/scratchpad.sql.txt +0 -12
  972. package/src/commands/ingest.command.ts +0 -36
  973. package/src/controllers/ai-interaction.controller.ts +0 -112
  974. package/src/controllers/dashboard-layout.controller.ts +0 -106
  975. package/src/controllers/dashboard-question-sql-dataset-config.controller.ts +0 -93
  976. package/src/controllers/dashboard-question.controller.ts +0 -104
  977. package/src/decorators/dashboard-question-data-provider.decorator.ts +0 -7
  978. package/src/decorators/dashboard-selection-provider.decorator.ts +0 -7
  979. package/src/dtos/create-ai-interaction.dto.ts +0 -89
  980. package/src/dtos/create-dashboard-layout.dto.ts +0 -31
  981. package/src/dtos/create-dashboard-question-sql-dataset-config.dto.ts +0 -42
  982. package/src/dtos/create-dashboard-question.dto.ts +0 -62
  983. package/src/dtos/create-dashboard-variable.dto.ts +0 -60
  984. package/src/dtos/create-dashboard.dto.ts +0 -61
  985. package/src/dtos/dashboard-variable-selection-dynamic-query.dto.ts +0 -29
  986. package/src/dtos/invoke-ai-prompt.dto.ts +0 -10
  987. package/src/dtos/update-ai-interaction.dto.ts +0 -93
  988. package/src/dtos/update-dashboard-layout.dto.ts +0 -30
  989. package/src/dtos/update-dashboard-question-sql-dataset-config.dto.ts +0 -49
  990. package/src/dtos/update-dashboard-question.dto.ts +0 -67
  991. package/src/dtos/update-dashboard-variable.dto.ts +0 -58
  992. package/src/dtos/update-dashboard.dto.ts +0 -65
  993. package/src/entities/ai-interaction.entity.ts +0 -71
  994. package/src/entities/dashboard-layout.entity.ts +0 -18
  995. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +0 -37
  996. package/src/entities/dashboard-question.entity.ts +0 -46
  997. package/src/entities/dashboard-variable.entity.ts +0 -44
  998. package/src/entities/dashboard.entity.ts +0 -36
  999. package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +0 -22
  1000. package/src/jobs/database/trigger-mcp-client-queue-options.ts +0 -9
  1001. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +0 -311
  1002. package/src/jobs/rabbitmq/trigger-mcp-client-publisher.service.ts +0 -22
  1003. package/src/jobs/rabbitmq/trigger-mcp-client-queue-options.ts +0 -9
  1004. package/src/jobs/rabbitmq/trigger-mcp-client-subscriber.service.ts +0 -104
  1005. package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +0 -23
  1006. package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +0 -9
  1007. package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +0 -98
  1008. package/src/mappers/dashboard-mapper.ts +0 -53
  1009. package/src/repository/ai-interaction.repository.ts +0 -17
  1010. package/src/repository/dashboard-layout.repository.ts +0 -17
  1011. package/src/repository/dashboard-question-sql-dataset-config.repository.ts +0 -17
  1012. package/src/repository/dashboard-question.repository.ts +0 -17
  1013. package/src/repository/dashboard-variable.repository.ts +0 -17
  1014. package/src/repository/dashboard.repository.ts +0 -101
  1015. package/src/services/ai-interaction.service.ts +0 -239
  1016. package/src/services/dashboard-layout.service.ts +0 -111
  1017. package/src/services/dashboard-question-sql-dataset-config.service.ts +0 -25
  1018. package/src/services/dashboard-question.service.ts +0 -150
  1019. package/src/services/dashboard-selection-providers/dashboard-variable-sql-dynamic-provider.service.ts +0 -56
  1020. package/src/services/dashboard-selection-providers/dashboard-variable-test-dynamic-provider.service.ts +0 -37
  1021. package/src/services/dashboard-variable.service.ts +0 -27
  1022. package/src/services/dashboard.service.ts +0 -148
  1023. package/src/services/database/database-bootstrap.service.ts +0 -91
  1024. package/src/services/genai/ingest-metadata.service.ts +0 -798
  1025. package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +0 -33
  1026. package/src/services/genai/mcp-handlers/solid-add-question-to-dashboard-mcp-handler.service.ts +0 -43
  1027. package/src/services/genai/mcp-handlers/solid-add-variable-to-dashboard-mcp-handler.service.ts +0 -44
  1028. package/src/services/genai/mcp-handlers/solid-create-dashboard-mcp-handler.service.ts +0 -114
  1029. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-mcp-handler.service.ts +0 -38
  1030. package/src/services/genai/mcp-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-handler.service.ts +0 -40
  1031. package/src/services/genai/mcp-handlers/solid-create-dashboard-widget-mcp-handler.service.ts +0 -39
  1032. package/src/services/genai/r2r-helper.service.ts +0 -37
  1033. package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +0 -121
  1034. package/src/services/question-data-providers/helpers.ts +0 -30
  1035. package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +0 -74
  1036. package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +0 -115
  1037. package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +0 -44
  1038. package/src/services/selection-providers/list-of-dashboard-variable-providers-selection-provider.service.ts +0 -41
  1039. package/src/services/sql-expression-resolver.service.ts +0 -140
  1040. package/src/subscribers/dashboard-question-sql-dataset-config.subscriber.ts +0 -61
  1041. package/src/subscribers/dashboard-question.subscriber.ts +0 -62
  1042. package/src/subscribers/dashboard-variable.subscriber.ts +0 -63
  1043. package/src/subscribers/dashboard.subscriber.ts +0 -62
@@ -1 +1 @@
1
- {"version":3,"file":"model-metadata.service.js","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { InjectDataSource } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport * as path from 'path';\nimport { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ModuleMetadata } from '../entities/module-metadata.entity';\n\nimport { kebabCase } from 'lodash';\nimport { classify } from '../helpers/string.helper';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';\nimport { SolidFieldType } from 'src/dtos/create-field-metadata.dto';\nimport { PermissionMetadata } from 'src/entities/permission-metadata.entity';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';\nimport { ActionMetadata } from '../entities/action-metadata.entity';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { MenuItemMetadata } from '../entities/menu-item-metadata.entity';\nimport { ViewMetadata } from '../entities/view-metadata.entity';\nimport {\n REFRESH_MODEL_COMMAND,\n REMOVE_FIELDS_COMMAND,\n SchematicService\n} from '../helpers/schematic.service';\nimport { CodeGenerationOptions } from '../interfaces';\nimport { CrudHelperService } from './crud-helper.service';\nimport { FieldMetadataService } from './field-metadata.service';\nimport { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';\nimport { RoleMetadataService } from './role-metadata.service';\nimport { NavigationDto } from 'src/dtos/navigation.dto';\nimport { SolidIntrospectService } from './solid-introspect.service';\nimport { CRUDService } from './crud.service';\nimport { SolidTsMorphService } from './solid-ts-morph.service';\n\n@Injectable()\nexport class ModelMetadataService {\n private logger = new Logger('ModelMetadataService');\n constructor(\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n private readonly schematicService: SchematicService,\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly crudHelperService: CrudHelperService,\n private readonly mediaStorageProviderMetadataService: MediaStorageProviderMetadataService,\n private readonly fieldMetadataService: FieldMetadataService,\n private readonly roleService: RoleMetadataService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly introspectService: SolidIntrospectService,\n private readonly solidTsMorphService: SolidTsMorphService,\n\n // No longer used.\n // private readonly generateCodePublihser: GenerateCodePublisherDatabase,\n ) { }\n\n async find(basicFilterDto: BasicFilterDto) {\n return this.findMany(basicFilterDto);\n }\n\n async findMany(basicFilterDto: BasicFilterDto) {\n const alias = 'modelMetadata';\n // Extract the required keys from the input query\n let { limit, offset } = basicFilterDto;\n\n // Create above query on pincode table using query builder\n var qb: SelectQueryBuilder<ModelMetadata> = await this.modelMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)\n qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);\n\n // Get the records and the count\n const [entities, count] = await qb.getManyAndCount();\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n const r = {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n return r\n }\n\n async findOne(id: any, query?: any) {\n // const { fields, filters, populate } = basicFilterDto;\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query?.populate, //FIXME: Check with jenender and change to relations to avoid confusion\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(`#${id}`));\n }\n return entity;\n }\n\n async findOneBySingularName(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async findOneByUserKey(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async create(createDto: CreateModelMetadataDto) {\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.createInDB(manager, createDto);\n await this.createInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n return model\n });\n } catch (error: any) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n // Iterate through the fields in the createDto & get all the relation fields which have create inverse as true\n private async handleInverseRelationFieldsUpdates(model: ModelMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n const fields: FieldMetadata[] = await this.getRelationInverseFields(model.id, fieldRepository);\n\n // Call a function which will iterate through each field and create an inverse field entry for the respective model i.e call updateInverseField on the related model\n for (const field of fields) {\n await this.fieldMetadataService.updateInverseField(field, fieldRepository, modelRepository);\n }\n }\n\n async update(id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n //To DO start the transaction \n // call create In db\n // call createInfile\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.updateInDb(manager, id, updateModelMetaDataDto)\n await this.updateInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n // return model\n });\n } catch (error: any) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n async createInDB(manager: EntityManager, createDto: CreateModelMetadataDto) {\n\n //Save the model\n const resolvedModule = await this.dataSource\n .getRepository(ModuleMetadata)\n .findOne({\n where: {\n id: createDto['moduleId'],\n },\n relations: {},\n });\n createDto['module'] = resolvedModule;\n\n if (createDto['parentModelId']) {\n const resolvedParentModel = await this.dataSource\n .getRepository(ModelMetadata)\n .findOne({\n where: {\n id: createDto['parentModelId'],\n },\n relations: {},\n });\n createDto['parentModel'] = resolvedParentModel;\n }\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = createDto;\n const modelMetadata = this.modelMetadataRepo.create(modelMetaDataWithoutFields);\n let model = await manager.save(modelMetadata);\n\n // iterate over all fields and upsert. \n let userKeyField = null;\n const listViewLayout = [];\n const formViewLayout = [];\n const treeViewLayout = [];\n\n for (let k = 0; k < fieldsMetadata.length; k++) {\n const fieldMetadata = fieldsMetadata[k];\n\n // TODO: resolve model & mediaStorageProvider. \n fieldMetadata['model'] = model;\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n // console.log(fieldMetadata.displayName);\n // this.logger.debug(fieldMetadata.displayName);\n\n const fieldMetadataObject = this.fieldMetadataRepo.create(fieldMetadata);\n const affectedField = await manager.save(fieldMetadataObject);\n\n if (fieldMetadata.isUserKey) {\n userKeyField = affectedField;\n }\n listViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n formViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n treeViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n\n }\n\n // Now that we have created fields & model update the model to stamp the userKeyField. \n if (userKeyField) {\n modelMetaDataWithoutFields['userKeyField'] = userKeyField;\n const updatedModelMetadataDto = this.modelMetadataRepo.merge(model, modelMetaDataWithoutFields);\n model = await manager.save(updatedModelMetadataDto);\n }\n\n return model;\n }\n\n async createInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n isLegacyTable: model?.isLegacyTable,\n isLegacyTableWithId: model?.isLegacyTableWithId,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n modelMetaData.fields.push(fieldObject);\n }\n // Update the `models` array\n metaData.moduleMetadata.models.push(modelMetaData);\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error: any) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async updateInDb(manager: EntityManager, id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = updateModelMetaDataDto;\n const modelRepo = manager.getRepository(ModelMetadata);\n const fieldRepo = manager.getRepository(FieldMetadata);\n // 1. Update the model metadata without fields\n let existingModel = await modelRepo.findOne({\n where: {\n singularName: updateModelMetaDataDto.singularName\n },\n relations: [\"fields\", \"module\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n if (!existingModel) {\n throw new Error(ERROR_MESSAGES.MODEL_NOT_FOUND(updateModelMetaDataDto.singularName));\n }\n\n const updatedModel = modelRepo.merge(existingModel, modelMetaDataWithoutFields);\n await modelRepo.save(updatedModel);\n\n const existingFields = existingModel.fields || [];\n const existingFieldIds = existingFields.map((field) => field.id);\n\n // 2. Synchronize fields\n // const userKeyFieldName = updateModelMetaDataDto.userKeyFieldUserKey;\n let userKeyField = null;\n\n const fieldsToSave: FieldMetadata[] = [];\n const fieldsToDelete: FieldMetadata[] = [];\n\n for (const fieldMetadata of fieldsMetadata) {\n if (fieldMetadata.id) {\n // Existing field\n const existingField = existingFields.find((field) => field.id === fieldMetadata.id);\n if (existingField) {\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n Object.assign(existingField, fieldMetadata);\n fieldsToSave.push(existingField);\n }\n } else {\n // New field\n fieldMetadata['model'] = updatedModel;\n\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n const createdField = fieldRepo.create(fieldMetadata);\n fieldsToSave.push(createdField);\n }\n\n // Check for userKeyField\n // if (fieldMetadata.isUserKey) {\n // userKeyField = fieldMetadata;\n // }\n }\n\n // Fields to delete (not in the payload)\n fieldsToDelete.push(...existingFields.filter((field) => !fieldsMetadata.some((f) => f.id === field.id)));\n\n // Save and remove fields\n if (fieldsToSave.length > 0) {\n await fieldRepo.save(fieldsToSave);\n }\n if (fieldsToDelete.length > 0) {\n fieldsToDelete.forEach(field => { field.isMarkedForRemoval = true })\n await fieldRepo.save(fieldsToDelete);\n\n // await this.fieldMetadataRepo.remove(fieldsToDelete);\n }\n\n const finalModel = await modelRepo.findOne({\n where: { id: updatedModel.id },\n relations: [\"fields\", \"userKeyField\"]\n });\n\n // 3. Update model with userKeyField if specified\n const userKeyFields = fieldsMetadata.filter(field => field.isUserKey);\n\n if (userKeyFields.length > 0) {\n const newUserKeyField = userKeyFields[userKeyFields.length - 1];\n const savedUserKeyField = await fieldRepo.findOne({ where: { id: newUserKeyField.id } });\n\n if (savedUserKeyField) {\n finalModel.userKeyField = savedUserKeyField;\n await modelRepo.save(finalModel);\n }\n\n const otherUserKeyFields = userKeyFields.filter(field => field.id !== newUserKeyField.id);\n\n for (const field of otherUserKeyFields) {\n const existingField = await fieldRepo.findOne({ where: { id: field.id } });\n if (existingField) {\n existingField.isUserKey = false;\n await fieldRepo.save(existingField);\n }\n }\n } else {\n if (finalModel.userKeyField) {\n finalModel.userKeyField = null;\n await modelRepo.save(finalModel);\n }\n }\n\n return updatedModel;\n\n }\n\n async updateInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n order: {\n fields: {\n id: \"ASC\",\n },\n },\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (!field.isSystem) {\n\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = true;\n }\n modelMetaData.fields.push(fieldObject);\n }\n }\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelMetaData.singularName\n );\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error: any) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async upsert(updateDto: UpdateModelMetaDataDto) {\n // First check if module already exists using name\n const existingModelMetadata = await this.modelMetadataRepo.findOne({\n where: {\n singularName: updateDto.singularName\n }\n })\n\n // if found\n if (existingModelMetadata) {\n const updatedModelMetadata = { ...existingModelMetadata, ...updateDto };\n const updatedModel = await this.modelMetadataRepo.save(updatedModelMetadata);\n return updatedModel\n }\n // if not found - create new \n else {\n const modelMetadata = this.modelMetadataRepo.create(updateDto);\n return this.modelMetadataRepo.save(modelMetadata);\n }\n }\n\n async removeBySingularName(singularName: string) {\n try {\n const entity = await this.findOneBySingularName(singularName);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r;\n } catch (error: any) {\n }\n }\n\n async deleteMany(ids: number[]): Promise<any> {\n if (!ids || ids.length === 0) {\n throw new Error(ERROR_MESSAGES.DELETE_IDS_REQUIRED);\n }\n const removedEntities = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n //@ts-ignore\n id: id,\n }\n });\n // if (!entity) {\n // throw new Error(`Entity with id ${ id } not found`);\n // }\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n removedEntities.push(r);\n }\n\n return removedEntities\n }\n\n @DisallowInProduction()\n async remove(id: number) {\n const entity = await this.findOne(id);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r\n }\n\n async cleanupOnDelete(modelEntityId: number) {\n const modelEntity = await this.modelMetadataRepo.findOne({\n where: {\n // @ts-ignore\n id: modelEntityId,\n },\n relations: ['module']\n });\n\n if (!modelEntity) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata`);\n return;\n }\n if (modelEntity.id !== modelEntityId) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata id ${modelEntity.id} not matching with the one passed as argument ${modelEntityId}`);\n return;\n }\n\n this.logger.log(`Cleaning up for model: ${modelEntity.singularName} belonging to module: ${modelEntity.module?.name}`);\n\n const modulePath = await this.moduleMetadataHelperService.getModulePath(modelEntity.module?.name);\n if (modulePath) {\n // /Users/harishpatel/Code/javascript/school-fees-portal/solid-api/src/solid-core\n this.logger.log(`Module path: ${modulePath}`);\n\n const filesToDelete = [];\n // <singularName>.entity.ts | The TypeORM model that needs to be deleted. | Automatic\n const entityFilePath = `${modulePath}/entities/${kebabCase(modelEntity.singularName)}.entity.ts`;\n filesToDelete.push(entityFilePath);\n this.logger.log(`About to delete entity file path: ${entityFilePath}`);\n\n // <singularName>.create.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const createDtoFilePath = `${modulePath}/dtos/create-${kebabCase(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(createDtoFilePath);\n this.logger.log(`About to delete create DTO file path: ${createDtoFilePath}`);\n\n // <singularName>.update.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const updateDtoFilePath = `${modulePath}/dtos/update-${kebabCase(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(updateDtoFilePath);\n this.logger.log(`About to delete update DTO file path: ${updateDtoFilePath}`);\n\n // <singularName>.repository.ts | The TypeORM model that needs to be deleted. | Automatic\n const repositoryFilePath = `${modulePath}/repositories/${kebabCase(modelEntity.singularName)}.repository.ts`;\n filesToDelete.push(repositoryFilePath);\n this.logger.log(`About to delete repository file path: ${repositoryFilePath}`);\n\n // <singularName>.service.ts | The TypeORM model that needs to be deleted. | Automatic\n const serviceFilePath = `${modulePath}/services/${kebabCase(modelEntity.singularName)}.service.ts`;\n filesToDelete.push(serviceFilePath);\n this.logger.log(`About to delete service file path: ${serviceFilePath}`);\n\n // <singularName>.controller.ts | The TypeORM model that needs to be deleted. | Automatic\n const controllerFilePath = `${modulePath}/controllers/${kebabCase(modelEntity.singularName)}.controller.ts`;\n filesToDelete.push(controllerFilePath);\n this.logger.log(`About to delete controller file path: ${controllerFilePath}`);\n\n for (let i = 0; i < filesToDelete.length; i++) {\n const fileToDelete = filesToDelete[i];\n try {\n await fs.unlink(fileToDelete);\n this.logger.log(`Deleted file: ${fileToDelete}`);\n } catch (error: any) {\n this.logger.error(`Error deleting file: ${fileToDelete}`, error);\n }\n }\n }\n\n await this.dataSource.query(\n `CALL cleanup_model_metadata($1, $2)`,\n [modelEntity.singularName, true],\n );\n\n // Delete the permissions, menu, actions & views related to this model.\n // const controllerName = `${classify(modelEntity.singularName)}Controller`;\n // const permissionNames = [\n // `${controllerName}.delete`,\n // `${controllerName}.deleteMany`,\n // `${controllerName}.findOne`,\n // `${controllerName}.findMany`,\n // `${controllerName}.recover`,\n // `${controllerName}.recoverMany`,\n // `${controllerName}.partialUpdate`,\n // `${controllerName}.update`,\n // `${controllerName}.insertMany`,\n // `${controllerName}.create`,\n // ];\n // const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);\n // const permissionsToDelete = await permissionsRepo.find({\n // where: { name: In(permissionNames) },\n // relations: ['roles'],\n // });\n\n // Remove role associations first\n // for (const permission of permissionsToDelete) {\n // if (permission.roles?.length) {\n // await this.dataSource\n // .createQueryBuilder()\n // .relation(PermissionMetadata, 'roles')\n // .of(permission) // permission instance or its ID\n // .remove(permission.roles); // remove all linked roles\n // }\n // }\n\n // await permissionsRepo.remove(permissionsToDelete);\n\n // Delete actions\n // const actionRepo = this.dataSource.getRepository(ActionMetadata);\n // const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });\n // await actionRepo.delete({ model: { id: modelEntity.id } });\n\n // // Delete menu items\n // const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);\n // if (action) {\n // const menuItems = await menuItemRepo.find({ where: { action: { id: action.id } } });\n // for (let i = 0; i < menuItems.length; i++) {\n // const menuItem = menuItems[i];\n // await menuItemRepo.remove(menuItem);\n // }\n // }\n\n // Delete view \n // const viewRepo = this.dataSource.getRepository(ViewMetadata);\n // await viewRepo.delete({ model: { id: modelEntity.id } })\n\n // <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module?.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n if (metaData) {\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelEntity.singularName\n );\n\n // Remove the model to be deleted from the metadata\n if (existingModelIndex !== -1) {\n metaData.moduleMetadata.models.splice(existingModelIndex, 1);\n }\n\n // Remove references to this model in the menu, action & view sections.\n metaData.moduleMetadata.menus = metaData.moduleMetadata?.menus?.filter(\n (menu: any) => menu.modelUserKey !== modelEntity.singularName\n );\n metaData.moduleMetadata.actions = metaData.moduleMetadata?.actions?.filter(\n (action: any) => action.modelUserKey !== modelEntity.singularName\n );\n metaData.moduleMetadata.views = metaData.moduleMetadata?.views?.filter(\n (view: any) => view.modelUserKey !== modelEntity.singularName\n );\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n\n // <moduleName>.module.ts | Remove all references and imports of the deleted model files. | Automatic\n if (modulePath) {\n const moduleFilePath = path.resolve(modulePath, `${kebabCase(modelEntity.module?.name)}.module.ts`);\n this.logger.log(`Removing model '${modelEntity.singularName}' references from module file: ${moduleFilePath}`);\n try {\n this.solidTsMorphService.begin();\n const modelPathSegment = `/${kebabCase(modelEntity.singularName)}.`;\n const { removedIdentifiers } = this.solidTsMorphService.removeImports(\n moduleFilePath,\n spec => spec.includes(modelPathSegment)\n );\n this.solidTsMorphService.removeModuleMembers(moduleFilePath, removedIdentifiers);\n await this.solidTsMorphService.commit();\n } catch (error: any) {\n this.solidTsMorphService.rollback();\n this.logger.error(`Failed to clean up module file for model '${modelEntity.singularName}':`, error);\n }\n }\n\n // - | Drop database table | Removes the database table from the DB, this is a very risky step. Best to review all relations to other models etc and then do this manually | Manual (X)\n\n }\n\n @DisallowInProduction()\n async handleGenerateCode(options: CodeGenerationOptions): Promise<any> {\n const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];\n\n // Generate the code for the passed model\n const { model, removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(options);\n affectedModelIds.push(model.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n\n // Generate the code for models which are linked to fields having an inverse relation\n await this.generateCodeForInverseModels(model, options, affectedModelIds, refreshModelCodeOutputLines, removeFieldCodeOutputLines);\n\n // Generate the VAM config for all the affected models\n for (const modelId of affectedModelIds) {\n await this.generateVAMConfig(modelId);\n }\n\n // Return the aggregated code output\n return `${removeFieldCodeOutputLines.join('\\n')} \\n ${refreshModelCodeOutputLines.join('\\n')}`;\n }\n\n private async generateCodeForInverseModels(model: ModelMetadata, options: CodeGenerationOptions, affectedModelIds: any[], refreshModelCodeOutputLines: any[], removeFieldCodeOutputLines: any[]) {\n const coModelSingularNames = model.fields.\n filter(field => field.type === SolidFieldType.relation && field.relationCreateInverse === true)\n .map(field => field.relationCoModelSingularName);\n\n for (const singularName of coModelSingularNames) {\n const coModel = await this.findOneBySingularName(singularName);\n const inverseOptions: CodeGenerationOptions = {\n modelId: coModel.id,\n dryRun: options.dryRun\n };\n const { removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(inverseOptions);\n affectedModelIds.push(coModel.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n }\n }\n\n // Generate the View, Action and Menu configuration for the model\n async generateVAMConfig(modelId: number) {\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const model = await modelRepository.findOne({\n where: {\n id: modelId\n },\n relations: [\"fields\", \"module\"]\n });\n await this.populateVAMConfigInDb(model);\n await this.populateVAMConfigInFile(model);\n });\n } catch (error: any) {\n this.logger.error('generateVAMConfig Transaction failed:', error);\n throw error;\n }\n }\n\n private async populateVAMConfigInFile(model: ModelMetadata) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const listViewLayoutFields = [{ type: \"field\", attrs: { name: `id` } }];\n const treeViewLayoutFields = [{ type: \"field\", attrs: { name: `id` } }];\n const formViewLayoutFields = [];\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n listViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n formViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n treeViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n }\n this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData);\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error: any) {\n // console.error('File creation failed:', error);\n this.logger.error('File updation failed for View, action, menus config:', error);\n throw new Error('File updation failed for View, action, menus config'); // Trigger rollback\n }\n }\n\n // Populate the View, Actions and Menus in the config file\n private populateVAMConfigInFileInternal(formViewLayoutFields: any[], model: ModelMetadata, listViewLayoutFields: { type: string; attrs: { name: string; }; }[], treeViewLayoutFields: { type: string; attrs: { name: string; }; }[], metaData: any) {\n const column1Fields = [];\n // const column2Fields = [];\n\n // Distribute fields between two columns\n for (let i = 0; i < formViewLayoutFields.length; i++) {\n // if (i % 2 === 0) {\n column1Fields.push(formViewLayoutFields[i]);\n // } else {\n // column2Fields.push(formViewLayoutFields[i]);\n // }\n }\n const actionName = `${model.singularName}-list-action`;\n const treeViewActionName = `${model.singularName}-tree-action`;\n const listViewName = `${model.singularName}-list-view`;\n const treeViewName = `${model.singularName}-tree-view`;\n const formViewName = `${model.singularName}-form-view`;\n const menuName = `${model.singularName}-menu-item`;\n const nextMenuSequenceNumber = (metaData.menus?.length ?? 0) + 1;\n\n const action = {\n displayName: `${model.displayName} List Action`,\n name: actionName,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n viewUserKey: listViewName,\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`\n };\n\n const treeViewAction = {\n displayName: `${model.displayName} Tree View Action`,\n name: treeViewActionName,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n viewUserKey: treeViewName,\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`\n };\n\n const menu = {\n displayName: `${model.displayName}`,\n name: menuName,\n sequenceNumber: nextMenuSequenceNumber,\n actionUserKey: actionName,\n moduleUserKey: `${model.module.name}`,\n parentMenuItemUserKey: \"\",\n iconName: \"\"\n };\n\n const modelListview = {\n name: listViewName,\n displayName: `${model.displayName}`,\n type: \"list\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [\n 10,\n 25,\n 50\n ],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayoutFields\n }\n };\n\n const modelTreeview = {\n name: treeViewName,\n displayName: `${model.displayName}`,\n type: \"tree\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"tree\",\n attrs: {\n pagination: true,\n pageSizeOptions: [\n 10,\n 25,\n 50\n ],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: treeViewLayoutFields\n }\n };\n\n const modelFormView = {\n name: formViewName,\n displayName: `${model.displayName}`,\n type: \"form\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: column1Fields\n },\n // {\n // type: \"column\",\n // attrs: { name: \"group-2\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n // children: column2Fields\n // }\n ]\n },\n ]\n }\n ]\n }\n };\n\n // Utility function to check if an item with the same name already exists\n const notExists = (arr: any[], name: string) => !arr.some(item => item.name === name);\n\n if (notExists(metaData.menus, menuName)) {\n metaData.menus.push(menu);\n }\n\n if (notExists(metaData.actions, actionName)) {\n metaData.actions.push(action);\n }\n\n if (notExists(metaData.actions, treeViewActionName)) {\n metaData.actions.push(treeViewAction);\n }\n\n if (notExists(metaData.views, listViewName)) {\n metaData.views.push(modelListview);\n }\n\n if (notExists(metaData.views, treeViewName)) {\n metaData.views.push(modelTreeview);\n }\n\n if (notExists(metaData.views, formViewName)) {\n metaData.views.push(modelFormView);\n }\n // metaData.menus.push(menu);\n // metaData.actions.push(action);\n // metaData.views.push(modelListview);\n // metaData.views.push(modelFormView);\n }\n\n //Populate the View, Actions and Menus in the database\n private async populateVAMConfigInDb(model: ModelMetadata) {\n const jsonFieldsList = model.fields.filter((field: FieldMetadata) => field.isSystem !== true);\n\n const listViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`,\n isSearchable: true,\n }\n }));\n\n const treeViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`,\n isSearchable: true,\n }\n }));\n\n const formViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`\n }\n }));\n\n const midIndex = Math.ceil(formViewLayout.length / 2);\n const firstHalf = formViewLayout.slice(0, midIndex);\n const secondHalf = formViewLayout.slice(midIndex);\n\n const resolvedModule = await this.dataSource.getRepository(ModuleMetadata).findOne({\n where: { id: model.module.id }\n });\n\n const viewRepo = this.dataSource.getRepository(ViewMetadata);\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n\n const modelViews = [\n {\n name: `${model.singularName}-list-view`,\n displayName: `${model.displayName}`,\n type: 'list',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [10, 25, 50],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayout\n }, null, 3)\n },\n {\n name: `${model.singularName}-tree-view`,\n displayName: `${model.displayName}`,\n type: 'tree',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"tree\",\n attrs: {\n pagination: true,\n pageSizeOptions: [10, 25, 50],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: treeViewLayout\n }, null, 3)\n },\n {\n name: `${model.singularName}-form-view`,\n displayName: `${model.displayName}`,\n type: 'form',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"group-1\", label: \"\", className: \"\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: firstHalf\n },\n {\n type: \"column\",\n attrs: { name: \"group-2\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: secondHalf\n }\n ]\n }\n ]\n }\n ]\n }, null, 3)\n }\n ];\n\n for (const view of modelViews) {\n const existingView = await viewRepo.findOne({ where: { name: view.name } });\n\n if (!existingView) {\n const createdView = viewRepo.create(view);\n await viewRepo.save(createdView);\n }\n }\n\n let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });\n let treeView = await viewRepo.findOne({ where: { name: `${model.singularName}-tree-view` } });\n\n const actionData = {\n displayName: `${model.displayName} List Action`,\n name: `${model.singularName}-list-action`,\n type: \"solid\",\n domain: \"\" as any,\n context: \"\" as any,\n customComponent: \"\",\n customIsModal: true,\n serverEndpoint: \"\",\n view: view,\n module: resolvedModule,\n model: model\n };\n\n const treeViewActionData = {\n displayName: `${model.displayName} Tree View Action`,\n name: `${model.singularName}-tree-view-action`,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n view: treeView,\n module: resolvedModule,\n model: model\n };\n\n let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });\n let existingTreeViewAction = await actionRepo.findOne({ where: { name: treeViewActionData.name } });\n\n if (!existingAction) {\n const createdAction = actionRepo.create(actionData);\n existingAction = await actionRepo.save(createdAction);\n }\n\n if (!existingTreeViewAction) {\n const createdTreeViewAction = actionRepo.create(treeViewActionData);\n existingTreeViewAction = await actionRepo.save(createdTreeViewAction);\n }\n\n const adminRole = await this.roleService.findRoleByName('Admin');\n\n const menuData = {\n displayName: `${model.displayName}`,\n name: `${model.singularName}-menu-item`,\n sequenceNumber: 1,\n action: existingAction,\n module: resolvedModule,\n roles: [adminRole],\n parentMenuItemUserKey: \"\"\n };\n\n let existingMenu = await menuRepo.findOne({ where: { name: menuData.name } });\n\n if (!existingMenu) {\n const createdMenu = menuRepo.create(menuData);\n await menuRepo.save(createdMenu);\n }\n }\n\n async generateCode(options: CodeGenerationOptions) {\n const query = {\n populate: [\"module\", \"fields\"]\n };\n\n const model = options.modelId\n ? await this.findOne(options.modelId, query)\n : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n options.fieldIdsForRemoval = model.fields\n .filter(field => field.isMarkedForRemoval)\n .map(field => field.id);\n\n const refreshModelCodeOutput = await this.generateModelCode(options);\n const removeFieldCodeOuput = await this.generateRemoveFieldsCode(options);\n return { model, removeFieldCodeOuput, refreshModelCodeOutput };\n }\n\n async generateRemoveFieldsCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n if (!options.fieldIdsForRemoval || options.fieldIdsForRemoval.length === 0) {\n return \"\";\n }\n\n const query = {\n populate: [\"module\", \"fields\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n //Filter out the fields by id\n const fieldsForRemoval = model.fields.filter((field) => options.fieldIdsForRemoval.includes(+field.id));\n const removeOutput = await this.executeRemoveFieldsCommand(model, fieldsForRemoval, options.dryRun);\n\n // Remove the fields from the database as well. This also checks, if the field is marked for removal\n fieldsForRemoval.forEach((field: FieldMetadata) => {\n if (field.isMarkedForRemoval) {\n this.fieldMetadataService.delete(field.id);\n }\n });\n\n // Remove the fields from metadata json file \n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === model.singularName\n );\n\n const modelMetaData = metaData.moduleMetadata.models[existingModelIndex];\n\n // Remove fields marked for removal from modelMetaData.fields\n modelMetaData.fields = modelMetaData.fields.filter((field: any) => field.isMarkedForRemoval !== true);\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n return removeOutput;\n }\n\n async generateModelCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n const query = {\n populate: [\"module\", \"fields\", \"parentModel\", \"parentModel.module\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n let fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);\n\n // If a list of field ids or field names is passed for refresh, use these fields only\n if (options.fieldIdsForRefresh && options.fieldIdsForRefresh.length > 0) {\n fieldsForRefresh = fieldsForRefresh.filter((field) => options.fieldIdsForRefresh.includes(+field.id));\n } else if (options.fieldNamesForRefresh && options.fieldNamesForRefresh.length > 0) {\n fieldsForRefresh = fieldsForRefresh.filter((field) => options.fieldNamesForRefresh.includes(field.name));\n }\n // const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);\n\n //Execute the schematic command to refresh the model\n const refreshOuput = await this.executeRefreshModelCommand(model, fieldsForRefresh, options.dryRun);\n\n return `${refreshOuput}`;\n }\n\n private async executeRefreshModelCommand(model: ModelMetadata, fieldsForRefresh: FieldMetadata[], dryRun: boolean = false): Promise<string> {\n // const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);\n const output = await this.schematicService.executeSchematicCommand(\n REFRESH_MODEL_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n },\n dryRun\n );\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n private async executeRemoveFieldsCommand(model: ModelMetadata, fieldsForRemoval: FieldMetadata[], dryRun: boolean = false): Promise<string> {\n if (!fieldsForRemoval || fieldsForRemoval.length === 0) {\n return \"\";\n }\n const output = await this.schematicService.executeSchematicCommand(\n REMOVE_FIELDS_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n fieldNamesForRemoval: fieldsForRemoval.map(field => field.name),\n },\n dryRun\n );\n\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n async updateUserKey(data: any) {\n const { modelName, fieldName } = data;\n\n const model = await this.modelMetadataRepo.findOne({\n where: { singularName: modelName },\n relations: ['fields', 'userKeyField'],\n });\n\n if (!model) {\n throw new Error(`Model with name ${modelName} not found`);\n }\n\n if (model.userKeyField) {\n throw new Error(`User key is already set to ${model.userKeyField.name}. No changes were made.`);\n }\n\n const fieldToUpdate = model.fields.find(field => field.name === fieldName);\n if (!fieldToUpdate) {\n throw new Error(`Field with name ${fieldName} not found in model ${modelName}`);\n }\n\n fieldToUpdate.isUserKey = true;\n\n model.userKeyField = fieldToUpdate;\n\n await this.modelMetadataRepo.save(model);\n\n return {\n message: `User key has been successfully updated to ${fieldName}.`,\n success: true\n };\n }\n\n private async getRelationInverseFields(modelId: number, repo: Repository<FieldMetadata>): Promise<FieldMetadata[]> {\n return await repo.find({\n where: {\n model: {\n id: modelId\n },\n type: SolidFieldType.relation,\n relationCreateInverse: true\n },\n relations: {\n model: {\n module: true\n }\n }\n });\n }\n\n async navigation(navigationDto: NavigationDto) {\n const { recordId, modelName, ...basicFilterDto } = navigationDto;\n\n const modelServiceInstanceWrapper =\n this.introspectService.getProvider(`${classify(modelName)}Service`);\n\n if (!modelServiceInstanceWrapper) {\n throw new BadRequestException(\n `Invalid model name (${modelName}) specified in Navigation.`,\n );\n }\n\n const modelService: CRUDService<any> = modelServiceInstanceWrapper.instance;\n\n const recs = await modelService.find(basicFilterDto);\n\n // navigation only works for paginated results\n if (!('records' in recs) || !('currentPage' in recs.meta)) {\n return {\n prev: null,\n next: null,\n meta: null,\n };\n }\n\n const { records, meta } = recs;\n\n // --------------------\n // Find record index in page\n // --------------------\n const index = records.findIndex(r => String(r.id) === String(recordId));\n\n if (index === -1) {\n throw new BadRequestException(`Record not found in current page`);\n }\n\n // --------------------\n // Pagination calculations\n // --------------------\n const limit = meta.perPage;\n const currentOffset = (meta.currentPage - 1) * meta.perPage;\n const currentIndexGlobal = currentOffset + index + 1;\n\n let prev: { record: any; offset: number; limit: number } | null = null;\n let next: { record: any; offset: number; limit: number } | null = null;\n\n // --------------------\n // PREV\n // --------------------\n if (index > 0) {\n prev = {\n record: records[index - 1],\n offset: currentOffset,\n limit,\n };\n } else if (meta.prevPage !== null) {\n const prevOffset = (meta.prevPage - 1) * meta.perPage;\n\n const prevPage = await modelService.find({\n ...basicFilterDto,\n offset: prevOffset,\n limit,\n });\n\n if ('records' in prevPage) {\n const record = prevPage.records.at(-1) ?? null;\n if (record) {\n prev = {\n record,\n offset: prevOffset,\n limit,\n };\n }\n }\n }\n\n // --------------------\n // NEXT\n // --------------------\n if (index < records.length - 1) {\n next = {\n record: records[index + 1],\n offset: currentOffset,\n limit,\n };\n } else if (meta.nextPage !== null) {\n const nextOffset = (meta.nextPage - 1) * meta.perPage;\n\n const nextPage = await modelService.find({\n ...basicFilterDto,\n offset: nextOffset,\n limit,\n });\n\n if ('records' in nextPage) {\n const record = nextPage.records[0] ?? null;\n if (record) {\n next = {\n record,\n offset: nextOffset,\n limit,\n };\n }\n }\n }\n\n // --------------------\n // RESPONSE\n // --------------------\n return {\n prev: prev\n ? {\n recordId: prev.record.id,\n offset: prev.offset,\n limit: prev.limit,\n }\n : null,\n\n next: next\n ? {\n recordId: next.record.id,\n offset: next.offset,\n limit: next.limit,\n }\n : null,\n meta: {\n totalRecords: meta.totalRecords,\n perPage: meta.perPage,\n currentPage: meta.currentPage,\n totalPages: meta.totalPages,\n\n currentIndexInPage: index,\n currentIndexGlobal,\n\n hasPrev: !!prev,\n hasNext: !!next,\n\n prevPage: meta.prevPage,\n nextPage: meta.nextPage,\n },\n\n };\n }\n\n}\n"]}
1
+ {"version":3,"file":"model-metadata.service.js","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { InjectDataSource } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport * as path from 'path';\nimport { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ModuleMetadata } from '../entities/module-metadata.entity';\n\nimport { kebabCase } from 'lodash';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';\nimport { SolidFieldType } from 'src/dtos/create-field-metadata.dto';\nimport { NavigationDto } from 'src/dtos/navigation.dto';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';\nimport { ActionMetadata } from '../entities/action-metadata.entity';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { ImportTransactionErrorLog } from '../entities/import-transaction-error-log.entity';\nimport { ImportTransaction } from '../entities/import-transaction.entity';\nimport { MenuItemMetadata } from '../entities/menu-item-metadata.entity';\nimport { UserViewMetadata } from '../entities/user-view-metadata.entity';\nimport { PermissionMetadata } from '../entities/permission-metadata.entity';\nimport { ViewMetadata } from '../entities/view-metadata.entity';\nimport { CommandService } from '../helpers/command.service';\nimport {\n REFRESH_MODEL_COMMAND,\n REMOVE_FIELDS_COMMAND,\n SchematicService\n} from '../helpers/schematic.service';\nimport { classify } from '../helpers/string.helper';\nimport { CodeGenerationOptions } from '../interfaces';\nimport { CrudHelperService, FilterCombinator } from './crud-helper.service';\nimport { CRUDService } from './crud.service';\nimport { FieldMetadataService } from './field-metadata.service';\nimport { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';\nimport { RoleMetadataService } from './role-metadata.service';\nimport { SolidIntrospectService } from './solid-introspect.service';\nimport { SolidTsMorphService } from './solid-ts-morph.service';\n\n@Injectable()\nexport class ModelMetadataService {\n private logger = new Logger('ModelMetadataService');\n constructor(\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n private readonly schematicService: SchematicService,\n private readonly commandService: CommandService,\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly crudHelperService: CrudHelperService,\n private readonly mediaStorageProviderMetadataService: MediaStorageProviderMetadataService,\n private readonly fieldMetadataService: FieldMetadataService,\n private readonly roleService: RoleMetadataService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly introspectService: SolidIntrospectService,\n private readonly solidTsMorphService: SolidTsMorphService,\n\n // No longer used.\n // private readonly generateCodePublihser: GenerateCodePublisherDatabase,\n ) { }\n\n async find(basicFilterDto: BasicFilterDto) {\n return this.findMany(basicFilterDto);\n }\n\n async findMany(basicFilterDto: BasicFilterDto): Promise<any> {\n const alias = 'modelMetadata';\n const { limit, offset } = basicFilterDto;\n\n const qb: SelectQueryBuilder<ModelMetadata> = await this.modelMetadataRepo.createSecurityRuleAwareQueryBuilder(alias);\n\n if (basicFilterDto.groupBy?.length) {\n const groupFilterQb = this.crudHelperService.buildFilterQuery(\n qb, basicFilterDto, alias, undefined, undefined, undefined,\n FilterCombinator.AND, false, false\n );\n return this.crudHelperService.executeGroupPipeline(\n groupFilterQb, basicFilterDto, alias,\n () => this.modelMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)\n );\n }\n\n const filteredQb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);\n const [entities, count] = await filteredQb.getManyAndCount();\n return this.crudHelperService.pagedResponse(offset, limit, count, entities);\n }\n\n async findOne(id: any, query?: any) {\n // const { fields, filters, populate } = basicFilterDto;\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query?.populate, //FIXME: Check with jenender and change to relations to avoid confusion\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(`#${id}`));\n }\n return entity;\n }\n\n async findOneBySingularName(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async findOneByUserKey(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async create(createDto: CreateModelMetadataDto) {\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.createInDB(manager, createDto);\n await this.createInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n return model\n });\n } catch (error: any) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n // Iterate through the fields in the createDto & get all the relation fields which have create inverse as true\n private async handleInverseRelationFieldsUpdates(model: ModelMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n const fields: FieldMetadata[] = await this.getRelationInverseFields(model.id, fieldRepository);\n\n // Call a function which will iterate through each field and create an inverse field entry for the respective model i.e call updateInverseField on the related model\n for (const field of fields) {\n await this.fieldMetadataService.updateInverseField(field, fieldRepository, modelRepository);\n }\n }\n\n async update(id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n //To DO start the transaction \n // call create In db\n // call createInfile\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.updateInDb(manager, id, updateModelMetaDataDto)\n await this.updateInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n // return model\n });\n } catch (error: any) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n async createInDB(manager: EntityManager, createDto: CreateModelMetadataDto) {\n\n //Save the model\n const resolvedModule = await this.dataSource\n .getRepository(ModuleMetadata)\n .findOne({\n where: {\n id: createDto['moduleId'],\n },\n relations: {},\n });\n createDto['module'] = resolvedModule;\n\n if (createDto['parentModelId']) {\n const resolvedParentModel = await this.dataSource\n .getRepository(ModelMetadata)\n .findOne({\n where: {\n id: createDto['parentModelId'],\n },\n relations: {},\n });\n createDto['parentModel'] = resolvedParentModel;\n }\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = createDto;\n const modelMetadata = this.modelMetadataRepo.create(modelMetaDataWithoutFields);\n let model = await manager.save(modelMetadata);\n\n // iterate over all fields and upsert. \n let userKeyField = null;\n const listViewLayout = [];\n const formViewLayout = [];\n const treeViewLayout = [];\n\n for (let k = 0; k < fieldsMetadata.length; k++) {\n const fieldMetadata = fieldsMetadata[k];\n\n // TODO: resolve model & mediaStorageProvider. \n fieldMetadata['model'] = model;\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n // console.log(fieldMetadata.displayName);\n // this.logger.debug(fieldMetadata.displayName);\n\n const fieldMetadataObject = this.fieldMetadataRepo.create(fieldMetadata);\n const affectedField = await manager.save(fieldMetadataObject);\n\n if (fieldMetadata.isUserKey) {\n userKeyField = affectedField;\n }\n listViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n formViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n treeViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n\n }\n\n // Now that we have created fields & model update the model to stamp the userKeyField. \n if (userKeyField) {\n modelMetaDataWithoutFields['userKeyField'] = userKeyField;\n const updatedModelMetadataDto = this.modelMetadataRepo.merge(model, modelMetaDataWithoutFields);\n model = await manager.save(updatedModelMetadataDto);\n }\n\n return model;\n }\n\n async createInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n legacyTableType: model?.legacyTableType,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n modelMetaData.fields.push(fieldObject);\n }\n // Update the `models` array\n metaData.moduleMetadata.models.push(modelMetaData);\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error: any) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async updateInDb(manager: EntityManager, id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = updateModelMetaDataDto;\n const modelRepo = manager.getRepository(ModelMetadata);\n const fieldRepo = manager.getRepository(FieldMetadata);\n // 1. Update the model metadata without fields\n let existingModel = await modelRepo.findOne({\n where: {\n singularName: updateModelMetaDataDto.singularName\n },\n relations: [\"fields\", \"module\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n if (!existingModel) {\n throw new Error(ERROR_MESSAGES.MODEL_NOT_FOUND(updateModelMetaDataDto.singularName));\n }\n\n const updatedModel = modelRepo.merge(existingModel, modelMetaDataWithoutFields);\n await modelRepo.save(updatedModel);\n\n const existingFields = existingModel.fields || [];\n const existingFieldIds = existingFields.map((field) => field.id);\n\n // 2. Synchronize fields\n // const userKeyFieldName = updateModelMetaDataDto.userKeyFieldUserKey;\n let userKeyField = null;\n\n const fieldsToSave: FieldMetadata[] = [];\n const fieldsToDelete: FieldMetadata[] = [];\n\n for (const fieldMetadata of fieldsMetadata) {\n if (fieldMetadata.id) {\n // Existing field\n const existingField = existingFields.find((field) => field.id === fieldMetadata.id);\n if (existingField) {\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n Object.assign(existingField, fieldMetadata);\n fieldsToSave.push(existingField);\n }\n } else {\n // New field\n fieldMetadata['model'] = updatedModel;\n\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n const createdField = fieldRepo.create(fieldMetadata);\n fieldsToSave.push(createdField);\n }\n\n // Check for userKeyField\n // if (fieldMetadata.isUserKey) {\n // userKeyField = fieldMetadata;\n // }\n }\n\n // Fields to delete (not in the payload)\n fieldsToDelete.push(...existingFields.filter((field) => !fieldsMetadata.some((f) => f.id === field.id)));\n\n // Save and remove fields\n if (fieldsToSave.length > 0) {\n await fieldRepo.save(fieldsToSave);\n }\n if (fieldsToDelete.length > 0) {\n fieldsToDelete.forEach(field => { field.isMarkedForRemoval = true })\n await fieldRepo.save(fieldsToDelete);\n\n // await this.fieldMetadataRepo.remove(fieldsToDelete);\n }\n\n const finalModel = await modelRepo.findOne({\n where: { id: updatedModel.id },\n relations: [\"fields\", \"userKeyField\"]\n });\n\n // 3. Update model with userKeyField if specified\n const userKeyFields = fieldsMetadata.filter(field => field.isUserKey);\n\n if (userKeyFields.length > 0) {\n const newUserKeyField = userKeyFields[userKeyFields.length - 1];\n const savedUserKeyField = await fieldRepo.findOne({ where: { id: newUserKeyField.id } });\n\n if (savedUserKeyField) {\n finalModel.userKeyField = savedUserKeyField;\n await modelRepo.save(finalModel);\n }\n\n const otherUserKeyFields = userKeyFields.filter(field => field.id !== newUserKeyField.id);\n\n for (const field of otherUserKeyFields) {\n const existingField = await fieldRepo.findOne({ where: { id: field.id } });\n if (existingField) {\n existingField.isUserKey = false;\n await fieldRepo.save(existingField);\n }\n }\n } else {\n if (finalModel.userKeyField) {\n finalModel.userKeyField = null;\n await modelRepo.save(finalModel);\n }\n }\n\n return updatedModel;\n\n }\n\n async updateInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n order: {\n fields: {\n id: \"ASC\",\n },\n },\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (!field.isSystem) {\n\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = true;\n }\n modelMetaData.fields.push(fieldObject);\n }\n }\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelMetaData.singularName\n );\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error: any) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async upsert(updateDto: UpdateModelMetaDataDto) {\n // First check if module already exists using name\n const existingModelMetadata = await this.modelMetadataRepo.findOne({\n where: {\n singularName: updateDto.singularName\n }\n })\n\n // if found\n if (existingModelMetadata) {\n const updatedModelMetadata = { ...existingModelMetadata, ...updateDto };\n const updatedModel = await this.modelMetadataRepo.save(updatedModelMetadata);\n return updatedModel\n }\n // if not found - create new \n else {\n const modelMetadata = this.modelMetadataRepo.create(updateDto);\n return this.modelMetadataRepo.save(modelMetadata);\n }\n }\n\n async removeBySingularName(singularName: string) {\n try {\n const entity = await this.findOneBySingularName(singularName);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r;\n } catch (error: any) {\n }\n }\n\n async deleteMany(ids: number[]): Promise<any> {\n if (!ids || ids.length === 0) {\n throw new Error(ERROR_MESSAGES.DELETE_IDS_REQUIRED);\n }\n const removedEntities = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n //@ts-ignore\n id: id,\n }\n });\n // if (!entity) {\n // throw new Error(`Entity with id ${ id } not found`);\n // }\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n removedEntities.push(r);\n }\n\n return removedEntities\n }\n\n @DisallowInProduction()\n async remove(id: number) {\n const entity = await this.findOne(id);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r\n }\n\n async cleanupOnDelete(modelEntityId: number) {\n const modelEntity = await this.modelMetadataRepo.findOne({\n where: {\n // @ts-ignore\n id: modelEntityId,\n },\n relations: ['module', 'fields']\n });\n\n if (!modelEntity) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata`);\n return;\n }\n if (modelEntity.id !== modelEntityId) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata id ${modelEntity.id} not matching with the one passed as argument ${modelEntityId}`);\n return;\n }\n\n this.logger.log(`Cleaning up for model: ${modelEntity.singularName} belonging to module: ${modelEntity.module?.name}`);\n\n const modulePath = await this.moduleMetadataHelperService.getModulePath(modelEntity.module?.name);\n if (modulePath) {\n // /Users/harishpatel/Code/javascript/school-fees-portal/solid-api/src/solid-core\n this.logger.log(`Module path: ${modulePath}`);\n\n const filesToDelete = [];\n // <singularName>.entity.ts | The TypeORM model that needs to be deleted. | Automatic\n const entityFilePath = `${modulePath}/entities/${kebabCase(modelEntity.singularName)}.entity.ts`;\n filesToDelete.push(entityFilePath);\n this.logger.log(`About to delete entity file path: ${entityFilePath}`);\n\n // <singularName>.create.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const createDtoFilePath = `${modulePath}/dtos/create-${kebabCase(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(createDtoFilePath);\n this.logger.log(`About to delete create DTO file path: ${createDtoFilePath}`);\n\n // <singularName>.update.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const updateDtoFilePath = `${modulePath}/dtos/update-${kebabCase(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(updateDtoFilePath);\n this.logger.log(`About to delete update DTO file path: ${updateDtoFilePath}`);\n\n // <singularName>.repository.ts | The TypeORM model that needs to be deleted. | Automatic\n const repositoryFilePath = `${modulePath}/repositories/${kebabCase(modelEntity.singularName)}.repository.ts`;\n filesToDelete.push(repositoryFilePath);\n this.logger.log(`About to delete repository file path: ${repositoryFilePath}`);\n\n // <singularName>.service.ts | The TypeORM model that needs to be deleted. | Automatic\n const serviceFilePath = `${modulePath}/services/${kebabCase(modelEntity.singularName)}.service.ts`;\n filesToDelete.push(serviceFilePath);\n this.logger.log(`About to delete service file path: ${serviceFilePath}`);\n\n // <singularName>.controller.ts | The TypeORM model that needs to be deleted. | Automatic\n const controllerFilePath = `${modulePath}/controllers/${kebabCase(modelEntity.singularName)}.controller.ts`;\n filesToDelete.push(controllerFilePath);\n this.logger.log(`About to delete controller file path: ${controllerFilePath}`);\n\n for (let i = 0; i < filesToDelete.length; i++) {\n const fileToDelete = filesToDelete[i];\n try {\n await fs.unlink(fileToDelete);\n this.logger.log(`Deleted file: ${fileToDelete}`);\n } catch (error: any) {\n if (error?.code === 'ENOENT') {\n this.logger.warn(`File already absent, skipping delete: ${fileToDelete}`);\n continue;\n }\n this.logger.error(`Error deleting file: ${fileToDelete}`, error);\n }\n }\n }\n\n const { removedActionNames, removedMenuNames, removedViewNames } = await this.cleanupAssociatedViewsActionsAndMenus(modelEntity.id);\n await this.cleanupAssociatedImports(modelEntity.id);\n await this.cleanupAssociatedPermissions(modelEntity.singularName);\n await this.clearModelReferencesBeforeDelete(modelEntity);\n\n // <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module?.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n if (metaData) {\n const moduleMetadata = metaData?.moduleMetadata ?? metaData;\n const removedActionNameSet = new Set(removedActionNames);\n const removedMenuNameSet = new Set(removedMenuNames);\n const removedViewNameSet = new Set(removedViewNames);\n\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelEntity.singularName\n );\n\n // Remove the model to be deleted from the metadata\n if (existingModelIndex !== -1) {\n metaData.moduleMetadata.models.splice(existingModelIndex, 1);\n }\n\n // Remove references to this model in the menu, action & view sections.\n const existingViews = Array.isArray(moduleMetadata?.views) ? moduleMetadata.views : [];\n moduleMetadata.views = existingViews.filter((view: any) => {\n const shouldRemove = view?.modelUserKey === modelEntity.singularName || removedViewNameSet.has(view?.name);\n if (shouldRemove && view?.name) {\n removedViewNameSet.add(view.name);\n }\n return !shouldRemove;\n });\n\n const existingActions = Array.isArray(moduleMetadata?.actions) ? moduleMetadata.actions : [];\n moduleMetadata.actions = existingActions.filter((action: any) => {\n const shouldRemove =\n action?.modelUserKey === modelEntity.singularName ||\n removedActionNameSet.has(action?.name) ||\n removedViewNameSet.has(action?.viewUserKey);\n\n if (shouldRemove && action?.name) {\n removedActionNameSet.add(action.name);\n }\n return !shouldRemove;\n });\n\n let pendingMenus = Array.isArray(moduleMetadata?.menus) ? [...moduleMetadata.menus] : [];\n let menuRemovedOnPass = true;\n while (menuRemovedOnPass) {\n menuRemovedOnPass = false;\n pendingMenus = pendingMenus.filter((menu: any) => {\n const shouldRemove =\n menu?.modelUserKey === modelEntity.singularName ||\n removedMenuNameSet.has(menu?.name) ||\n removedActionNameSet.has(menu?.actionUserKey) ||\n removedMenuNameSet.has(menu?.parentMenuItemUserKey);\n\n if (shouldRemove) {\n if (menu?.name) {\n removedMenuNameSet.add(menu.name);\n }\n menuRemovedOnPass = true;\n return false;\n }\n\n return true;\n });\n }\n moduleMetadata.menus = pendingMenus;\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n\n // <moduleName>.module.ts | Remove all references and imports of the deleted model files. | Automatic\n if (modulePath) {\n const moduleFilePath = path.resolve(modulePath, `${kebabCase(modelEntity.module?.name)}.module.ts`);\n this.logger.log(`Removing model '${modelEntity.singularName}' references from module file: ${moduleFilePath}`);\n try {\n this.solidTsMorphService.begin();\n const modelPathSegment = `/${kebabCase(modelEntity.singularName)}.`;\n const { removedIdentifiers } = this.solidTsMorphService.removeImports(\n moduleFilePath,\n spec => spec.includes(modelPathSegment)\n );\n this.solidTsMorphService.removeModuleMembers(moduleFilePath, removedIdentifiers);\n await this.solidTsMorphService.commit();\n } catch (error: any) {\n this.solidTsMorphService.rollback();\n this.logger.error(`Failed to clean up module file for model '${modelEntity.singularName}':`, error);\n }\n }\n\n // - | Drop database table | Removes the database table from the DB, this is a very risky step. Best to review all relations to other models etc and then do this manually | Manual (X)\n\n }\n\n private async cleanupAssociatedViewsActionsAndMenus(modelId: number) {\n const viewRepo = this.dataSource.getRepository(ViewMetadata);\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n const userViewRepo = this.dataSource.getRepository(UserViewMetadata);\n\n const views = await viewRepo.find({\n where: {\n model: { id: modelId },\n },\n });\n const viewIds = views.map((view) => view.id);\n const removedViewNames = views.map((view) => view.name).filter(Boolean);\n\n const actions = await actionRepo.find({\n where: [\n {\n model: { id: modelId },\n },\n ...(viewIds.length > 0\n ? [\n {\n view: { id: In(viewIds) },\n },\n ]\n : []),\n ],\n relations: ['view'],\n });\n\n const uniqueActions = Array.from(\n new Map(actions.map((action) => [action.id, action])).values(),\n );\n const actionIds = uniqueActions.map((action) => action.id);\n const removedActionNames = uniqueActions.map((action) => action.name).filter(Boolean);\n\n const menus = await this.findMenusForActionIds(actionIds);\n const removedMenuNames = menus.map((menu) => menu.name).filter(Boolean);\n\n if (menus.length > 0) {\n const menuIds = menus.map((menu) => menu.id).filter(Boolean);\n for (const menu of menus) {\n if (menu.roles?.length) {\n await this.dataSource\n .createQueryBuilder()\n .relation(MenuItemMetadata, 'roles')\n .of(menu.id)\n .remove(menu.roles.map((role) => role.id));\n }\n }\n\n if (menuIds.length > 0) {\n await menuRepo\n .createQueryBuilder()\n .update(MenuItemMetadata)\n .set({ parentMenuItem: null as any })\n .where('id IN (:...menuIds)', { menuIds })\n .execute();\n\n await menuRepo\n .createQueryBuilder()\n .delete()\n .from(MenuItemMetadata)\n .where('id IN (:...menuIds)', { menuIds })\n .execute();\n }\n\n this.logger.log(`Deleted ${menus.length} menu metadata record(s) for model id ${modelId}`);\n }\n\n if (uniqueActions.length > 0) {\n await actionRepo.remove(uniqueActions);\n this.logger.log(`Deleted ${uniqueActions.length} action metadata record(s) for model id ${modelId}`);\n }\n\n if (viewIds.length > 0) {\n const userViews = await userViewRepo.find({\n where: {\n viewMetadata: { id: In(viewIds) },\n },\n relations: ['viewMetadata'],\n });\n if (userViews.length > 0) {\n await userViewRepo.remove(userViews);\n this.logger.log(`Deleted ${userViews.length} user view metadata record(s) for model id ${modelId}`);\n }\n\n await viewRepo.remove(views);\n this.logger.log(`Deleted ${views.length} view metadata record(s) for model id ${modelId}`);\n }\n\n return {\n removedActionNames,\n removedMenuNames,\n removedViewNames,\n };\n }\n\n private async cleanupAssociatedImports(modelId: number) {\n const importTransactionRepo = this.dataSource.getRepository(ImportTransaction);\n const importTransactionErrorLogRepo = this.dataSource.getRepository(ImportTransactionErrorLog);\n\n const importTransactions = await importTransactionRepo.find({\n where: {\n modelMetadata: { id: modelId },\n },\n });\n\n if (importTransactions.length === 0) {\n return;\n }\n\n const importTransactionIds = importTransactions.map((transaction) => transaction.id);\n const importTransactionErrorLogs = await importTransactionErrorLogRepo.find({\n where: {\n importTransaction: { id: In(importTransactionIds) },\n },\n relations: ['importTransaction'],\n });\n\n if (importTransactionErrorLogs.length > 0) {\n await importTransactionErrorLogRepo.remove(importTransactionErrorLogs);\n this.logger.log(`Deleted ${importTransactionErrorLogs.length} import transaction error log record(s) for model id ${modelId}`);\n }\n\n await importTransactionRepo.remove(importTransactions);\n this.logger.log(`Deleted ${importTransactions.length} import transaction record(s) for model id ${modelId}`);\n }\n\n private async cleanupAssociatedPermissions(modelSingularName: string) {\n const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);\n const controllerName = `${classify(modelSingularName)}Controller`;\n const permissions = await permissionsRepo\n .createQueryBuilder('permission')\n .leftJoinAndSelect('permission.roles', 'role')\n .where('permission.name LIKE :pattern', { pattern: `${controllerName}.%` })\n .getMany();\n\n if (permissions.length === 0) {\n return;\n }\n\n for (const permission of permissions) {\n if (permission.roles?.length) {\n await this.dataSource\n .createQueryBuilder()\n .relation(PermissionMetadata, 'roles')\n .of(permission.id)\n .remove(permission.roles.map((role) => role.id));\n }\n }\n\n await permissionsRepo.remove(permissions);\n this.logger.log(`Deleted ${permissions.length} permission metadata record(s) for model '${modelSingularName}'`);\n }\n\n private async clearModelReferencesBeforeDelete(modelEntity: ModelMetadata) {\n const modelRepo = this.dataSource.getRepository(ModelMetadata);\n const fieldIds = (modelEntity.fields ?? []).map((field) => field.id).filter(Boolean);\n\n if (fieldIds.length > 0) {\n await modelRepo\n .createQueryBuilder()\n .update(ModelMetadata)\n .set({ userKeyField: null as any })\n .where('user_key_field_id IN (:...fieldIds)', { fieldIds })\n .execute();\n }\n\n await modelRepo\n .createQueryBuilder()\n .update(ModelMetadata)\n .set({ parentModel: null as any })\n .where('parent_model_id = :modelId', { modelId: modelEntity.id })\n .execute();\n }\n\n private async findMenusForActionIds(actionIds: number[]) {\n if (!actionIds?.length) {\n return [];\n }\n\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n const menusById = new Map<number, MenuItemMetadata>();\n\n const rootMenus = await menuRepo.find({\n where: {\n action: { id: In(actionIds) },\n },\n relations: ['roles', 'action', 'parentMenuItem'],\n });\n\n rootMenus.forEach((menu) => menusById.set(menu.id, menu));\n\n let parentIds = rootMenus.map((menu) => menu.id);\n while (parentIds.length > 0) {\n const childMenus = await menuRepo.find({\n where: {\n parentMenuItem: { id: In(parentIds) },\n },\n relations: ['roles', 'action', 'parentMenuItem'],\n });\n\n const nextParentIds: number[] = [];\n for (const childMenu of childMenus) {\n if (!menusById.has(childMenu.id)) {\n menusById.set(childMenu.id, childMenu);\n nextParentIds.push(childMenu.id);\n }\n }\n\n parentIds = nextParentIds;\n }\n\n return Array.from(menusById.values());\n }\n\n @DisallowInProduction()\n async generateCodeViaCtl(modelId: number): Promise<string> {\n const model = await this.findOne(modelId);\n return this.commandService.executeCommandWithArgs({\n command: 'npx',\n args: ['@solidxai/solidctl@latest', 'generate', 'model', `--name=${model.singularName}`],\n cwd: path.join(process.cwd(), '..'),\n });\n }\n\n @DisallowInProduction()\n async handleGenerateCode(options: CodeGenerationOptions): Promise<any> {\n const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];\n\n // Generate the code for the passed model\n const { model, removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(options);\n affectedModelIds.push(model.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n\n // Generate the code for models which are linked to fields having an inverse relation\n await this.generateCodeForInverseModels(model, options, affectedModelIds, refreshModelCodeOutputLines, removeFieldCodeOutputLines);\n\n // Generate the VAM config for all the affected models\n for (const modelId of affectedModelIds) {\n await this.generateVAMConfig(modelId);\n }\n\n // Return the aggregated code output\n return `${removeFieldCodeOutputLines.join('\\n')} \\n ${refreshModelCodeOutputLines.join('\\n')}`;\n }\n\n private async generateCodeForInverseModels(model: ModelMetadata, options: CodeGenerationOptions, affectedModelIds: any[], refreshModelCodeOutputLines: any[], removeFieldCodeOutputLines: any[]) {\n const coModelSingularNames = model.fields.\n filter(field => field.type === SolidFieldType.relation && field.relationCreateInverse === true)\n .map(field => field.relationCoModelSingularName);\n\n for (const singularName of coModelSingularNames) {\n const coModel = await this.findOneBySingularName(singularName);\n const inverseOptions: CodeGenerationOptions = {\n modelId: coModel.id,\n dryRun: options.dryRun\n };\n const { removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(inverseOptions);\n affectedModelIds.push(coModel.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n }\n }\n\n // Generate the View, Action and Menu configuration for the model\n async generateVAMConfig(modelId: number) {\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const model = await modelRepository.findOne({\n where: {\n id: modelId\n },\n relations: [\"fields\", \"module\"]\n });\n await this.populateVAMConfigInDb(model);\n await this.populateVAMConfigInFile(model);\n });\n } catch (error: any) {\n this.logger.error('generateVAMConfig Transaction failed:', error);\n throw error;\n }\n }\n\n private async populateVAMConfigInFile(model: ModelMetadata) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const listViewLayoutFields = [{ type: \"field\", attrs: { name: `id` } }];\n const treeViewLayoutFields = [{ type: \"field\", attrs: { name: `id` } }];\n const formViewLayoutFields = [];\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n listViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n formViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n treeViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n }\n this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData);\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error: any) {\n // console.error('File creation failed:', error);\n this.logger.error('File updation failed for View, action, menus config:', error);\n throw new Error('File updation failed for View, action, menus config'); // Trigger rollback\n }\n }\n\n // Populate the View, Actions and Menus in the config file\n private populateVAMConfigInFileInternal(formViewLayoutFields: any[], model: ModelMetadata, listViewLayoutFields: { type: string; attrs: { name: string; }; }[], treeViewLayoutFields: { type: string; attrs: { name: string; }; }[], metaData: any) {\n const column1Fields = [];\n // const column2Fields = [];\n\n // Distribute fields between two columns\n for (let i = 0; i < formViewLayoutFields.length; i++) {\n // if (i % 2 === 0) {\n column1Fields.push(formViewLayoutFields[i]);\n // } else {\n // column2Fields.push(formViewLayoutFields[i]);\n // }\n }\n const actionName = `${model.singularName}-list-action`;\n const treeViewActionName = `${model.singularName}-tree-action`;\n const listViewName = `${model.singularName}-list-view`;\n const treeViewName = `${model.singularName}-tree-view`;\n const formViewName = `${model.singularName}-form-view`;\n const menuName = `${model.singularName}-menu-item`;\n const nextMenuSequenceNumber = (metaData.menus?.length ?? 0) + 1;\n\n const action = {\n displayName: `${model.displayName} List Action`,\n name: actionName,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n viewUserKey: listViewName,\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`\n };\n\n const treeViewAction = {\n displayName: `${model.displayName} Tree View Action`,\n name: treeViewActionName,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n viewUserKey: treeViewName,\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`\n };\n\n const menu = {\n displayName: `${model.displayName}`,\n name: menuName,\n sequenceNumber: nextMenuSequenceNumber,\n actionUserKey: actionName,\n moduleUserKey: `${model.module.name}`,\n parentMenuItemUserKey: \"\",\n iconName: \"\"\n };\n\n const modelListview = {\n name: listViewName,\n displayName: `${model.displayName}`,\n type: \"list\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [\n 10,\n 25,\n 50\n ],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayoutFields\n }\n };\n\n const modelTreeview = {\n name: treeViewName,\n displayName: `${model.displayName}`,\n type: \"tree\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"tree\",\n attrs: {\n pagination: true,\n pageSizeOptions: [\n 10,\n 25,\n 50\n ],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: treeViewLayoutFields\n }\n };\n\n const modelFormView = {\n name: formViewName,\n displayName: `${model.displayName}`,\n type: \"form\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: column1Fields\n },\n // {\n // type: \"column\",\n // attrs: { name: \"group-2\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n // children: column2Fields\n // }\n ]\n },\n ]\n }\n ]\n }\n };\n\n // Utility function to check if an item with the same name already exists\n const notExists = (arr: any[], name: string) => !arr.some(item => item.name === name);\n\n if (notExists(metaData.menus, menuName)) {\n metaData.menus.push(menu);\n }\n\n if (notExists(metaData.actions, actionName)) {\n metaData.actions.push(action);\n }\n\n if (notExists(metaData.actions, treeViewActionName)) {\n metaData.actions.push(treeViewAction);\n }\n\n if (notExists(metaData.views, listViewName)) {\n metaData.views.push(modelListview);\n }\n\n if (notExists(metaData.views, treeViewName)) {\n metaData.views.push(modelTreeview);\n }\n\n if (notExists(metaData.views, formViewName)) {\n metaData.views.push(modelFormView);\n }\n // metaData.menus.push(menu);\n // metaData.actions.push(action);\n // metaData.views.push(modelListview);\n // metaData.views.push(modelFormView);\n }\n\n //Populate the View, Actions and Menus in the database\n private async populateVAMConfigInDb(model: ModelMetadata) {\n const jsonFieldsList = model.fields.filter((field: FieldMetadata) => field.isSystem !== true);\n\n const listViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`,\n isSearchable: true,\n }\n }));\n\n const treeViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`,\n isSearchable: true,\n }\n }));\n\n const formViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`\n }\n }));\n\n const midIndex = Math.ceil(formViewLayout.length / 2);\n const firstHalf = formViewLayout.slice(0, midIndex);\n const secondHalf = formViewLayout.slice(midIndex);\n\n const resolvedModule = await this.dataSource.getRepository(ModuleMetadata).findOne({\n where: { id: model.module.id }\n });\n\n const viewRepo = this.dataSource.getRepository(ViewMetadata);\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n\n const modelViews = [\n {\n name: `${model.singularName}-list-view`,\n displayName: `${model.displayName}`,\n type: 'list',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [10, 25, 50],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayout\n }, null, 3)\n },\n {\n name: `${model.singularName}-tree-view`,\n displayName: `${model.displayName}`,\n type: 'tree',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"tree\",\n attrs: {\n pagination: true,\n pageSizeOptions: [10, 25, 50],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: treeViewLayout\n }, null, 3)\n },\n {\n name: `${model.singularName}-form-view`,\n displayName: `${model.displayName}`,\n type: 'form',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"group-1\", label: \"\", className: \"\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: firstHalf\n },\n {\n type: \"column\",\n attrs: { name: \"group-2\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: secondHalf\n }\n ]\n }\n ]\n }\n ]\n }, null, 3)\n }\n ];\n\n for (const view of modelViews) {\n const existingView = await viewRepo.findOne({ where: { name: view.name } });\n\n if (!existingView) {\n const createdView = viewRepo.create(view);\n await viewRepo.save(createdView);\n }\n }\n\n let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });\n let treeView = await viewRepo.findOne({ where: { name: `${model.singularName}-tree-view` } });\n\n const actionData = {\n displayName: `${model.displayName} List Action`,\n name: `${model.singularName}-list-action`,\n type: \"solid\",\n domain: \"\" as any,\n context: \"\" as any,\n customComponent: \"\",\n customIsModal: true,\n serverEndpoint: \"\",\n view: view,\n module: resolvedModule,\n model: model\n };\n\n const treeViewActionData = {\n displayName: `${model.displayName} Tree View Action`,\n name: `${model.singularName}-tree-view-action`,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n view: treeView,\n module: resolvedModule,\n model: model\n };\n\n let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });\n let existingTreeViewAction = await actionRepo.findOne({ where: { name: treeViewActionData.name } });\n\n if (!existingAction) {\n const createdAction = actionRepo.create(actionData);\n existingAction = await actionRepo.save(createdAction);\n }\n\n if (!existingTreeViewAction) {\n const createdTreeViewAction = actionRepo.create(treeViewActionData);\n existingTreeViewAction = await actionRepo.save(createdTreeViewAction);\n }\n\n const adminRole = await this.roleService.findRoleByName('Admin');\n\n const menuData = {\n displayName: `${model.displayName}`,\n name: `${model.singularName}-menu-item`,\n sequenceNumber: 1,\n action: existingAction,\n module: resolvedModule,\n roles: [adminRole],\n parentMenuItemUserKey: \"\"\n };\n\n let existingMenu = await menuRepo.findOne({ where: { name: menuData.name } });\n\n if (!existingMenu) {\n const createdMenu = menuRepo.create(menuData);\n await menuRepo.save(createdMenu);\n }\n }\n\n async generateCode(options: CodeGenerationOptions) {\n const query = {\n populate: [\"module\", \"fields\"]\n };\n\n const model = options.modelId\n ? await this.findOne(options.modelId, query)\n : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n options.fieldIdsForRemoval = model.fields\n .filter(field => field.isMarkedForRemoval)\n .map(field => field.id);\n\n const refreshModelCodeOutput = await this.generateModelCode(options);\n const removeFieldCodeOuput = await this.generateRemoveFieldsCode(options);\n return { model, removeFieldCodeOuput, refreshModelCodeOutput };\n }\n\n async generateRemoveFieldsCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n if (!options.fieldIdsForRemoval || options.fieldIdsForRemoval.length === 0) {\n return \"\";\n }\n\n const query = {\n populate: [\"module\", \"fields\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n //Filter out the fields by id\n const fieldsForRemoval = model.fields.filter((field) => options.fieldIdsForRemoval.includes(+field.id));\n const removeOutput = await this.executeRemoveFieldsCommand(model, fieldsForRemoval, options.dryRun);\n\n // Remove the fields from the database as well. This also checks, if the field is marked for removal\n for (const field of fieldsForRemoval) {\n if (field.isMarkedForRemoval) {\n await this.fieldMetadataService.delete(field.id);\n }\n }\n\n // Remove the fields from metadata json file \n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === model.singularName\n );\n\n const modelMetaData = metaData.moduleMetadata.models[existingModelIndex];\n\n // Remove fields marked for removal from modelMetaData.fields\n modelMetaData.fields = modelMetaData.fields.filter((field: any) => field.isMarkedForRemoval !== true);\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n return removeOutput;\n }\n\n async generateModelCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n const query = {\n populate: [\"module\", \"fields\", \"parentModel\", \"parentModel.module\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n //Execute the schematic command to refresh the model\n const refreshOuput = await this.executeRefreshModelCommand(model, options.dryRun);\n\n return `${refreshOuput}`;\n }\n\n private async executeRefreshModelCommand(model: ModelMetadata, dryRun: boolean = false): Promise<string> {\n const output = await this.schematicService.executeSchematicCommand(\n REFRESH_MODEL_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n },\n dryRun\n );\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n private async executeRemoveFieldsCommand(model: ModelMetadata, fieldsForRemoval: FieldMetadata[], dryRun: boolean = false): Promise<string> {\n if (!fieldsForRemoval || fieldsForRemoval.length === 0) {\n return \"\";\n }\n const output = await this.schematicService.executeSchematicCommand(\n REMOVE_FIELDS_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n fieldNamesForRemoval: fieldsForRemoval.map(field => field.name),\n },\n dryRun\n );\n\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n async updateUserKey(data: any) {\n const { modelName, fieldName } = data;\n\n const model = await this.modelMetadataRepo.findOne({\n where: { singularName: modelName },\n relations: ['fields', 'userKeyField'],\n });\n\n if (!model) {\n throw new Error(`Model with name ${modelName} not found`);\n }\n\n if (model.userKeyField) {\n throw new Error(`User key is already set to ${model.userKeyField.name}. No changes were made.`);\n }\n\n const fieldToUpdate = model.fields.find(field => field.name === fieldName);\n if (!fieldToUpdate) {\n throw new Error(`Field with name ${fieldName} not found in model ${modelName}`);\n }\n\n fieldToUpdate.isUserKey = true;\n\n model.userKeyField = fieldToUpdate;\n\n await this.modelMetadataRepo.save(model);\n\n return {\n message: `User key has been successfully updated to ${fieldName}.`,\n success: true\n };\n }\n\n private async getRelationInverseFields(modelId: number, repo: Repository<FieldMetadata>): Promise<FieldMetadata[]> {\n return await repo.find({\n where: {\n model: {\n id: modelId\n },\n type: SolidFieldType.relation,\n relationCreateInverse: true\n },\n relations: {\n model: {\n module: true\n }\n }\n });\n }\n\n async navigation(navigationDto: NavigationDto) {\n const { recordId, modelName, ...basicFilterDto } = navigationDto;\n\n const modelServiceInstanceWrapper =\n this.introspectService.getProvider(`${classify(modelName)}Service`);\n\n if (!modelServiceInstanceWrapper) {\n throw new BadRequestException(\n `Invalid model name (${modelName}) specified in Navigation.`,\n );\n }\n\n const modelService: CRUDService<any> = modelServiceInstanceWrapper.instance;\n\n const recs = await modelService.find(basicFilterDto);\n\n // navigation only works for paginated results\n if (!('records' in recs) || !('currentPage' in recs.meta)) {\n return {\n prev: null,\n next: null,\n meta: null,\n };\n }\n\n const { records, meta } = recs;\n\n // --------------------\n // Find record index in page\n // --------------------\n const index = records.findIndex(r => String(r.id) === String(recordId));\n\n if (index === -1) {\n throw new BadRequestException(`Record not found in current page`);\n }\n\n // --------------------\n // Pagination calculations\n // --------------------\n const limit = meta.perPage;\n const currentOffset = (meta.currentPage - 1) * meta.perPage;\n const currentIndexGlobal = currentOffset + index + 1;\n\n let prev: { record: any; offset: number; limit: number } | null = null;\n let next: { record: any; offset: number; limit: number } | null = null;\n\n // --------------------\n // PREV\n // --------------------\n if (index > 0) {\n prev = {\n record: records[index - 1],\n offset: currentOffset,\n limit,\n };\n } else if (meta.prevPage !== null) {\n const prevOffset = (meta.prevPage - 1) * meta.perPage;\n\n const prevPage = await modelService.find({\n ...basicFilterDto,\n offset: prevOffset,\n limit,\n });\n\n if ('records' in prevPage) {\n const record = prevPage.records.at(-1) ?? null;\n if (record) {\n prev = {\n record,\n offset: prevOffset,\n limit,\n };\n }\n }\n }\n\n // --------------------\n // NEXT\n // --------------------\n if (index < records.length - 1) {\n next = {\n record: records[index + 1],\n offset: currentOffset,\n limit,\n };\n } else if (meta.nextPage !== null) {\n const nextOffset = (meta.nextPage - 1) * meta.perPage;\n\n const nextPage = await modelService.find({\n ...basicFilterDto,\n offset: nextOffset,\n limit,\n });\n\n if ('records' in nextPage) {\n const record = nextPage.records[0] ?? null;\n if (record) {\n next = {\n record,\n offset: nextOffset,\n limit,\n };\n }\n }\n }\n\n // --------------------\n // RESPONSE\n // --------------------\n return {\n prev: prev\n ? {\n recordId: prev.record.id,\n offset: prev.offset,\n limit: prev.limit,\n }\n : null,\n\n next: next\n ? {\n recordId: next.record.id,\n offset: next.offset,\n limit: next.limit,\n }\n : null,\n meta: {\n totalRecords: meta.totalRecords,\n perPage: meta.perPage,\n currentPage: meta.currentPage,\n totalPages: meta.totalPages,\n\n currentIndexInPage: index,\n currentIndexGlobal,\n\n hasPrev: !!prev,\n hasNext: !!next,\n\n prevPage: meta.prevPage,\n nextPage: meta.nextPage,\n },\n\n };\n }\n\n}\n"]}