@solidxai/core 0.1.10-beta.25 → 0.1.10-beta.27

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 (428) hide show
  1. package/ai-interaction-cleanup.sql +53 -0
  2. package/dist/controllers/action-metadata.controller.d.ts +1 -20
  3. package/dist/controllers/action-metadata.controller.d.ts.map +1 -1
  4. package/dist/controllers/agent-event.controller.d.ts +1 -20
  5. package/dist/controllers/agent-event.controller.d.ts.map +1 -1
  6. package/dist/controllers/agent-session.controller.d.ts +1 -20
  7. package/dist/controllers/agent-session.controller.d.ts.map +1 -1
  8. package/dist/controllers/chatter-message-details.controller.d.ts +1 -20
  9. package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
  10. package/dist/controllers/chatter-message.controller.d.ts +1 -20
  11. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  12. package/dist/controllers/dashboard-user-layout.controller.d.ts +1 -20
  13. package/dist/controllers/dashboard-user-layout.controller.d.ts.map +1 -1
  14. package/dist/controllers/email-template.controller.d.ts +1 -20
  15. package/dist/controllers/email-template.controller.d.ts.map +1 -1
  16. package/dist/controllers/export-template.controller.d.ts +1 -20
  17. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  18. package/dist/controllers/export-transaction.controller.d.ts +1 -20
  19. package/dist/controllers/export-transaction.controller.d.ts.map +1 -1
  20. package/dist/controllers/import-transaction-error-log.controller.d.ts +1 -20
  21. package/dist/controllers/import-transaction-error-log.controller.d.ts.map +1 -1
  22. package/dist/controllers/import-transaction.controller.d.ts +1 -20
  23. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  24. package/dist/controllers/list-of-values.controller.d.ts +1 -20
  25. package/dist/controllers/list-of-values.controller.d.ts.map +1 -1
  26. package/dist/controllers/locale.controller.d.ts +1 -20
  27. package/dist/controllers/locale.controller.d.ts.map +1 -1
  28. package/dist/controllers/mcp-audit-log.controller.d.ts +1 -20
  29. package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -1
  30. package/dist/controllers/media.controller.d.ts +1 -20
  31. package/dist/controllers/media.controller.d.ts.map +1 -1
  32. package/dist/controllers/menu-item-metadata.controller.d.ts +1 -20
  33. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  34. package/dist/controllers/model-metadata.controller.d.ts +10 -30
  35. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  36. package/dist/controllers/model-metadata.controller.js +2 -2
  37. package/dist/controllers/model-sequence.controller.d.ts +1 -20
  38. package/dist/controllers/model-sequence.controller.d.ts.map +1 -1
  39. package/dist/controllers/module-metadata-explorer.controller.d.ts +171 -0
  40. package/dist/controllers/module-metadata-explorer.controller.d.ts.map +1 -0
  41. package/dist/controllers/module-metadata-explorer.controller.js +143 -0
  42. package/dist/controllers/module-metadata-explorer.controller.js.map +1 -0
  43. package/dist/controllers/module-metadata.controller.d.ts +5 -0
  44. package/dist/controllers/module-metadata.controller.d.ts.map +1 -1
  45. package/dist/controllers/module-metadata.controller.js +12 -0
  46. package/dist/controllers/module-metadata.controller.js.map +1 -1
  47. package/dist/controllers/module-package.controller.d.ts +622 -0
  48. package/dist/controllers/module-package.controller.d.ts.map +1 -0
  49. package/dist/controllers/module-package.controller.js +150 -0
  50. package/dist/controllers/module-package.controller.js.map +1 -0
  51. package/dist/controllers/mq-message-queue.controller.d.ts +1 -20
  52. package/dist/controllers/mq-message-queue.controller.d.ts.map +1 -1
  53. package/dist/controllers/mq-message.controller.d.ts +1 -20
  54. package/dist/controllers/mq-message.controller.d.ts.map +1 -1
  55. package/dist/controllers/permission-metadata.controller.d.ts +1 -20
  56. package/dist/controllers/permission-metadata.controller.d.ts.map +1 -1
  57. package/dist/controllers/role-metadata.controller.d.ts +1 -20
  58. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  59. package/dist/controllers/saved-filters.controller.d.ts +1 -20
  60. package/dist/controllers/saved-filters.controller.d.ts.map +1 -1
  61. package/dist/controllers/scheduled-job.controller.d.ts +1 -20
  62. package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
  63. package/dist/controllers/security-rule.controller.d.ts +1 -20
  64. package/dist/controllers/security-rule.controller.d.ts.map +1 -1
  65. package/dist/controllers/service.controller.d.ts +1 -5
  66. package/dist/controllers/service.controller.d.ts.map +1 -1
  67. package/dist/controllers/service.controller.js +6 -11
  68. package/dist/controllers/service.controller.js.map +1 -1
  69. package/dist/controllers/sms-template.controller.d.ts +1 -20
  70. package/dist/controllers/sms-template.controller.d.ts.map +1 -1
  71. package/dist/controllers/test.controller.d.ts +1 -6
  72. package/dist/controllers/test.controller.d.ts.map +1 -1
  73. package/dist/controllers/test.controller.js +2 -20
  74. package/dist/controllers/test.controller.js.map +1 -1
  75. package/dist/controllers/user-activity-history.controller.d.ts +1 -20
  76. package/dist/controllers/user-activity-history.controller.d.ts.map +1 -1
  77. package/dist/controllers/user-view-metadata.controller.d.ts +1 -20
  78. package/dist/controllers/user-view-metadata.controller.d.ts.map +1 -1
  79. package/dist/controllers/user.controller.d.ts +1 -20
  80. package/dist/controllers/user.controller.d.ts.map +1 -1
  81. package/dist/controllers/view-metadata.controller.d.ts +1 -20
  82. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  83. package/dist/dtos/confirm-module-package-import.dto.d.ts +4 -0
  84. package/dist/dtos/confirm-module-package-import.dto.d.ts.map +1 -0
  85. package/dist/dtos/confirm-module-package-import.dto.js +34 -0
  86. package/dist/dtos/confirm-module-package-import.dto.js.map +1 -0
  87. package/dist/dtos/create-permission-metadata.dto.d.ts.map +1 -1
  88. package/dist/dtos/create-permission-metadata.dto.js +2 -0
  89. package/dist/dtos/create-permission-metadata.dto.js.map +1 -1
  90. package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
  91. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  92. package/dist/dtos/create-role-metadata.dto.js +13 -1
  93. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  94. package/dist/dtos/import-instructions.dto.d.ts +2 -0
  95. package/dist/dtos/import-instructions.dto.d.ts.map +1 -1
  96. package/dist/dtos/import-instructions.dto.js +15 -1
  97. package/dist/dtos/import-instructions.dto.js.map +1 -1
  98. package/dist/dtos/metadata-explorer-references-query.dto.d.ts +10 -0
  99. package/dist/dtos/metadata-explorer-references-query.dto.d.ts.map +1 -0
  100. package/dist/dtos/metadata-explorer-references-query.dto.js +69 -0
  101. package/dist/dtos/metadata-explorer-references-query.dto.js.map +1 -0
  102. package/dist/dtos/metadata-explorer-search-query.dto.d.ts +8 -0
  103. package/dist/dtos/metadata-explorer-search-query.dto.d.ts.map +1 -0
  104. package/dist/dtos/metadata-explorer-search-query.dto.js +55 -0
  105. package/dist/dtos/metadata-explorer-search-query.dto.js.map +1 -0
  106. package/dist/dtos/metadata-explorer-write.dto.d.ts +4 -0
  107. package/dist/dtos/metadata-explorer-write.dto.d.ts.map +1 -0
  108. package/dist/dtos/{invoke-ai-prompt.dto.js → metadata-explorer-write.dto.js} +12 -12
  109. package/dist/dtos/metadata-explorer-write.dto.js.map +1 -0
  110. package/dist/dtos/run-module-package-build.dto.d.ts +5 -0
  111. package/dist/dtos/run-module-package-build.dto.d.ts.map +1 -0
  112. package/dist/dtos/run-module-package-build.dto.js +38 -0
  113. package/dist/dtos/run-module-package-build.dto.js.map +1 -0
  114. package/dist/dtos/run-module-package-seed.dto.d.ts +4 -0
  115. package/dist/dtos/run-module-package-seed.dto.d.ts.map +1 -0
  116. package/dist/dtos/run-module-package-seed.dto.js +34 -0
  117. package/dist/dtos/run-module-package-seed.dto.js.map +1 -0
  118. package/dist/dtos/update-permission-metadata.dto.d.ts.map +1 -1
  119. package/dist/dtos/update-permission-metadata.dto.js +3 -1
  120. package/dist/dtos/update-permission-metadata.dto.js.map +1 -1
  121. package/dist/dtos/update-role-metadata.dto.d.ts +2 -0
  122. package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
  123. package/dist/dtos/update-role-metadata.dto.js +13 -1
  124. package/dist/dtos/update-role-metadata.dto.js.map +1 -1
  125. package/dist/entities/action-metadata.entity.d.ts.map +1 -1
  126. package/dist/entities/action-metadata.entity.js +1 -0
  127. package/dist/entities/action-metadata.entity.js.map +1 -1
  128. package/dist/entities/agent-event.entity.d.ts.map +1 -1
  129. package/dist/entities/agent-event.entity.js +1 -0
  130. package/dist/entities/agent-event.entity.js.map +1 -1
  131. package/dist/entities/agent-session.entity.d.ts.map +1 -1
  132. package/dist/entities/agent-session.entity.js +1 -0
  133. package/dist/entities/agent-session.entity.js.map +1 -1
  134. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  135. package/dist/entities/chatter-message.entity.js +2 -0
  136. package/dist/entities/chatter-message.entity.js.map +1 -1
  137. package/dist/entities/email-template.entity.d.ts.map +1 -1
  138. package/dist/entities/email-template.entity.js +1 -0
  139. package/dist/entities/email-template.entity.js.map +1 -1
  140. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  141. package/dist/entities/field-metadata.entity.js +4 -0
  142. package/dist/entities/field-metadata.entity.js.map +1 -1
  143. package/dist/entities/list-of-values.entity.d.ts.map +1 -1
  144. package/dist/entities/list-of-values.entity.js +4 -0
  145. package/dist/entities/list-of-values.entity.js.map +1 -1
  146. package/dist/entities/locale.entity.d.ts.map +1 -1
  147. package/dist/entities/locale.entity.js +1 -0
  148. package/dist/entities/locale.entity.js.map +1 -1
  149. package/dist/entities/media.entity.d.ts.map +1 -1
  150. package/dist/entities/media.entity.js +1 -0
  151. package/dist/entities/media.entity.js.map +1 -1
  152. package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
  153. package/dist/entities/menu-item-metadata.entity.js +2 -0
  154. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  155. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  156. package/dist/entities/model-metadata.entity.js +3 -0
  157. package/dist/entities/model-metadata.entity.js.map +1 -1
  158. package/dist/entities/module-metadata.entity.d.ts.map +1 -1
  159. package/dist/entities/module-metadata.entity.js +2 -0
  160. package/dist/entities/module-metadata.entity.js.map +1 -1
  161. package/dist/entities/permission-metadata.entity.d.ts.map +1 -1
  162. package/dist/entities/permission-metadata.entity.js.map +1 -1
  163. package/dist/entities/role-metadata.entity.d.ts +2 -0
  164. package/dist/entities/role-metadata.entity.d.ts.map +1 -1
  165. package/dist/entities/role-metadata.entity.js +10 -2
  166. package/dist/entities/role-metadata.entity.js.map +1 -1
  167. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  168. package/dist/entities/saved-filters.entity.js +3 -0
  169. package/dist/entities/saved-filters.entity.js.map +1 -1
  170. package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
  171. package/dist/entities/scheduled-job.entity.js +2 -0
  172. package/dist/entities/scheduled-job.entity.js.map +1 -1
  173. package/dist/entities/security-rule.entity.d.ts.map +1 -1
  174. package/dist/entities/security-rule.entity.js +1 -0
  175. package/dist/entities/security-rule.entity.js.map +1 -1
  176. package/dist/entities/sms-template.entity.d.ts.map +1 -1
  177. package/dist/entities/sms-template.entity.js +2 -0
  178. package/dist/entities/sms-template.entity.js.map +1 -1
  179. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  180. package/dist/entities/user-activity-history.entity.js +1 -0
  181. package/dist/entities/user-activity-history.entity.js.map +1 -1
  182. package/dist/entities/user.entity.d.ts.map +1 -1
  183. package/dist/entities/user.entity.js +2 -0
  184. package/dist/entities/user.entity.js.map +1 -1
  185. package/dist/entities/view-metadata.entity.d.ts.map +1 -1
  186. package/dist/entities/view-metadata.entity.js +2 -0
  187. package/dist/entities/view-metadata.entity.js.map +1 -1
  188. package/dist/helpers/command.service.js +1 -1
  189. package/dist/helpers/command.service.js.map +1 -1
  190. package/dist/helpers/module-metadata-helper.service.d.ts +2 -0
  191. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  192. package/dist/helpers/module-metadata-helper.service.js +14 -12
  193. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  194. package/dist/helpers/module.helper.d.ts.map +1 -1
  195. package/dist/helpers/module.helper.js +6 -6
  196. package/dist/helpers/module.helper.js.map +1 -1
  197. package/dist/helpers/typeorm-migration-helpers.d.ts +12 -0
  198. package/dist/helpers/typeorm-migration-helpers.d.ts.map +1 -0
  199. package/dist/helpers/typeorm-migration-helpers.js +119 -0
  200. package/dist/helpers/typeorm-migration-helpers.js.map +1 -0
  201. package/dist/index.d.ts +8 -5
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +8 -5
  204. package/dist/index.js.map +1 -1
  205. package/dist/interfaces.d.ts +0 -8
  206. package/dist/interfaces.d.ts.map +1 -1
  207. package/dist/interfaces.js.map +1 -1
  208. package/dist/seeders/module-metadata-seeder.service.d.ts +1 -0
  209. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  210. package/dist/seeders/module-metadata-seeder.service.js +57 -38
  211. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  212. package/dist/seeders/module-test-data.service.js +1 -1
  213. package/dist/seeders/module-test-data.service.js.map +1 -1
  214. package/dist/seeders/seed-data/solid-core-metadata.json +2674 -1913
  215. package/dist/services/crud-helper.service.d.ts +18 -0
  216. package/dist/services/crud-helper.service.d.ts.map +1 -1
  217. package/dist/services/crud-helper.service.js +70 -3
  218. package/dist/services/crud-helper.service.js.map +1 -1
  219. package/dist/services/crud.service.d.ts +1 -21
  220. package/dist/services/crud.service.d.ts.map +1 -1
  221. package/dist/services/crud.service.js +9 -75
  222. package/dist/services/crud.service.js.map +1 -1
  223. package/dist/services/import-transaction.service.d.ts.map +1 -1
  224. package/dist/services/import-transaction.service.js +6 -0
  225. package/dist/services/import-transaction.service.js.map +1 -1
  226. package/dist/services/media.service.d.ts +1 -20
  227. package/dist/services/media.service.d.ts.map +1 -1
  228. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  229. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +31 -2
  230. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  231. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  232. package/dist/services/mediaStorageProviders/file-storage-provider.js +5 -1
  233. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  234. package/dist/services/model-metadata.service.d.ts +15 -30
  235. package/dist/services/model-metadata.service.d.ts.map +1 -1
  236. package/dist/services/model-metadata.service.js +249 -29
  237. package/dist/services/model-metadata.service.js.map +1 -1
  238. package/dist/services/module-metadata-explorer.service.d.ts +161 -0
  239. package/dist/services/module-metadata-explorer.service.d.ts.map +1 -0
  240. package/dist/services/module-metadata-explorer.service.js +485 -0
  241. package/dist/services/module-metadata-explorer.service.js.map +1 -0
  242. package/dist/services/module-metadata.service.d.ts +7 -0
  243. package/dist/services/module-metadata.service.d.ts.map +1 -1
  244. package/dist/services/module-metadata.service.js +121 -2
  245. package/dist/services/module-metadata.service.js.map +1 -1
  246. package/dist/services/module-package.service.d.ts +266 -0
  247. package/dist/services/module-package.service.d.ts.map +1 -0
  248. package/dist/services/module-package.service.js +980 -0
  249. package/dist/services/module-package.service.js.map +1 -0
  250. package/dist/solid-core.module.d.ts.map +1 -1
  251. package/dist/solid-core.module.js +10 -31
  252. package/dist/solid-core.module.js.map +1 -1
  253. package/dist/subscribers/scheduled-job.subscriber.js +1 -1
  254. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  255. package/dist/subscribers/security-rule.subscriber.js +1 -1
  256. package/dist/subscribers/security-rule.subscriber.js.map +1 -1
  257. package/package.json +5 -4
  258. package/src/controllers/module-metadata-explorer.controller.ts +83 -0
  259. package/src/controllers/module-metadata.controller.ts +6 -0
  260. package/src/controllers/module-package.controller.ts +102 -0
  261. package/src/controllers/service.controller.ts +4 -7
  262. package/src/controllers/test.controller.ts +0 -9
  263. package/src/dtos/confirm-module-package-import.dto.ts +12 -0
  264. package/src/dtos/create-permission-metadata.dto.ts +3 -0
  265. package/src/dtos/create-role-metadata.dto.ts +11 -1
  266. package/src/dtos/import-instructions.dto.ts +11 -1
  267. package/src/dtos/metadata-explorer-references-query.dto.ts +39 -0
  268. package/src/dtos/metadata-explorer-search-query.dto.ts +28 -0
  269. package/src/dtos/metadata-explorer-write.dto.ts +11 -0
  270. package/src/dtos/run-module-package-build.dto.ts +14 -0
  271. package/src/dtos/run-module-package-seed.dto.ts +12 -0
  272. package/src/dtos/update-permission-metadata.dto.ts +4 -1
  273. package/src/dtos/update-role-metadata.dto.ts +21 -1
  274. package/src/entities/action-metadata.entity.ts +1 -0
  275. package/src/entities/agent-event.entity.ts +1 -0
  276. package/src/entities/agent-session.entity.ts +1 -0
  277. package/src/entities/chatter-message.entity.ts +2 -0
  278. package/src/entities/email-template.entity.ts +1 -0
  279. package/src/entities/field-metadata.entity.ts +4 -1
  280. package/src/entities/list-of-values.entity.ts +5 -1
  281. package/src/entities/locale.entity.ts +1 -0
  282. package/src/entities/media.entity.ts +1 -0
  283. package/src/entities/menu-item-metadata.entity.ts +2 -0
  284. package/src/entities/model-metadata.entity.ts +3 -0
  285. package/src/entities/module-metadata.entity.ts +2 -0
  286. package/src/entities/permission-metadata.entity.ts +2 -2
  287. package/src/entities/role-metadata.entity.ts +11 -3
  288. package/src/entities/saved-filters.entity.ts +3 -0
  289. package/src/entities/scheduled-job.entity.ts +2 -0
  290. package/src/entities/security-rule.entity.ts +1 -0
  291. package/src/entities/sms-template.entity.ts +2 -0
  292. package/src/entities/user-activity-history.entity.ts +1 -0
  293. package/src/entities/user.entity.ts +2 -0
  294. package/src/entities/view-metadata.entity.ts +2 -0
  295. package/src/helpers/command.service.ts +1 -1
  296. package/src/helpers/module-metadata-helper.service.ts +19 -21
  297. package/src/helpers/module.helper.ts +12 -9
  298. package/src/helpers/typeorm-migration-helpers.ts +163 -0
  299. package/src/index.ts +8 -5
  300. package/src/interfaces.ts +0 -8
  301. package/src/seeders/module-metadata-seeder.service.ts +63 -38
  302. package/src/seeders/module-test-data.service.ts +1 -1
  303. package/src/seeders/seed-data/solid-core-metadata.json +2675 -1914
  304. package/src/services/crud-helper.service.ts +81 -3
  305. package/src/services/crud.service.ts +11 -104
  306. package/src/services/dashboard-providers/README.md +1 -1
  307. package/src/services/import-transaction.service.ts +11 -1
  308. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +37 -2
  309. package/src/services/mediaStorageProviders/file-storage-provider.ts +5 -1
  310. package/src/services/model-metadata.service.ts +302 -98
  311. package/src/services/module-metadata-explorer.service.ts +670 -0
  312. package/src/services/module-metadata.service.ts +136 -10
  313. package/src/services/module-package.service.ts +1171 -0
  314. package/src/solid-core.module.ts +10 -33
  315. package/src/subscribers/scheduled-job.subscriber.ts +1 -1
  316. package/src/subscribers/security-rule.subscriber.ts +1 -1
  317. package/dist/commands/ingest.command.d.ts +0 -16
  318. package/dist/commands/ingest.command.d.ts.map +0 -1
  319. package/dist/commands/ingest.command.js +0 -50
  320. package/dist/commands/ingest.command.js.map +0 -1
  321. package/dist/controllers/ai-interaction.controller.d.ts +0 -48
  322. package/dist/controllers/ai-interaction.controller.d.ts.map +0 -1
  323. package/dist/controllers/ai-interaction.controller.js +0 -218
  324. package/dist/controllers/ai-interaction.controller.js.map +0 -1
  325. package/dist/dtos/create-ai-interaction.dto.d.ts +0 -23
  326. package/dist/dtos/create-ai-interaction.dto.d.ts.map +0 -1
  327. package/dist/dtos/create-ai-interaction.dto.js +0 -149
  328. package/dist/dtos/create-ai-interaction.dto.js.map +0 -1
  329. package/dist/dtos/invoke-ai-prompt.dto.d.ts +0 -5
  330. package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +0 -1
  331. package/dist/dtos/invoke-ai-prompt.dto.js.map +0 -1
  332. package/dist/dtos/update-ai-interaction.dto.d.ts +0 -24
  333. package/dist/dtos/update-ai-interaction.dto.d.ts.map +0 -1
  334. package/dist/dtos/update-ai-interaction.dto.js +0 -150
  335. package/dist/dtos/update-ai-interaction.dto.js.map +0 -1
  336. package/dist/entities/ai-interaction.entity.d.ts +0 -24
  337. package/dist/entities/ai-interaction.entity.d.ts.map +0 -1
  338. package/dist/entities/ai-interaction.entity.js +0 -116
  339. package/dist/entities/ai-interaction.entity.js.map +0 -1
  340. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +0 -11
  341. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +0 -1
  342. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +0 -39
  343. package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +0 -1
  344. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +0 -8
  345. package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +0 -1
  346. package/dist/jobs/database/trigger-mcp-client-queue-options.js +0 -10
  347. package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +0 -1
  348. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +0 -25
  349. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +0 -1
  350. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +0 -222
  351. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +0 -1
  352. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +0 -11
  353. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +0 -1
  354. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js +0 -39
  355. package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +0 -1
  356. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts +0 -8
  357. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +0 -1
  358. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js +0 -10
  359. package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +0 -1
  360. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +0 -18
  361. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
  362. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js +0 -103
  363. package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +0 -1
  364. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +0 -11
  365. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +0 -1
  366. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +0 -39
  367. package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +0 -1
  368. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +0 -8
  369. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +0 -1
  370. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +0 -10
  371. package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +0 -1
  372. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +0 -18
  373. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +0 -1
  374. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +0 -103
  375. package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +0 -1
  376. package/dist/repository/ai-interaction.repository.d.ts +0 -12
  377. package/dist/repository/ai-interaction.repository.d.ts.map +0 -1
  378. package/dist/repository/ai-interaction.repository.js +0 -34
  379. package/dist/repository/ai-interaction.repository.js.map +0 -1
  380. package/dist/services/ai-interaction.service.d.ts +0 -23
  381. package/dist/services/ai-interaction.service.d.ts.map +0 -1
  382. package/dist/services/ai-interaction.service.js +0 -217
  383. package/dist/services/ai-interaction.service.js.map +0 -1
  384. package/dist/services/database/database-bootstrap.service.d.ts +0 -12
  385. package/dist/services/database/database-bootstrap.service.d.ts.map +0 -1
  386. package/dist/services/database/database-bootstrap.service.js +0 -115
  387. package/dist/services/database/database-bootstrap.service.js.map +0 -1
  388. package/dist/services/genai/ingest-metadata.service.d.ts +0 -38
  389. package/dist/services/genai/ingest-metadata.service.d.ts.map +0 -1
  390. package/dist/services/genai/ingest-metadata.service.js +0 -542
  391. package/dist/services/genai/ingest-metadata.service.js.map +0 -1
  392. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +0 -9
  393. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +0 -1
  394. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +0 -39
  395. package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +0 -1
  396. package/dist/services/genai/r2r-helper.service.d.ts +0 -9
  397. package/dist/services/genai/r2r-helper.service.d.ts.map +0 -1
  398. package/dist/services/genai/r2r-helper.service.js +0 -40
  399. package/dist/services/genai/r2r-helper.service.js.map +0 -1
  400. package/sql/default/mariadb/proc_CleanupModelMetadata.sql +0 -153
  401. package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +0 -56
  402. package/sql/default/mssql/proc_CleanupModuleMetadata.sql +0 -78
  403. package/sql/default/mysql/proc_CleanupModelMetadata.sql +0 -153
  404. package/sql/default/mysql/proc_CleanupModuleMetadata.sql +0 -56
  405. package/sql/default/postgres/proc_CleanupModelMetadata.sql +0 -148
  406. package/sql/default/postgres/proc_CleanupModuleMetadata.sql +0 -50
  407. package/sql/default/postgres/scratchpad.sql.txt +0 -12
  408. package/src/commands/ingest.command.ts +0 -36
  409. package/src/controllers/ai-interaction.controller.ts +0 -112
  410. package/src/dtos/create-ai-interaction.dto.ts +0 -89
  411. package/src/dtos/invoke-ai-prompt.dto.ts +0 -10
  412. package/src/dtos/update-ai-interaction.dto.ts +0 -93
  413. package/src/entities/ai-interaction.entity.ts +0 -71
  414. package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +0 -22
  415. package/src/jobs/database/trigger-mcp-client-queue-options.ts +0 -9
  416. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +0 -278
  417. package/src/jobs/rabbitmq/trigger-mcp-client-publisher.service.ts +0 -22
  418. package/src/jobs/rabbitmq/trigger-mcp-client-queue-options.ts +0 -9
  419. package/src/jobs/rabbitmq/trigger-mcp-client-subscriber.service.ts +0 -104
  420. package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +0 -23
  421. package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +0 -9
  422. package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +0 -98
  423. package/src/repository/ai-interaction.repository.ts +0 -17
  424. package/src/services/ai-interaction.service.ts +0 -239
  425. package/src/services/database/database-bootstrap.service.ts +0 -91
  426. package/src/services/genai/ingest-metadata.service.ts +0 -798
  427. package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +0 -33
  428. package/src/services/genai/r2r-helper.service.ts +0 -37
@@ -2,7 +2,7 @@ import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundEx
2
2
  import { InjectDataSource } from '@nestjs/typeorm';
3
3
  import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
4
4
  import * as path from 'path';
5
- import { DataSource, EntityManager, Repository, SelectQueryBuilder } from 'typeorm';
5
+ import { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';
6
6
  import { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';
7
7
  import { ModelMetadata } from '../entities/model-metadata.entity';
8
8
  import { ModuleMetadata } from '../entities/module-metadata.entity';
@@ -19,7 +19,11 @@ import { BasicFilterDto } from '../dtos/basic-filters.dto';
19
19
  import { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';
20
20
  import { ActionMetadata } from '../entities/action-metadata.entity';
21
21
  import { FieldMetadata } from '../entities/field-metadata.entity';
22
+ import { ImportTransactionErrorLog } from '../entities/import-transaction-error-log.entity';
23
+ import { ImportTransaction } from '../entities/import-transaction.entity';
22
24
  import { MenuItemMetadata } from '../entities/menu-item-metadata.entity';
25
+ import { UserViewMetadata } from '../entities/user-view-metadata.entity';
26
+ import { PermissionMetadata } from '../entities/permission-metadata.entity';
23
27
  import { ViewMetadata } from '../entities/view-metadata.entity';
24
28
  import { CommandService } from '../helpers/command.service';
25
29
  import {
@@ -29,7 +33,7 @@ import {
29
33
  } from '../helpers/schematic.service';
30
34
  import { classify } from '../helpers/string.helper';
31
35
  import { CodeGenerationOptions } from '../interfaces';
32
- import { CrudHelperService } from './crud-helper.service';
36
+ import { CrudHelperService, FilterCombinator } from './crud-helper.service';
33
37
  import { CRUDService } from './crud.service';
34
38
  import { FieldMetadataService } from './field-metadata.service';
35
39
  import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
@@ -68,36 +72,26 @@ export class ModelMetadataService {
68
72
  return this.findMany(basicFilterDto);
69
73
  }
70
74
 
71
- async findMany(basicFilterDto: BasicFilterDto) {
75
+ async findMany(basicFilterDto: BasicFilterDto): Promise<any> {
72
76
  const alias = 'modelMetadata';
73
- // Extract the required keys from the input query
74
- let { limit, offset } = basicFilterDto;
77
+ const { limit, offset } = basicFilterDto;
75
78
 
76
- // Create above query on pincode table using query builder
77
- var qb: SelectQueryBuilder<ModelMetadata> = await this.modelMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)
78
- qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
79
+ const qb: SelectQueryBuilder<ModelMetadata> = await this.modelMetadataRepo.createSecurityRuleAwareQueryBuilder(alias);
79
80
 
80
- // Get the records and the count
81
- const [entities, count] = await qb.getManyAndCount();
82
-
83
- const currentPage = Math.floor(offset / limit) + 1;
84
- const totalPages = Math.ceil(count / limit);
85
-
86
- const nextPage = currentPage < totalPages ? currentPage + 1 : null;
87
- const prevPage = currentPage > 1 ? currentPage - 1 : null;
81
+ if (basicFilterDto.groupBy?.length) {
82
+ const groupFilterQb = this.crudHelperService.buildFilterQuery(
83
+ qb, basicFilterDto, alias, undefined, undefined, undefined,
84
+ FilterCombinator.AND, false, false
85
+ );
86
+ return this.crudHelperService.executeGroupPipeline(
87
+ groupFilterQb, basicFilterDto, alias,
88
+ () => this.modelMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)
89
+ );
90
+ }
88
91
 
89
- const r = {
90
- meta: {
91
- totalRecords: count,
92
- currentPage: currentPage,
93
- nextPage: nextPage,
94
- prevPage: prevPage,
95
- totalPages: totalPages,
96
- perPage: +limit,
97
- },
98
- records: entities
99
- };
100
- return r
92
+ const filteredQb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
93
+ const [entities, count] = await filteredQb.getManyAndCount();
94
+ return this.crudHelperService.pagedResponse(offset, limit, count, entities);
101
95
  }
102
96
 
103
97
  async findOne(id: any, query?: any) {
@@ -566,7 +560,7 @@ export class ModelMetadataService {
566
560
  // @ts-ignore
567
561
  id: modelEntityId,
568
562
  },
569
- relations: ['module']
563
+ relations: ['module', 'fields']
570
564
  });
571
565
 
572
566
  if (!modelEntity) {
@@ -622,72 +616,29 @@ export class ModelMetadataService {
622
616
  await fs.unlink(fileToDelete);
623
617
  this.logger.log(`Deleted file: ${fileToDelete}`);
624
618
  } catch (error: any) {
619
+ if (error?.code === 'ENOENT') {
620
+ this.logger.warn(`File already absent, skipping delete: ${fileToDelete}`);
621
+ continue;
622
+ }
625
623
  this.logger.error(`Error deleting file: ${fileToDelete}`, error);
626
624
  }
627
625
  }
628
626
  }
629
627
 
630
- await this.dataSource.query(
631
- `CALL cleanup_model_metadata($1, $2)`,
632
- [modelEntity.singularName, true],
633
- );
634
-
635
- // Delete the permissions, menu, actions & views related to this model.
636
- // const controllerName = `${classify(modelEntity.singularName)}Controller`;
637
- // const permissionNames = [
638
- // `${controllerName}.delete`,
639
- // `${controllerName}.deleteMany`,
640
- // `${controllerName}.findOne`,
641
- // `${controllerName}.findMany`,
642
- // `${controllerName}.recover`,
643
- // `${controllerName}.recoverMany`,
644
- // `${controllerName}.partialUpdate`,
645
- // `${controllerName}.update`,
646
- // `${controllerName}.insertMany`,
647
- // `${controllerName}.create`,
648
- // ];
649
- // const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);
650
- // const permissionsToDelete = await permissionsRepo.find({
651
- // where: { name: In(permissionNames) },
652
- // relations: ['roles'],
653
- // });
654
-
655
- // Remove role associations first
656
- // for (const permission of permissionsToDelete) {
657
- // if (permission.roles?.length) {
658
- // await this.dataSource
659
- // .createQueryBuilder()
660
- // .relation(PermissionMetadata, 'roles')
661
- // .of(permission) // permission instance or its ID
662
- // .remove(permission.roles); // remove all linked roles
663
- // }
664
- // }
665
-
666
- // await permissionsRepo.remove(permissionsToDelete);
667
-
668
- // Delete actions
669
- // const actionRepo = this.dataSource.getRepository(ActionMetadata);
670
- // const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });
671
- // await actionRepo.delete({ model: { id: modelEntity.id } });
672
-
673
- // // Delete menu items
674
- // const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);
675
- // if (action) {
676
- // const menuItems = await menuItemRepo.find({ where: { action: { id: action.id } } });
677
- // for (let i = 0; i < menuItems.length; i++) {
678
- // const menuItem = menuItems[i];
679
- // await menuItemRepo.remove(menuItem);
680
- // }
681
- // }
682
-
683
- // Delete view
684
- // const viewRepo = this.dataSource.getRepository(ViewMetadata);
685
- // await viewRepo.delete({ model: { id: modelEntity.id } })
628
+ const { removedActionNames, removedMenuNames, removedViewNames } = await this.cleanupAssociatedViewsActionsAndMenus(modelEntity.id);
629
+ await this.cleanupAssociatedImports(modelEntity.id);
630
+ await this.cleanupAssociatedPermissions(modelEntity.singularName);
631
+ await this.clearModelReferencesBeforeDelete(modelEntity);
686
632
 
687
633
  // <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic
688
634
  const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module?.name);
689
635
  const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
690
636
  if (metaData) {
637
+ const moduleMetadata = metaData?.moduleMetadata ?? metaData;
638
+ const removedActionNameSet = new Set(removedActionNames);
639
+ const removedMenuNameSet = new Set(removedMenuNames);
640
+ const removedViewNameSet = new Set(removedViewNames);
641
+
691
642
  const existingModelIndex = metaData.moduleMetadata.models.findIndex(
692
643
  (existingModel: any) => existingModel.singularName === modelEntity.singularName
693
644
  );
@@ -698,15 +649,51 @@ export class ModelMetadataService {
698
649
  }
699
650
 
700
651
  // Remove references to this model in the menu, action & view sections.
701
- metaData.moduleMetadata.menus = metaData.moduleMetadata?.menus?.filter(
702
- (menu: any) => menu.modelUserKey !== modelEntity.singularName
703
- );
704
- metaData.moduleMetadata.actions = metaData.moduleMetadata?.actions?.filter(
705
- (action: any) => action.modelUserKey !== modelEntity.singularName
706
- );
707
- metaData.moduleMetadata.views = metaData.moduleMetadata?.views?.filter(
708
- (view: any) => view.modelUserKey !== modelEntity.singularName
709
- );
652
+ const existingViews = Array.isArray(moduleMetadata?.views) ? moduleMetadata.views : [];
653
+ moduleMetadata.views = existingViews.filter((view: any) => {
654
+ const shouldRemove = view?.modelUserKey === modelEntity.singularName || removedViewNameSet.has(view?.name);
655
+ if (shouldRemove && view?.name) {
656
+ removedViewNameSet.add(view.name);
657
+ }
658
+ return !shouldRemove;
659
+ });
660
+
661
+ const existingActions = Array.isArray(moduleMetadata?.actions) ? moduleMetadata.actions : [];
662
+ moduleMetadata.actions = existingActions.filter((action: any) => {
663
+ const shouldRemove =
664
+ action?.modelUserKey === modelEntity.singularName ||
665
+ removedActionNameSet.has(action?.name) ||
666
+ removedViewNameSet.has(action?.viewUserKey);
667
+
668
+ if (shouldRemove && action?.name) {
669
+ removedActionNameSet.add(action.name);
670
+ }
671
+ return !shouldRemove;
672
+ });
673
+
674
+ let pendingMenus = Array.isArray(moduleMetadata?.menus) ? [...moduleMetadata.menus] : [];
675
+ let menuRemovedOnPass = true;
676
+ while (menuRemovedOnPass) {
677
+ menuRemovedOnPass = false;
678
+ pendingMenus = pendingMenus.filter((menu: any) => {
679
+ const shouldRemove =
680
+ menu?.modelUserKey === modelEntity.singularName ||
681
+ removedMenuNameSet.has(menu?.name) ||
682
+ removedActionNameSet.has(menu?.actionUserKey) ||
683
+ removedMenuNameSet.has(menu?.parentMenuItemUserKey);
684
+
685
+ if (shouldRemove) {
686
+ if (menu?.name) {
687
+ removedMenuNameSet.add(menu.name);
688
+ }
689
+ menuRemovedOnPass = true;
690
+ return false;
691
+ }
692
+
693
+ return true;
694
+ });
695
+ }
696
+ moduleMetadata.menus = pendingMenus;
710
697
 
711
698
  const updatedContent = JSON.stringify(metaData, null, 2);
712
699
  await fs.writeFile(filePath, updatedContent);
@@ -735,12 +722,229 @@ export class ModelMetadataService {
735
722
 
736
723
  }
737
724
 
725
+ private async cleanupAssociatedViewsActionsAndMenus(modelId: number) {
726
+ const viewRepo = this.dataSource.getRepository(ViewMetadata);
727
+ const actionRepo = this.dataSource.getRepository(ActionMetadata);
728
+ const menuRepo = this.dataSource.getRepository(MenuItemMetadata);
729
+ const userViewRepo = this.dataSource.getRepository(UserViewMetadata);
730
+
731
+ const views = await viewRepo.find({
732
+ where: {
733
+ model: { id: modelId },
734
+ },
735
+ });
736
+ const viewIds = views.map((view) => view.id);
737
+ const removedViewNames = views.map((view) => view.name).filter(Boolean);
738
+
739
+ const actions = await actionRepo.find({
740
+ where: [
741
+ {
742
+ model: { id: modelId },
743
+ },
744
+ ...(viewIds.length > 0
745
+ ? [
746
+ {
747
+ view: { id: In(viewIds) },
748
+ },
749
+ ]
750
+ : []),
751
+ ],
752
+ relations: ['view'],
753
+ });
754
+
755
+ const uniqueActions = Array.from(
756
+ new Map(actions.map((action) => [action.id, action])).values(),
757
+ );
758
+ const actionIds = uniqueActions.map((action) => action.id);
759
+ const removedActionNames = uniqueActions.map((action) => action.name).filter(Boolean);
760
+
761
+ const menus = await this.findMenusForActionIds(actionIds);
762
+ const removedMenuNames = menus.map((menu) => menu.name).filter(Boolean);
763
+
764
+ if (menus.length > 0) {
765
+ const menuIds = menus.map((menu) => menu.id).filter(Boolean);
766
+ for (const menu of menus) {
767
+ if (menu.roles?.length) {
768
+ await this.dataSource
769
+ .createQueryBuilder()
770
+ .relation(MenuItemMetadata, 'roles')
771
+ .of(menu.id)
772
+ .remove(menu.roles.map((role) => role.id));
773
+ }
774
+ }
775
+
776
+ if (menuIds.length > 0) {
777
+ await menuRepo
778
+ .createQueryBuilder()
779
+ .update(MenuItemMetadata)
780
+ .set({ parentMenuItem: null as any })
781
+ .where('id IN (:...menuIds)', { menuIds })
782
+ .execute();
783
+
784
+ await menuRepo
785
+ .createQueryBuilder()
786
+ .delete()
787
+ .from(MenuItemMetadata)
788
+ .where('id IN (:...menuIds)', { menuIds })
789
+ .execute();
790
+ }
791
+
792
+ this.logger.log(`Deleted ${menus.length} menu metadata record(s) for model id ${modelId}`);
793
+ }
794
+
795
+ if (uniqueActions.length > 0) {
796
+ await actionRepo.remove(uniqueActions);
797
+ this.logger.log(`Deleted ${uniqueActions.length} action metadata record(s) for model id ${modelId}`);
798
+ }
799
+
800
+ if (viewIds.length > 0) {
801
+ const userViews = await userViewRepo.find({
802
+ where: {
803
+ viewMetadata: { id: In(viewIds) },
804
+ },
805
+ relations: ['viewMetadata'],
806
+ });
807
+ if (userViews.length > 0) {
808
+ await userViewRepo.remove(userViews);
809
+ this.logger.log(`Deleted ${userViews.length} user view metadata record(s) for model id ${modelId}`);
810
+ }
811
+
812
+ await viewRepo.remove(views);
813
+ this.logger.log(`Deleted ${views.length} view metadata record(s) for model id ${modelId}`);
814
+ }
815
+
816
+ return {
817
+ removedActionNames,
818
+ removedMenuNames,
819
+ removedViewNames,
820
+ };
821
+ }
822
+
823
+ private async cleanupAssociatedImports(modelId: number) {
824
+ const importTransactionRepo = this.dataSource.getRepository(ImportTransaction);
825
+ const importTransactionErrorLogRepo = this.dataSource.getRepository(ImportTransactionErrorLog);
826
+
827
+ const importTransactions = await importTransactionRepo.find({
828
+ where: {
829
+ modelMetadata: { id: modelId },
830
+ },
831
+ });
832
+
833
+ if (importTransactions.length === 0) {
834
+ return;
835
+ }
836
+
837
+ const importTransactionIds = importTransactions.map((transaction) => transaction.id);
838
+ const importTransactionErrorLogs = await importTransactionErrorLogRepo.find({
839
+ where: {
840
+ importTransaction: { id: In(importTransactionIds) },
841
+ },
842
+ relations: ['importTransaction'],
843
+ });
844
+
845
+ if (importTransactionErrorLogs.length > 0) {
846
+ await importTransactionErrorLogRepo.remove(importTransactionErrorLogs);
847
+ this.logger.log(`Deleted ${importTransactionErrorLogs.length} import transaction error log record(s) for model id ${modelId}`);
848
+ }
849
+
850
+ await importTransactionRepo.remove(importTransactions);
851
+ this.logger.log(`Deleted ${importTransactions.length} import transaction record(s) for model id ${modelId}`);
852
+ }
853
+
854
+ private async cleanupAssociatedPermissions(modelSingularName: string) {
855
+ const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);
856
+ const controllerName = `${classify(modelSingularName)}Controller`;
857
+ const permissions = await permissionsRepo
858
+ .createQueryBuilder('permission')
859
+ .leftJoinAndSelect('permission.roles', 'role')
860
+ .where('permission.name LIKE :pattern', { pattern: `${controllerName}.%` })
861
+ .getMany();
862
+
863
+ if (permissions.length === 0) {
864
+ return;
865
+ }
866
+
867
+ for (const permission of permissions) {
868
+ if (permission.roles?.length) {
869
+ await this.dataSource
870
+ .createQueryBuilder()
871
+ .relation(PermissionMetadata, 'roles')
872
+ .of(permission.id)
873
+ .remove(permission.roles.map((role) => role.id));
874
+ }
875
+ }
876
+
877
+ await permissionsRepo.remove(permissions);
878
+ this.logger.log(`Deleted ${permissions.length} permission metadata record(s) for model '${modelSingularName}'`);
879
+ }
880
+
881
+ private async clearModelReferencesBeforeDelete(modelEntity: ModelMetadata) {
882
+ const modelRepo = this.dataSource.getRepository(ModelMetadata);
883
+ const fieldIds = (modelEntity.fields ?? []).map((field) => field.id).filter(Boolean);
884
+
885
+ if (fieldIds.length > 0) {
886
+ await modelRepo
887
+ .createQueryBuilder()
888
+ .update(ModelMetadata)
889
+ .set({ userKeyField: null as any })
890
+ .where('user_key_field_id IN (:...fieldIds)', { fieldIds })
891
+ .execute();
892
+ }
893
+
894
+ await modelRepo
895
+ .createQueryBuilder()
896
+ .update(ModelMetadata)
897
+ .set({ parentModel: null as any })
898
+ .where('parent_model_id = :modelId', { modelId: modelEntity.id })
899
+ .execute();
900
+ }
901
+
902
+ private async findMenusForActionIds(actionIds: number[]) {
903
+ if (!actionIds?.length) {
904
+ return [];
905
+ }
906
+
907
+ const menuRepo = this.dataSource.getRepository(MenuItemMetadata);
908
+ const menusById = new Map<number, MenuItemMetadata>();
909
+
910
+ const rootMenus = await menuRepo.find({
911
+ where: {
912
+ action: { id: In(actionIds) },
913
+ },
914
+ relations: ['roles', 'action', 'parentMenuItem'],
915
+ });
916
+
917
+ rootMenus.forEach((menu) => menusById.set(menu.id, menu));
918
+
919
+ let parentIds = rootMenus.map((menu) => menu.id);
920
+ while (parentIds.length > 0) {
921
+ const childMenus = await menuRepo.find({
922
+ where: {
923
+ parentMenuItem: { id: In(parentIds) },
924
+ },
925
+ relations: ['roles', 'action', 'parentMenuItem'],
926
+ });
927
+
928
+ const nextParentIds: number[] = [];
929
+ for (const childMenu of childMenus) {
930
+ if (!menusById.has(childMenu.id)) {
931
+ menusById.set(childMenu.id, childMenu);
932
+ nextParentIds.push(childMenu.id);
933
+ }
934
+ }
935
+
936
+ parentIds = nextParentIds;
937
+ }
938
+
939
+ return Array.from(menusById.values());
940
+ }
941
+
738
942
  @DisallowInProduction()
739
943
  async generateCodeViaCtl(modelId: number): Promise<string> {
740
944
  const model = await this.findOne(modelId);
741
945
  return this.commandService.executeCommandWithArgs({
742
946
  command: 'npx',
743
- args: ['@solixai/solidctl@latest', 'generate', 'model', `--name=${model.singularName}`],
947
+ args: ['@solidxai/solidctl@latest', 'generate', 'model', `--name=${model.singularName}`],
744
948
  cwd: path.join(process.cwd(), '..'),
745
949
  });
746
950
  }
@@ -1239,11 +1443,11 @@ export class ModelMetadataService {
1239
1443
  const removeOutput = await this.executeRemoveFieldsCommand(model, fieldsForRemoval, options.dryRun);
1240
1444
 
1241
1445
  // Remove the fields from the database as well. This also checks, if the field is marked for removal
1242
- fieldsForRemoval.forEach((field: FieldMetadata) => {
1446
+ for (const field of fieldsForRemoval) {
1243
1447
  if (field.isMarkedForRemoval) {
1244
- this.fieldMetadataService.delete(field.id);
1448
+ await this.fieldMetadataService.delete(field.id);
1245
1449
  }
1246
- });
1450
+ }
1247
1451
 
1248
1452
  // Remove the fields from metadata json file
1249
1453