@solidstarters/solid-core 1.2.200 → 1.2.202

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 (527) hide show
  1. package/dist/commands/fixtures/fixtures-setup.command.d.ts +15 -0
  2. package/dist/commands/fixtures/fixtures-setup.command.d.ts.map +1 -0
  3. package/dist/commands/fixtures/fixtures-setup.command.js +58 -0
  4. package/dist/commands/fixtures/fixtures-setup.command.js.map +1 -0
  5. package/dist/commands/fixtures/fixtures-tear-down.command.d.ts +16 -0
  6. package/dist/commands/fixtures/fixtures-tear-down.command.d.ts.map +1 -0
  7. package/dist/commands/fixtures/fixtures-tear-down.command.js +59 -0
  8. package/dist/commands/fixtures/fixtures-tear-down.command.js.map +1 -0
  9. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  10. package/dist/commands/refresh-model.command.js +4 -0
  11. package/dist/commands/refresh-model.command.js.map +1 -1
  12. package/dist/config/cache.options.d.ts +1 -1
  13. package/dist/config/cache.options.d.ts.map +1 -1
  14. package/dist/config/cache.options.js +2 -2
  15. package/dist/config/cache.options.js.map +1 -1
  16. package/dist/config/iam.config.d.ts +4 -0
  17. package/dist/config/iam.config.d.ts.map +1 -1
  18. package/dist/config/iam.config.js +2 -0
  19. package/dist/config/iam.config.js.map +1 -1
  20. package/dist/constants/error-messages.d.ts +2 -0
  21. package/dist/constants/error-messages.d.ts.map +1 -1
  22. package/dist/constants/error-messages.js +4 -0
  23. package/dist/constants/error-messages.js.map +1 -1
  24. package/dist/controllers/model-metadata.controller.d.ts +25 -0
  25. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  26. package/dist/controllers/model-metadata.controller.js +23 -0
  27. package/dist/controllers/model-metadata.controller.js.map +1 -1
  28. package/dist/controllers/model-sequence.controller.d.ts +43 -0
  29. package/dist/controllers/model-sequence.controller.d.ts.map +1 -0
  30. package/dist/controllers/model-sequence.controller.js +179 -0
  31. package/dist/controllers/model-sequence.controller.js.map +1 -0
  32. package/dist/controllers/setting.controller.d.ts +2 -2
  33. package/dist/controllers/setting.controller.d.ts.map +1 -1
  34. package/dist/controllers/setting.controller.js +36 -42
  35. package/dist/controllers/setting.controller.js.map +1 -1
  36. package/dist/decorators/sms-provider.decorator.d.ts +3 -0
  37. package/dist/decorators/sms-provider.decorator.d.ts.map +1 -0
  38. package/dist/decorators/sms-provider.decorator.js +11 -0
  39. package/dist/decorators/sms-provider.decorator.js.map +1 -0
  40. package/dist/dtos/basic-filters.dto.d.ts +3 -1
  41. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  42. package/dist/dtos/basic-filters.dto.js +8 -2
  43. package/dist/dtos/basic-filters.dto.js.map +1 -1
  44. package/dist/dtos/basic-group-filters.dto.d.ts +6 -0
  45. package/dist/dtos/basic-group-filters.dto.d.ts.map +1 -0
  46. package/dist/dtos/basic-group-filters.dto.js +46 -0
  47. package/dist/dtos/basic-group-filters.dto.js.map +1 -0
  48. package/dist/dtos/create-field-metadata.dto.js +2 -2
  49. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  50. package/dist/dtos/create-model-sequence.dto.d.ts +14 -0
  51. package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -0
  52. package/dist/dtos/create-model-sequence.dto.js +90 -0
  53. package/dist/dtos/create-model-sequence.dto.js.map +1 -0
  54. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  55. package/dist/dtos/create-role-metadata.dto.js +1 -0
  56. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  57. package/dist/dtos/get-mcp-url.dto.d.ts +5 -0
  58. package/dist/dtos/get-mcp-url.dto.d.ts.map +1 -0
  59. package/dist/dtos/get-mcp-url.dto.js +31 -0
  60. package/dist/dtos/get-mcp-url.dto.js.map +1 -0
  61. package/dist/dtos/navigation.dto.d.ts +6 -0
  62. package/dist/dtos/navigation.dto.d.ts.map +1 -0
  63. package/dist/dtos/navigation.dto.js +33 -0
  64. package/dist/dtos/navigation.dto.js.map +1 -0
  65. package/dist/dtos/resolve-s3-url.dto.d.ts +5 -5
  66. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
  67. package/dist/dtos/resolve-s3-url.dto.js +7 -7
  68. package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
  69. package/dist/dtos/sign-in.dto.js +3 -3
  70. package/dist/dtos/sign-in.dto.js.map +1 -1
  71. package/dist/dtos/update-model-sequence.dto.d.ts +15 -0
  72. package/dist/dtos/update-model-sequence.dto.d.ts.map +1 -0
  73. package/dist/dtos/update-model-sequence.dto.js +94 -0
  74. package/dist/dtos/update-model-sequence.dto.js.map +1 -0
  75. package/dist/entities/common.entity.d.ts.map +1 -1
  76. package/dist/entities/common.entity.js +6 -4
  77. package/dist/entities/common.entity.js.map +1 -1
  78. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  79. package/dist/entities/field-metadata.entity.js +2 -1
  80. package/dist/entities/field-metadata.entity.js.map +1 -1
  81. package/dist/entities/legacy-common.entity.d.ts.map +1 -1
  82. package/dist/entities/legacy-common.entity.js +6 -4
  83. package/dist/entities/legacy-common.entity.js.map +1 -1
  84. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  85. package/dist/entities/model-metadata.entity.js +5 -1
  86. package/dist/entities/model-metadata.entity.js.map +1 -1
  87. package/dist/entities/model-sequence.entity.d.ts +15 -0
  88. package/dist/entities/model-sequence.entity.d.ts.map +1 -0
  89. package/dist/entities/model-sequence.entity.js +67 -0
  90. package/dist/entities/model-sequence.entity.js.map +1 -0
  91. package/dist/factories/mail.factory.d.ts.map +1 -1
  92. package/dist/factories/mail.factory.js.map +1 -1
  93. package/dist/factories/sms.factory.d.ts +14 -0
  94. package/dist/factories/sms.factory.d.ts.map +1 -0
  95. package/dist/factories/sms.factory.js +53 -0
  96. package/dist/factories/sms.factory.js.map +1 -0
  97. package/dist/helpers/date.helper.d.ts.map +1 -1
  98. package/dist/helpers/date.helper.js +13 -4
  99. package/dist/helpers/date.helper.js.map +1 -1
  100. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.d.ts.map +1 -1
  101. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js +13 -2
  102. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
  103. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +0 -1
  104. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  105. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +4 -9
  106. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  107. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +0 -1
  108. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
  109. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +7 -8
  110. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
  111. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +0 -1
  112. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  113. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +4 -9
  114. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  115. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  116. package/dist/helpers/model-metadata-helper.service.js +6 -2
  117. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  118. package/dist/helpers/module-metadata-helper.service.d.ts +1 -0
  119. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  120. package/dist/helpers/module-metadata-helper.service.js +9 -0
  121. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  122. package/dist/helpers/module.helper.d.ts +1 -0
  123. package/dist/helpers/module.helper.d.ts.map +1 -1
  124. package/dist/helpers/module.helper.js +29 -3
  125. package/dist/helpers/module.helper.js.map +1 -1
  126. package/dist/helpers/solid-registry.d.ts +14 -0
  127. package/dist/helpers/solid-registry.d.ts.map +1 -1
  128. package/dist/helpers/solid-registry.js +7 -0
  129. package/dist/helpers/solid-registry.js.map +1 -1
  130. package/dist/index.d.ts +12 -7
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +13 -8
  133. package/dist/index.js.map +1 -1
  134. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts +1 -0
  135. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
  136. package/dist/jobs/computed-field-evaluation-subscriber.service.js +16 -4
  137. package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +1 -1
  138. package/dist/jobs/database/{sms-publisher-database.service.d.ts → msg91-sms-publisher-database.service.d.ts} +2 -2
  139. package/dist/jobs/database/msg91-sms-publisher-database.service.d.ts.map +1 -0
  140. package/dist/jobs/database/{sms-publisher-database.service.js → msg91-sms-publisher-database.service.js} +8 -8
  141. package/dist/jobs/database/msg91-sms-publisher-database.service.js.map +1 -0
  142. package/dist/jobs/database/{sms-queue-database-options.d.ts → msg91-sms-queue-database-options.d.ts} +1 -1
  143. package/dist/jobs/database/msg91-sms-queue-database-options.d.ts.map +1 -0
  144. package/dist/jobs/database/{sms-queue-database-options.js → msg91-sms-queue-database-options.js} +1 -1
  145. package/dist/jobs/database/msg91-sms-queue-database-options.js.map +1 -0
  146. package/dist/jobs/database/{sms-subscriber-database.service.d.ts → msg91-sms-subscriber-database.service.d.ts} +5 -5
  147. package/dist/jobs/database/msg91-sms-subscriber-database.service.d.ts.map +1 -0
  148. package/dist/jobs/database/{sms-subscriber-database.service.js → msg91-sms-subscriber-database.service.js} +14 -12
  149. package/dist/jobs/database/msg91-sms-subscriber-database.service.js.map +1 -0
  150. package/dist/jobs/database/otp-subscriber-database.service.d.ts +4 -4
  151. package/dist/jobs/database/otp-subscriber-database.service.d.ts.map +1 -1
  152. package/dist/jobs/database/otp-subscriber-database.service.js +6 -4
  153. package/dist/jobs/database/otp-subscriber-database.service.js.map +1 -1
  154. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +3 -3
  155. package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts.map +1 -1
  156. package/dist/jobs/database/twilio-sms-subscriber-database.service.js +6 -4
  157. package/dist/jobs/database/twilio-sms-subscriber-database.service.js.map +1 -1
  158. package/dist/jobs/{sms-publisher.service.d.ts → msg91-otp-publisher.service.d.ts} +2 -2
  159. package/dist/jobs/msg91-otp-publisher.service.d.ts.map +1 -0
  160. package/dist/jobs/{sms-publisher.service.js → msg91-otp-publisher.service.js} +8 -8
  161. package/dist/jobs/msg91-otp-publisher.service.js.map +1 -0
  162. package/dist/jobs/{sms-queue-options.d.ts → msg91-otp-queue-options.d.ts} +1 -1
  163. package/dist/jobs/msg91-otp-queue-options.d.ts.map +1 -0
  164. package/dist/jobs/{otp-queue-options.js → msg91-otp-queue-options.js} +1 -1
  165. package/dist/jobs/msg91-otp-queue-options.js.map +1 -0
  166. package/dist/jobs/{sms-subscriber.service.d.ts → msg91-otp-subscriber.service.d.ts} +6 -6
  167. package/dist/jobs/msg91-otp-subscriber.service.d.ts.map +1 -0
  168. package/dist/jobs/{otp-subscriber.service.js → msg91-otp-subscriber.service.js} +14 -12
  169. package/dist/jobs/msg91-otp-subscriber.service.js.map +1 -0
  170. package/dist/jobs/{otp-publisher.service.d.ts → msg91-sms-publisher.service.d.ts} +2 -2
  171. package/dist/jobs/msg91-sms-publisher.service.d.ts.map +1 -0
  172. package/dist/jobs/{otp-publisher.service.js → msg91-sms-publisher.service.js} +8 -8
  173. package/dist/jobs/msg91-sms-publisher.service.js.map +1 -0
  174. package/dist/jobs/{otp-queue-options.d.ts → msg91-sms-queue-options.d.ts} +1 -1
  175. package/dist/jobs/msg91-sms-queue-options.d.ts.map +1 -0
  176. package/dist/jobs/{sms-queue-options.js → msg91-sms-queue-options.js} +1 -1
  177. package/dist/jobs/msg91-sms-queue-options.js.map +1 -0
  178. package/dist/jobs/{otp-subscriber.service.d.ts → msg91-sms-subscriber.service.d.ts} +7 -7
  179. package/dist/jobs/msg91-sms-subscriber.service.d.ts.map +1 -0
  180. package/dist/jobs/{sms-subscriber.service.js → msg91-sms-subscriber.service.js} +14 -12
  181. package/dist/jobs/msg91-sms-subscriber.service.js.map +1 -0
  182. package/dist/jobs/twilio-sms-subscriber.service.d.ts +3 -3
  183. package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +1 -1
  184. package/dist/jobs/twilio-sms-subscriber.service.js +6 -4
  185. package/dist/jobs/twilio-sms-subscriber.service.js.map +1 -1
  186. package/dist/repository/media.repository.d.ts.map +1 -1
  187. package/dist/repository/media.repository.js +4 -0
  188. package/dist/repository/media.repository.js.map +1 -1
  189. package/dist/repository/model-sequence.repository.d.ts +14 -0
  190. package/dist/repository/model-sequence.repository.d.ts.map +1 -0
  191. package/dist/repository/model-sequence.repository.js +103 -0
  192. package/dist/repository/model-sequence.repository.js.map +1 -0
  193. package/dist/seeders/module-metadata-seeder.service.d.ts +7 -12
  194. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  195. package/dist/seeders/module-metadata-seeder.service.js +87 -27
  196. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  197. package/dist/seeders/seed-data/solid-core-metadata.json +373 -52
  198. package/dist/seeders/system-fields-seeder.service.d.ts +1 -0
  199. package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
  200. package/dist/seeders/system-fields-seeder.service.js +11 -2
  201. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  202. package/dist/seeders/user-seeder.service.d.ts.map +1 -1
  203. package/dist/seeders/user-seeder.service.js +5 -4
  204. package/dist/seeders/user-seeder.service.js.map +1 -1
  205. package/dist/services/action-metadata.service.d.ts.map +1 -1
  206. package/dist/services/action-metadata.service.js +1 -0
  207. package/dist/services/action-metadata.service.js.map +1 -1
  208. package/dist/services/ai-interaction.service.d.ts.map +1 -1
  209. package/dist/services/ai-interaction.service.js +1 -0
  210. package/dist/services/ai-interaction.service.js.map +1 -1
  211. package/dist/services/authentication.service.d.ts +6 -3
  212. package/dist/services/authentication.service.d.ts.map +1 -1
  213. package/dist/services/authentication.service.js +70 -27
  214. package/dist/services/authentication.service.js.map +1 -1
  215. package/dist/services/chatter-message-details.service.d.ts.map +1 -1
  216. package/dist/services/chatter-message-details.service.js +1 -0
  217. package/dist/services/chatter-message-details.service.js.map +1 -1
  218. package/dist/services/chatter-message.service.d.ts.map +1 -1
  219. package/dist/services/chatter-message.service.js +7 -3
  220. package/dist/services/chatter-message.service.js.map +1 -1
  221. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +7 -5
  222. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
  223. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +15 -0
  224. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -0
  225. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +72 -0
  226. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -0
  227. package/dist/services/crud-helper.service.d.ts +23 -6
  228. package/dist/services/crud-helper.service.d.ts.map +1 -1
  229. package/dist/services/crud-helper.service.js +257 -45
  230. package/dist/services/crud-helper.service.js.map +1 -1
  231. package/dist/services/crud.service.d.ts +4 -3
  232. package/dist/services/crud.service.d.ts.map +1 -1
  233. package/dist/services/crud.service.js +53 -24
  234. package/dist/services/crud.service.js.map +1 -1
  235. package/dist/services/database/database-bootstrap.service.d.ts +12 -0
  236. package/dist/services/database/database-bootstrap.service.d.ts.map +1 -0
  237. package/dist/services/database/database-bootstrap.service.js +115 -0
  238. package/dist/services/database/database-bootstrap.service.js.map +1 -0
  239. package/dist/services/email-template.service.d.ts +7 -7
  240. package/dist/services/email-template.service.d.ts.map +1 -1
  241. package/dist/services/email-template.service.js +8 -7
  242. package/dist/services/email-template.service.js.map +1 -1
  243. package/dist/services/excel.service.d.ts +11 -0
  244. package/dist/services/excel.service.d.ts.map +1 -1
  245. package/dist/services/excel.service.js +104 -0
  246. package/dist/services/excel.service.js.map +1 -1
  247. package/dist/services/field-metadata.service.d.ts +4 -1
  248. package/dist/services/field-metadata.service.d.ts.map +1 -1
  249. package/dist/services/field-metadata.service.js +35 -30
  250. package/dist/services/field-metadata.service.js.map +1 -1
  251. package/dist/services/file.service.d.ts +1 -0
  252. package/dist/services/file.service.d.ts.map +1 -1
  253. package/dist/services/file.service.js +9 -0
  254. package/dist/services/file.service.js.map +1 -1
  255. package/dist/services/fixtures.service.d.ts +13 -0
  256. package/dist/services/fixtures.service.d.ts.map +1 -0
  257. package/dist/services/fixtures.service.js +95 -0
  258. package/dist/services/fixtures.service.js.map +1 -0
  259. package/dist/services/genai/ingest-metadata.service.d.ts.map +1 -1
  260. package/dist/services/genai/ingest-metadata.service.js +1 -1
  261. package/dist/services/genai/ingest-metadata.service.js.map +1 -1
  262. package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
  263. package/dist/services/import-transaction-error-log.service.js +1 -0
  264. package/dist/services/import-transaction-error-log.service.js.map +1 -1
  265. package/dist/services/import-transaction.service.d.ts.map +1 -1
  266. package/dist/services/import-transaction.service.js +7 -1
  267. package/dist/services/import-transaction.service.js.map +1 -1
  268. package/dist/services/list-of-values.service.d.ts +2 -2
  269. package/dist/services/list-of-values.service.d.ts.map +1 -1
  270. package/dist/services/list-of-values.service.js +2 -1
  271. package/dist/services/list-of-values.service.js.map +1 -1
  272. package/dist/services/locale.service.d.ts.map +1 -1
  273. package/dist/services/locale.service.js +1 -0
  274. package/dist/services/locale.service.js.map +1 -1
  275. package/dist/services/mail/smtp-email.service.js +0 -1
  276. package/dist/services/mail/smtp-email.service.js.map +1 -1
  277. package/dist/services/media.service.d.ts +3 -3
  278. package/dist/services/media.service.d.ts.map +1 -1
  279. package/dist/services/media.service.js +6 -4
  280. package/dist/services/media.service.js.map +1 -1
  281. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  282. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +17 -6
  283. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  284. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  285. package/dist/services/mediaStorageProviders/file-storage-provider.js +0 -13
  286. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  287. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  288. package/dist/services/menu-item-metadata.service.js +4 -0
  289. package/dist/services/menu-item-metadata.service.js.map +1 -1
  290. package/dist/services/model-metadata.service.d.ts +28 -1
  291. package/dist/services/model-metadata.service.d.ts.map +1 -1
  292. package/dist/services/model-metadata.service.js +111 -44
  293. package/dist/services/model-metadata.service.js.map +1 -1
  294. package/dist/services/model-sequence.service.d.ts +23 -0
  295. package/dist/services/model-sequence.service.d.ts.map +1 -0
  296. package/dist/services/model-sequence.service.js +55 -0
  297. package/dist/services/model-sequence.service.js.map +1 -0
  298. package/dist/services/module-metadata.service.d.ts +1 -0
  299. package/dist/services/module-metadata.service.d.ts.map +1 -1
  300. package/dist/services/module-metadata.service.js +35 -1
  301. package/dist/services/module-metadata.service.js.map +1 -1
  302. package/dist/services/permission-metadata.service.d.ts +5 -5
  303. package/dist/services/permission-metadata.service.d.ts.map +1 -1
  304. package/dist/services/permission-metadata.service.js +6 -5
  305. package/dist/services/permission-metadata.service.js.map +1 -1
  306. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  307. package/dist/services/queues/database-subscriber.service.js +2 -1
  308. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  309. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  310. package/dist/services/queues/rabbitmq-subscriber.service.js +2 -2
  311. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  312. package/dist/services/role-metadata.service.d.ts.map +1 -1
  313. package/dist/services/role-metadata.service.js +1 -0
  314. package/dist/services/role-metadata.service.js.map +1 -1
  315. package/dist/services/scheduled-job.service.d.ts +6 -6
  316. package/dist/services/scheduled-job.service.d.ts.map +1 -1
  317. package/dist/services/scheduled-job.service.js +8 -8
  318. package/dist/services/scheduled-job.service.js.map +1 -1
  319. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  320. package/dist/services/scheduled-jobs/scheduler.service.js +4 -0
  321. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  322. package/dist/services/security-rule.service.d.ts.map +1 -1
  323. package/dist/services/security-rule.service.js +1 -0
  324. package/dist/services/security-rule.service.js.map +1 -1
  325. package/dist/services/selection-providers/list-of-models-selection-provider.service.d.ts.map +1 -1
  326. package/dist/services/selection-providers/list-of-models-selection-provider.service.js +4 -0
  327. package/dist/services/selection-providers/list-of-models-selection-provider.service.js.map +1 -1
  328. package/dist/services/setting.service.d.ts +7 -5
  329. package/dist/services/setting.service.d.ts.map +1 -1
  330. package/dist/services/setting.service.js +28 -48
  331. package/dist/services/setting.service.js.map +1 -1
  332. package/dist/services/sms/Msg91BaseSMSService.js +6 -6
  333. package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
  334. package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
  335. package/dist/services/sms/Msg91OTPService.js +3 -1
  336. package/dist/services/sms/Msg91OTPService.js.map +1 -1
  337. package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
  338. package/dist/services/sms/Msg91SMSService.js +3 -1
  339. package/dist/services/sms/Msg91SMSService.js.map +1 -1
  340. package/dist/services/sms/TwilioSMSService.d.ts.map +1 -1
  341. package/dist/services/sms/TwilioSMSService.js +2 -0
  342. package/dist/services/sms/TwilioSMSService.js.map +1 -1
  343. package/dist/services/sms-template.service.d.ts +7 -7
  344. package/dist/services/sms-template.service.d.ts.map +1 -1
  345. package/dist/services/sms-template.service.js +8 -7
  346. package/dist/services/sms-template.service.js.map +1 -1
  347. package/dist/services/solid-introspect.service.d.ts +5 -13
  348. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  349. package/dist/services/solid-introspect.service.js +18 -22
  350. package/dist/services/solid-introspect.service.js.map +1 -1
  351. package/dist/services/solid-ts-morph.service.js +2 -2
  352. package/dist/services/solid-ts-morph.service.js.map +1 -1
  353. package/dist/services/user-activity-history.service.d.ts.map +1 -1
  354. package/dist/services/user-activity-history.service.js +1 -0
  355. package/dist/services/user-activity-history.service.js.map +1 -1
  356. package/dist/services/user-view-metadata.service.d.ts.map +1 -1
  357. package/dist/services/user-view-metadata.service.js +3 -2
  358. package/dist/services/user-view-metadata.service.js.map +1 -1
  359. package/dist/services/user.service.d.ts.map +1 -1
  360. package/dist/services/user.service.js +1 -0
  361. package/dist/services/user.service.js.map +1 -1
  362. package/dist/services/view-metadata.service.d.ts +1 -1
  363. package/dist/services/view-metadata.service.d.ts.map +1 -1
  364. package/dist/services/view-metadata.service.js +3 -1
  365. package/dist/services/view-metadata.service.js.map +1 -1
  366. package/dist/solid-core-cli-db.module.d.ts.map +1 -1
  367. package/dist/solid-core-cli-db.module.js +5 -2
  368. package/dist/solid-core-cli-db.module.js.map +1 -1
  369. package/dist/solid-core-cli.module.js +1 -1
  370. package/dist/solid-core-cli.module.js.map +1 -1
  371. package/dist/solid-core.module.d.ts.map +1 -1
  372. package/dist/solid-core.module.js +40 -13
  373. package/dist/solid-core.module.js.map +1 -1
  374. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  375. package/dist/subscribers/audit.subscriber.js +5 -1
  376. package/dist/subscribers/audit.subscriber.js.map +1 -1
  377. package/dist/subscribers/computed-entity-field.subscriber.d.ts +4 -2
  378. package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
  379. package/dist/subscribers/computed-entity-field.subscriber.js +53 -12
  380. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  381. package/dist/subscribers/scheduled-job.subscriber.d.ts.map +1 -1
  382. package/dist/subscribers/scheduled-job.subscriber.js +1 -1
  383. package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
  384. package/dist/transformers/typeorm/local-date-time-transformer.d.ts +5 -0
  385. package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -0
  386. package/dist/transformers/typeorm/local-date-time-transformer.js +48 -0
  387. package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -0
  388. package/dist/tsconfig.tsbuildinfo +1 -1
  389. package/docs/grouping-enhancements.md +89 -0
  390. package/package.json +1 -1
  391. package/src/commands/fixtures/fixtures-setup.command.ts +44 -0
  392. package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
  393. package/src/commands/refresh-model.command.ts +3 -1
  394. package/src/config/cache.options.ts +6 -3
  395. package/src/config/iam.config.ts +2 -1
  396. package/src/constants/error-messages.ts +7 -1
  397. package/src/controllers/model-metadata.controller.ts +21 -1
  398. package/src/controllers/model-sequence.controller.ts +93 -0
  399. package/src/controllers/setting.controller.ts +62 -54
  400. package/src/decorators/sms-provider.decorator.ts +7 -0
  401. package/src/dtos/basic-filters.dto.ts +6 -1
  402. package/src/dtos/basic-group-filters.dto.ts +23 -0
  403. package/src/dtos/create-field-metadata.dto.ts +1 -1
  404. package/src/dtos/create-model-sequence.dto.ts +51 -0
  405. package/src/dtos/create-role-metadata.dto.ts +16 -3
  406. package/src/dtos/get-mcp-url.dto.ts +13 -0
  407. package/src/dtos/navigation.dto.ts +14 -0
  408. package/src/dtos/resolve-s3-url.dto.ts +9 -11
  409. package/src/dtos/sign-in.dto.ts +3 -3
  410. package/src/dtos/update-model-sequence.dto.ts +53 -0
  411. package/src/entities/common.entity.ts +8 -8
  412. package/src/entities/field-metadata.entity.ts +1 -1
  413. package/src/entities/legacy-common.entity.ts +8 -6
  414. package/src/entities/model-metadata.entity.ts +1 -1
  415. package/src/entities/model-sequence.entity.ts +32 -0
  416. package/src/factories/mail.factory.ts +0 -1
  417. package/src/factories/sms.factory.ts +43 -0
  418. package/src/helpers/date.helper.ts +38 -9
  419. package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +18 -5
  420. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +9 -9
  421. package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +16 -8
  422. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +9 -9
  423. package/src/helpers/model-metadata-helper.service.ts +6 -4
  424. package/src/helpers/module-metadata-helper.service.ts +18 -1
  425. package/src/helpers/module.helper.ts +40 -5
  426. package/src/helpers/solid-registry.ts +23 -0
  427. package/src/index.ts +12 -7
  428. package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
  429. package/src/jobs/database/{sms-publisher-database.service.ts → msg91-sms-publisher-database.service.ts} +2 -2
  430. package/src/jobs/database/{sms-subscriber-database.service.ts → msg91-sms-subscriber-database.service.ts} +9 -4
  431. package/src/jobs/database/otp-subscriber-database.service.ts +8 -2
  432. package/src/jobs/database/twilio-sms-subscriber-database.service.ts +5 -2
  433. package/src/jobs/{otp-publisher.service.ts → msg91-otp-publisher.service.ts} +2 -2
  434. package/src/jobs/{otp-subscriber.service.ts → msg91-otp-subscriber.service.ts} +10 -4
  435. package/src/jobs/{sms-publisher.service.ts → msg91-sms-publisher.service.ts} +2 -2
  436. package/src/jobs/{sms-subscriber.service.ts → msg91-sms-subscriber.service.ts} +9 -4
  437. package/src/jobs/twilio-sms-subscriber.service.ts +6 -2
  438. package/src/repository/media.repository.ts +3 -2
  439. package/src/repository/model-sequence.repository.ts +97 -0
  440. package/src/seeders/module-metadata-seeder.service.ts +133 -34
  441. package/src/seeders/seed-data/email-templates/email-on-signup.handlebars.html +155 -0
  442. package/src/seeders/seed-data/sms-templates/text-on-signup.handlebars.txt +10 -0
  443. package/src/seeders/seed-data/solid-core-metadata.json +374 -53
  444. package/src/seeders/system-fields-seeder.service.ts +6 -2
  445. package/src/seeders/user-seeder.service.ts +5 -4
  446. package/src/services/action-metadata.service.ts +3 -2
  447. package/src/services/ai-interaction.service.ts +2 -1
  448. package/src/services/authentication.service.ts +119 -24
  449. package/src/services/chatter-message-details.service.ts +2 -1
  450. package/src/services/chatter-message.service.ts +10 -4
  451. package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +9 -9
  452. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
  453. package/src/services/crud-helper.service.ts +287 -49
  454. package/src/services/crud.service.ts +95 -45
  455. package/src/services/database/database-bootstrap.service.ts +91 -0
  456. package/src/services/email-template.service.ts +11 -13
  457. package/src/services/excel.service.ts +152 -3
  458. package/src/services/field-metadata.service.ts +102 -55
  459. package/src/services/file.service.ts +9 -0
  460. package/src/services/fixtures.service.ts +108 -0
  461. package/src/services/genai/ingest-metadata.service.ts +4 -3
  462. package/src/services/import-transaction-error-log.service.ts +2 -1
  463. package/src/services/import-transaction.service.ts +8 -4
  464. package/src/services/list-of-values.service.ts +4 -4
  465. package/src/services/locale.service.ts +2 -1
  466. package/src/services/mail/smtp-email.service.ts +1 -1
  467. package/src/services/media.service.ts +10 -11
  468. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +22 -7
  469. package/src/services/mediaStorageProviders/file-storage-provider.ts +18 -13
  470. package/src/services/menu-item-metadata.service.ts +6 -2
  471. package/src/services/model-metadata.service.ts +201 -44
  472. package/src/services/model-sequence.service.ts +33 -0
  473. package/src/services/module-metadata.service.ts +49 -2
  474. package/src/services/permission-metadata.service.ts +8 -9
  475. package/src/services/queues/database-subscriber.service.ts +3 -1
  476. package/src/services/queues/rabbitmq-subscriber.service.ts +4 -2
  477. package/src/services/role-metadata.service.ts +1 -0
  478. package/src/services/scheduled-job.service.ts +9 -9
  479. package/src/services/scheduled-jobs/scheduler.service.ts +5 -0
  480. package/src/services/security-rule.service.ts +1 -0
  481. package/src/services/selection-providers/list-of-models-selection-provider.service.ts +5 -2
  482. package/src/services/setting.service.ts +42 -55
  483. package/src/services/sms/Msg91BaseSMSService.ts +6 -6
  484. package/src/services/sms/Msg91OTPService.ts +3 -2
  485. package/src/services/sms/Msg91SMSService.ts +3 -1
  486. package/src/services/sms/TwilioSMSService.ts +3 -3
  487. package/src/services/sms-template.service.ts +11 -13
  488. package/src/services/solid-introspect.service.ts +28 -19
  489. package/src/services/solid-ts-morph.service.ts +2 -2
  490. package/src/services/user-activity-history.service.ts +3 -2
  491. package/src/services/user-view-metadata.service.ts +4 -3
  492. package/src/services/user.service.ts +2 -1
  493. package/src/services/view-metadata.service.ts +5 -4
  494. package/src/solid-core-cli-db.module.ts +5 -4
  495. package/src/solid-core-cli.module.ts +2 -2
  496. package/src/solid-core.module.ts +42 -13
  497. package/src/subscribers/audit.subscriber.ts +3 -2
  498. package/src/subscribers/computed-entity-field.subscriber.ts +60 -17
  499. package/src/subscribers/scheduled-job.subscriber.ts +9 -2
  500. package/src/transformers/typeorm/local-date-time-transformer.ts +55 -0
  501. package/dist/jobs/database/sms-publisher-database.service.d.ts.map +0 -1
  502. package/dist/jobs/database/sms-publisher-database.service.js.map +0 -1
  503. package/dist/jobs/database/sms-queue-database-options.d.ts.map +0 -1
  504. package/dist/jobs/database/sms-queue-database-options.js.map +0 -1
  505. package/dist/jobs/database/sms-subscriber-database.service.d.ts.map +0 -1
  506. package/dist/jobs/database/sms-subscriber-database.service.js.map +0 -1
  507. package/dist/jobs/otp-publisher.service.d.ts.map +0 -1
  508. package/dist/jobs/otp-publisher.service.js.map +0 -1
  509. package/dist/jobs/otp-queue-options.d.ts.map +0 -1
  510. package/dist/jobs/otp-queue-options.js.map +0 -1
  511. package/dist/jobs/otp-subscriber.service.d.ts.map +0 -1
  512. package/dist/jobs/otp-subscriber.service.js.map +0 -1
  513. package/dist/jobs/sms-publisher.service.d.ts.map +0 -1
  514. package/dist/jobs/sms-publisher.service.js.map +0 -1
  515. package/dist/jobs/sms-queue-options.d.ts.map +0 -1
  516. package/dist/jobs/sms-queue-options.js.map +0 -1
  517. package/dist/jobs/sms-subscriber.service.d.ts.map +0 -1
  518. package/dist/jobs/sms-subscriber.service.js.map +0 -1
  519. /package/sql/{mssql → default/mssql}/proc_CleanupModelMetadata.sql +0 -0
  520. /package/sql/{mssql → default/mssql}/proc_CleanupModuleMetadata.sql +0 -0
  521. /package/sql/{mssql/scratchpad.sql → default/mssql/scratchpad.sql.txt} +0 -0
  522. /package/sql/{postgres → default/postgres}/proc_CleanupModelMetadata.sql +0 -0
  523. /package/sql/{postgres → default/postgres}/proc_CleanupModuleMetadata.sql +0 -0
  524. /package/sql/{postgres/scratchpad.sql → default/postgres/scratchpad.sql.txt} +0 -0
  525. /package/src/jobs/database/{sms-queue-database-options.ts → msg91-sms-queue-database-options.ts} +0 -0
  526. /package/src/jobs/{otp-queue-options.ts → msg91-otp-queue-options.ts} +0 -0
  527. /package/src/jobs/{sms-queue-options.ts → msg91-sms-queue-options.ts} +0 -0
@@ -22,9 +22,10 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
22
22
  ) { }
23
23
 
24
24
  async retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
25
- if (!(entity instanceof CommonEntity)) {
26
- throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
27
- }
25
+ // if (!(entity instanceof CommonEntity)) {
26
+ // throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
27
+ // }
28
+ //@ts-ignore
28
29
  const media = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
29
30
  // Add the full URL to the media
30
31
  media.forEach(m => {
@@ -34,9 +35,9 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
34
35
  }
35
36
 
36
37
  async store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
37
- if (!(entity instanceof CommonEntity)) {
38
- throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
39
- }
38
+ // if (!(entity instanceof CommonEntity)) {
39
+ // throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
40
+ // }
40
41
  const result: Media[] = [];
41
42
  for (const file of files) {
42
43
  // Store the file in the configured file storage directory
@@ -46,7 +47,8 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
46
47
 
47
48
  // Create an entry in the media table
48
49
  const mediaEntity = await this.mediaRepository.createMedia({
49
- entityId: entity.id,
50
+ //@ts-ignore
51
+ entityId: entity.id,
50
52
  modelMetadataId: mediaFieldMetadata.model.id,
51
53
  relativeUri: this.getFileName(file),
52
54
  mimeType: file.mimetype,
@@ -62,15 +64,16 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
62
64
  }
63
65
 
64
66
  async storeStreams(streamPairs: [Readable, string][], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
65
- if (!(entity instanceof CommonEntity)) {
66
- throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
67
- }
67
+ // if (!(entity instanceof CommonEntity)) {
68
+ // throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
69
+ // }
68
70
  const result: Media[] = [];
69
71
  for (const pair of streamPairs) {
70
72
  const stream = pair[0];
71
73
  const fileName = pair[1];
72
74
  this.fileService.writeStreamToFile(stream, this.getFullFilePath(fileName));
73
75
  const mediaEntity = await this.mediaRepository.createMedia({
76
+ //@ts-ignore
74
77
  entityId: entity.id,
75
78
  modelMetadataId: mediaFieldMetadata.model.id,
76
79
  relativeUri: fileName,
@@ -83,10 +86,12 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
83
86
  }
84
87
 
85
88
  async delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void> {
86
- if (!(entity instanceof CommonEntity)) {
87
- throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
88
- }
89
+ // if (!(entity instanceof CommonEntity)) {
90
+ // throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
91
+ // }
92
+ //@ts-ignore
89
93
  const existingMedia = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
94
+ //@ts-ignore
90
95
  this.mediaRepository.deleteByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id);
91
96
  existingMedia.forEach(media => {
92
97
  this.fileService.deleteFile(this.getFullFilePath(media.relativeUri));
@@ -1,7 +1,7 @@
1
- import { Injectable } from '@nestjs/common';
1
+ import { forwardRef, Inject, Injectable } from '@nestjs/common';
2
2
  import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
3
3
  import { DiscoveryService, ModuleRef } from "@nestjs/core";
4
- import { EntityManager, Repository } from 'typeorm';
4
+ import { EntityManager, In, Repository } from 'typeorm';
5
5
  import { CRUDService } from 'src/services/crud.service';
6
6
  import { ModelMetadataService } from 'src/services/model-metadata.service';
7
7
  import { ModuleMetadataService } from 'src/services/module-metadata.service';
@@ -21,6 +21,7 @@ import { SavedFiltersRepository } from 'src/repository/saved-filters.repository'
21
21
  @Injectable()
22
22
  export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
23
23
  constructor(
24
+ @Inject(forwardRef(() => ModelMetadataService))
24
25
  readonly modelMetadataService: ModelMetadataService,
25
26
  readonly moduleMetadataService: ModuleMetadataService,
26
27
  readonly configService: ConfigService,
@@ -165,6 +166,9 @@ export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
165
166
  if (!i.parentMenuItem) {
166
167
  return true
167
168
  } else {
169
+ if(i.action.type === 'custom'){
170
+ return true;
171
+ }
168
172
  return this.crudHelperService.hasReadPermissionOnModel(activeUser, i.action.model.singularName)
169
173
  }
170
174
  });
@@ -1,4 +1,4 @@
1
- import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';
1
+ import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';
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 { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';
@@ -30,6 +30,9 @@ import { CrudHelperService } from './crud-helper.service';
30
30
  import { FieldMetadataService } from './field-metadata.service';
31
31
  import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
32
32
  import { RoleMetadataService } from './role-metadata.service';
33
+ import { NavigationDto } from 'src/dtos/navigation.dto';
34
+ import { SolidIntrospectService } from './solid-introspect.service';
35
+ import { CRUDService } from './crud.service';
33
36
 
34
37
  @Injectable()
35
38
  export class ModelMetadataService {
@@ -39,6 +42,7 @@ export class ModelMetadataService {
39
42
  // private readonly modelMetadataRepo: Repository<ModelMetadata>,
40
43
  // @InjectRepository(FieldMetadata)
41
44
  // private readonly fieldMetadataRepo: Repository<FieldMetadata>,
45
+ @Inject(forwardRef(() => ModelMetadataRepository))
42
46
  private readonly modelMetadataRepo: ModelMetadataRepository,
43
47
  private readonly fieldMetadataRepo: FieldMetadataRepository,
44
48
  private readonly schematicService: SchematicService,
@@ -49,6 +53,8 @@ export class ModelMetadataService {
49
53
  private readonly fieldMetadataService: FieldMetadataService,
50
54
  private readonly roleService: RoleMetadataService,
51
55
  private readonly moduleMetadataHelperService: ModuleMetadataHelperService,
56
+ readonly introspectService: SolidIntrospectService,
57
+
52
58
  // No longer used.
53
59
  // private readonly generateCodePublihser: GenerateCodePublisherDatabase,
54
60
  ) { }
@@ -610,57 +616,62 @@ export class ModelMetadataService {
610
616
  }
611
617
  }
612
618
 
619
+ await this.dataSource.query(
620
+ `CALL cleanup_model_metadata($1, $2)`,
621
+ [modelEntity.singularName, true],
622
+ );
623
+
613
624
  // Delete the permissions, menu, actions & views related to this model.
614
- const controllerName = `${classify(modelEntity.singularName)}Controller`;
615
- const permissionNames = [
616
- `${controllerName}.delete`,
617
- `${controllerName}.deleteMany`,
618
- `${controllerName}.findOne`,
619
- `${controllerName}.findMany`,
620
- `${controllerName}.recover`,
621
- `${controllerName}.recoverMany`,
622
- `${controllerName}.partialUpdate`,
623
- `${controllerName}.update`,
624
- `${controllerName}.insertMany`,
625
- `${controllerName}.create`,
626
- ];
627
- const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);
628
- const permissionsToDelete = await permissionsRepo.find({
629
- where: { name: In(permissionNames) },
630
- relations: ['roles'],
631
- });
625
+ // const controllerName = `${classify(modelEntity.singularName)}Controller`;
626
+ // const permissionNames = [
627
+ // `${controllerName}.delete`,
628
+ // `${controllerName}.deleteMany`,
629
+ // `${controllerName}.findOne`,
630
+ // `${controllerName}.findMany`,
631
+ // `${controllerName}.recover`,
632
+ // `${controllerName}.recoverMany`,
633
+ // `${controllerName}.partialUpdate`,
634
+ // `${controllerName}.update`,
635
+ // `${controllerName}.insertMany`,
636
+ // `${controllerName}.create`,
637
+ // ];
638
+ // const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);
639
+ // const permissionsToDelete = await permissionsRepo.find({
640
+ // where: { name: In(permissionNames) },
641
+ // relations: ['roles'],
642
+ // });
632
643
 
633
644
  // Remove role associations first
634
- for (const permission of permissionsToDelete) {
635
- if (permission.roles?.length) {
636
- await this.dataSource
637
- .createQueryBuilder()
638
- .relation(PermissionMetadata, 'roles')
639
- .of(permission) // permission instance or its ID
640
- .remove(permission.roles); // remove all linked roles
641
- }
642
- }
645
+ // for (const permission of permissionsToDelete) {
646
+ // if (permission.roles?.length) {
647
+ // await this.dataSource
648
+ // .createQueryBuilder()
649
+ // .relation(PermissionMetadata, 'roles')
650
+ // .of(permission) // permission instance or its ID
651
+ // .remove(permission.roles); // remove all linked roles
652
+ // }
653
+ // }
643
654
 
644
- await permissionsRepo.remove(permissionsToDelete);
655
+ // await permissionsRepo.remove(permissionsToDelete);
645
656
 
646
657
  // Delete actions
647
- const actionRepo = this.dataSource.getRepository(ActionMetadata);
648
- const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });
649
- await actionRepo.delete({ model: { id: modelEntity.id } });
650
-
651
- // Delete menu items
652
- const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);
653
- if (action) {
654
- const menuItems = await menuItemRepo.find({ where: { action: { id: action.id } } });
655
- for (let i = 0; i < menuItems.length; i++) {
656
- const menuItem = menuItems[i];
657
- await menuItemRepo.remove(menuItem);
658
- }
659
- }
658
+ // const actionRepo = this.dataSource.getRepository(ActionMetadata);
659
+ // const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });
660
+ // await actionRepo.delete({ model: { id: modelEntity.id } });
661
+
662
+ // // Delete menu items
663
+ // const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);
664
+ // if (action) {
665
+ // const menuItems = await menuItemRepo.find({ where: { action: { id: action.id } } });
666
+ // for (let i = 0; i < menuItems.length; i++) {
667
+ // const menuItem = menuItems[i];
668
+ // await menuItemRepo.remove(menuItem);
669
+ // }
670
+ // }
660
671
 
661
672
  // Delete view
662
- const viewRepo = this.dataSource.getRepository(ViewMetadata);
663
- await viewRepo.delete({ model: { id: modelEntity.id } })
673
+ // const viewRepo = this.dataSource.getRepository(ViewMetadata);
674
+ // await viewRepo.delete({ model: { id: modelEntity.id } })
664
675
 
665
676
  // <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic
666
677
  const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module?.name);
@@ -1285,4 +1296,150 @@ export class ModelMetadataService {
1285
1296
  });
1286
1297
  }
1287
1298
 
1299
+ async navigation(navigationDto: NavigationDto) {
1300
+ const { recordId, modelName, ...basicFilterDto } = navigationDto;
1301
+
1302
+ const modelServiceInstanceWrapper =
1303
+ this.introspectService.getProvider(`${classify(modelName)}Service`);
1304
+
1305
+ if (!modelServiceInstanceWrapper) {
1306
+ throw new BadRequestException(
1307
+ `Invalid model name (${modelName}) specified in Navigation.`,
1308
+ );
1309
+ }
1310
+
1311
+ const modelService: CRUDService<any> = modelServiceInstanceWrapper.instance;
1312
+
1313
+ const recs = await modelService.find(basicFilterDto);
1314
+
1315
+ // navigation only works for paginated results
1316
+ if (!('records' in recs) || !('currentPage' in recs.meta)) {
1317
+ return {
1318
+ prev: null,
1319
+ next: null,
1320
+ meta: null,
1321
+ };
1322
+ }
1323
+
1324
+ const { records, meta } = recs;
1325
+
1326
+ // --------------------
1327
+ // Find record index in page
1328
+ // --------------------
1329
+ const index = records.findIndex(r => String(r.id) === String(recordId));
1330
+
1331
+ if (index === -1) {
1332
+ throw new BadRequestException(`Record not found in current page`);
1333
+ }
1334
+
1335
+ // --------------------
1336
+ // Pagination calculations
1337
+ // --------------------
1338
+ const limit = meta.perPage;
1339
+ const currentOffset = (meta.currentPage - 1) * meta.perPage;
1340
+ const currentIndexGlobal = currentOffset + index + 1;
1341
+
1342
+
1343
+ let prev: { record: any; offset: number; limit: number } | null = null;
1344
+ let next: { record: any; offset: number; limit: number } | null = null;
1345
+
1346
+ // --------------------
1347
+ // PREV
1348
+ // --------------------
1349
+ if (index > 0) {
1350
+ prev = {
1351
+ record: records[index - 1],
1352
+ offset: currentOffset,
1353
+ limit,
1354
+ };
1355
+ } else if (meta.prevPage !== null) {
1356
+ const prevOffset = (meta.prevPage - 1) * meta.perPage;
1357
+
1358
+ const prevPage = await modelService.find({
1359
+ ...basicFilterDto,
1360
+ offset: prevOffset,
1361
+ limit,
1362
+ });
1363
+
1364
+ if ('records' in prevPage) {
1365
+ const record = prevPage.records.at(-1) ?? null;
1366
+ if (record) {
1367
+ prev = {
1368
+ record,
1369
+ offset: prevOffset,
1370
+ limit,
1371
+ };
1372
+ }
1373
+ }
1374
+ }
1375
+
1376
+ // --------------------
1377
+ // NEXT
1378
+ // --------------------
1379
+ if (index < records.length - 1) {
1380
+ next = {
1381
+ record: records[index + 1],
1382
+ offset: currentOffset,
1383
+ limit,
1384
+ };
1385
+ } else if (meta.nextPage !== null) {
1386
+ const nextOffset = (meta.nextPage - 1) * meta.perPage;
1387
+
1388
+ const nextPage = await modelService.find({
1389
+ ...basicFilterDto,
1390
+ offset: nextOffset,
1391
+ limit,
1392
+ });
1393
+
1394
+ if ('records' in nextPage) {
1395
+ const record = nextPage.records[0] ?? null;
1396
+ if (record) {
1397
+ next = {
1398
+ record,
1399
+ offset: nextOffset,
1400
+ limit,
1401
+ };
1402
+ }
1403
+ }
1404
+ }
1405
+
1406
+ // --------------------
1407
+ // RESPONSE
1408
+ // --------------------
1409
+ return {
1410
+ prev: prev
1411
+ ? {
1412
+ recordId: prev.record.id,
1413
+ offset: prev.offset,
1414
+ limit: prev.limit,
1415
+ }
1416
+ : null,
1417
+
1418
+ next: next
1419
+ ? {
1420
+ recordId: next.record.id,
1421
+ offset: next.offset,
1422
+ limit: next.limit,
1423
+ }
1424
+ : null,
1425
+ meta: {
1426
+ totalRecords: meta.totalRecords,
1427
+ perPage: meta.perPage,
1428
+ currentPage: meta.currentPage,
1429
+ totalPages: meta.totalPages,
1430
+
1431
+ currentIndexInPage: index,
1432
+ currentIndexGlobal,
1433
+
1434
+ hasPrev: !!prev,
1435
+ hasNext: !!next,
1436
+
1437
+ prevPage: meta.prevPage,
1438
+ nextPage: meta.nextPage,
1439
+ },
1440
+
1441
+ };
1442
+ }
1443
+
1444
+
1288
1445
  }
@@ -0,0 +1,33 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
3
+ import { DiscoveryService, ModuleRef } from "@nestjs/core";
4
+ import { EntityManager, Repository } from 'typeorm';
5
+
6
+ import { CRUDService } from 'src/services/crud.service';
7
+ import { ModelMetadataService } from 'src/services/model-metadata.service';
8
+ import { ModuleMetadataService } from 'src/services/module-metadata.service';
9
+ import { ConfigService } from '@nestjs/config';
10
+ import { FileService } from 'src/services/file.service';
11
+ import { CrudHelperService } from 'src/services/crud-helper.service';
12
+
13
+ import { ModelSequence } from '../entities/model-sequence.entity';
14
+ import { ModelSequenceRepository } from '../repository/model-sequence.repository';
15
+
16
+ @Injectable()
17
+ export class ModelSequenceService extends CRUDService<ModelSequence>{
18
+ constructor(
19
+ readonly modelMetadataService: ModelMetadataService,
20
+ readonly moduleMetadataService: ModuleMetadataService,
21
+ readonly configService: ConfigService,
22
+ readonly fileService: FileService,
23
+ readonly discoveryService: DiscoveryService,
24
+ readonly crudHelperService: CrudHelperService,
25
+ @InjectEntityManager()
26
+ readonly entityManager: EntityManager,
27
+ readonly repo: ModelSequenceRepository,
28
+ readonly moduleRef: ModuleRef
29
+
30
+ ) {
31
+ super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService,entityManager, repo, 'modelSequence', 'solid-core', moduleRef);
32
+ }
33
+ }
@@ -4,7 +4,7 @@ import { DataSource, EntityManager, Repository, SelectQueryBuilder } from 'typeo
4
4
  import { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';
5
5
  import { ModuleMetadata } from '../entities/module-metadata.entity';
6
6
 
7
- import { classify } from '@angular-devkit/core/src/utils/strings';
7
+ import { classify, dasherize } from '@angular-devkit/core/src/utils/strings';
8
8
  import { ConfigService } from '@nestjs/config';
9
9
  import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
10
10
  import * as path from 'path'; // To handle file paths
@@ -320,7 +320,54 @@ export class ModuleMetadataService {
320
320
 
321
321
  async remove(id: number) {
322
322
  const entity = await this.findOne(id);
323
- return this.moduleMetadataRepo.remove(entity);
323
+ await this.cleanupOnDelete(entity.id);
324
+ const r = await this.moduleMetadataRepo.remove(entity);
325
+ return r
326
+
327
+ }
328
+
329
+
330
+ async cleanupOnDelete(moduleEntityId: number) {
331
+ const moduleEntity = await this.moduleMetadataRepo.findOne({
332
+ where: {
333
+ // @ts-ignore
334
+ id: moduleEntityId,
335
+ }
336
+ });
337
+
338
+ if (!moduleEntity) {
339
+ this.logger.log(`Invalid moduleEntityId: ${moduleEntityId} unable to resolve model metadata`);
340
+ return;
341
+ }
342
+ if (moduleEntity.id !== moduleEntityId) {
343
+ this.logger.log(`Invalid moduleEntityId: ${moduleEntityId} unable to resolve model metadata id ${moduleEntity.id} not matching with the one passed as argument ${moduleEntityId}`);
344
+ return;
345
+ }
346
+
347
+ this.logger.log(`Cleaning up for module: ${moduleEntity.name}.`);
348
+
349
+ const modulePath = await this.moduleMetadataHelperService.getModulePath(moduleEntity.name);
350
+ if (modulePath) {
351
+
352
+ this.logger.log(`Module path: ${modulePath}`);
353
+
354
+ // Metadata file to be deleted
355
+ const moduleMetadataPAth = await this.moduleMetadataHelperService.getModuleMetadataFolderPath(moduleEntity.name)
356
+ this.logger.log(`About to delete module metadata path: ${moduleMetadataPAth}`);
357
+
358
+ try {
359
+ await fs.rm(modulePath, { recursive: true, force: true });
360
+ await fs.rm(moduleMetadataPAth, { recursive: true, force: true });
361
+ this.logger.log(`Deleted file: ${moduleMetadataPAth}`);
362
+ } catch (error) {
363
+ this.logger.error(`Error deleting file: ${moduleMetadataPAth}`, error);
364
+ throw new Error(ERROR_MESSAGES.FILE_DELETE_FAILED); // Trigger rollback
365
+ }
366
+ }
367
+ await this.dataSource.query(
368
+ `CALL cleanup_module_metadata($1, $2)`,
369
+ [moduleEntity.name, true],
370
+ );
324
371
  }
325
372
 
326
373
  async deleteMany(ids: number[]): Promise<any> {
@@ -1,23 +1,22 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
1
+ import { forwardRef, Inject, Injectable } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
3
  import { DiscoveryService, ModuleRef } from "@nestjs/core";
4
- import { EntityManager, In, Repository } from 'typeorm';
4
+ import { InjectEntityManager } from '@nestjs/typeorm';
5
+ import { CrudHelperService } from "src/services/crud-helper.service";
5
6
  import { CRUDService } from 'src/services/crud.service';
7
+ import { FileService } from "src/services/file.service";
6
8
  import { ModelMetadataService } from 'src/services/model-metadata.service';
7
9
  import { ModuleMetadataService } from 'src/services/module-metadata.service';
8
- import { ConfigService } from '@nestjs/config';
9
- import { FileService } from "src/services/file.service";
10
- import { CrudHelperService } from "src/services/crud-helper.service";
10
+ import { EntityManager, In } from 'typeorm';
11
11
 
12
12
 
13
- import { PermissionMetadata } from '../entities/permission-metadata.entity';
14
- import { ActiveUserData } from '../interfaces/active-user-data.interface';
15
- import { classify } from '@angular-devkit/core/src/utils/strings';
16
13
  import { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';
14
+ import { PermissionMetadata } from '../entities/permission-metadata.entity';
17
15
 
18
16
  @Injectable()
19
17
  export class PermissionMetadataService extends CRUDService<PermissionMetadata> {
20
18
  constructor(
19
+ @Inject(forwardRef(() => ModelMetadataService))
21
20
  readonly modelMetadataService: ModelMetadataService,
22
21
  readonly moduleMetadataService: ModuleMetadataService,
23
22
  readonly configService: ConfigService,
@@ -99,8 +99,10 @@ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscr
99
99
 
100
100
  async onModuleInit(): Promise<void> {
101
101
  const defaultBroker = process.env.QUEUES_DEFAULT_BROKER || 'database';
102
+ const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
103
+
102
104
  // we will start subscriber only if the current service role is subscriber.
103
- if (['both', 'subscriber'].includes(this.serviceRole) && defaultBroker === 'database') {
105
+ if (['both', 'subscriber'].includes(this.serviceRole) && defaultBroker === 'database' && solidCliRunning === "false") {
104
106
 
105
107
  const options = this.options();
106
108
 
@@ -52,8 +52,10 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
52
52
  }
53
53
 
54
54
  async onModuleInit(): Promise<void> {
55
+ const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
56
+
55
57
  // we will start subscriber only if the current service role is subscriber.
56
- if (this.url && ['both', 'subscriber'].includes(this.serviceRole)) {
58
+ if (this.url && ['both', 'subscriber'].includes(this.serviceRole) && solidCliRunning === "false") {
57
59
 
58
60
  // this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
59
61
  // const connection = await amqp.connect(this.url);
@@ -92,7 +94,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
92
94
  async (rawMessage) => {
93
95
  if (rawMessage) {
94
96
  const messageContentString = rawMessage.content.toString();
95
- this.logger.debug(`RabbitMqSubscriber Received raw message: ${messageContentString}`);
97
+ // this.logger.debug(`RabbitMqSubscriber Received raw message: ${messageContentString}`);
96
98
 
97
99
  let message: QueueMessage<T> = null;
98
100
 
@@ -23,6 +23,7 @@ export class RoleMetadataService extends CRUDService<RoleMetadata> {
23
23
  constructor(
24
24
  @Inject(forwardRef(() => ModelMetadataService))
25
25
  readonly modelMetadataService: ModelMetadataService,
26
+ @Inject(forwardRef(() => ModuleMetadataService))
26
27
  readonly moduleMetadataService: ModuleMetadataService,
27
28
  readonly configService: ConfigService,
28
29
  readonly fileService: FileService,
@@ -1,22 +1,22 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
1
+ import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
3
  import { DiscoveryService, ModuleRef } from "@nestjs/core";
4
- import { EntityManager, Repository } from 'typeorm';
4
+ import { InjectEntityManager } from '@nestjs/typeorm';
5
5
  import { ScheduledJob } from 'src/entities/scheduled-job.entity';
6
- import { ModelMetadataService } from './model-metadata.service';
7
- import { ModuleMetadataService } from './module-metadata.service';
8
- import { ConfigService } from '@nestjs/config';
9
- import { FileService } from './file.service';
6
+ import { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';
7
+ import { EntityManager } from 'typeorm';
10
8
  import { CrudHelperService } from './crud-helper.service';
11
9
  import { CRUDService } from './crud.service';
12
- import { Logger } from '@nestjs/common';
13
- import { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';
10
+ import { FileService } from './file.service';
11
+ import { ModelMetadataService } from './model-metadata.service';
12
+ import { ModuleMetadataService } from './module-metadata.service';
14
13
 
15
14
  @Injectable()
16
15
  export class ScheduledJobService extends CRUDService<ScheduledJob> {
17
16
  private readonly logger = new Logger(ScheduledJobService.name);
18
17
 
19
18
  constructor(
19
+ @Inject(forwardRef(() => ModelMetadataService))
20
20
  readonly modelMetadataService: ModelMetadataService,
21
21
  readonly moduleMetadataService: ModuleMetadataService,
22
22
  readonly configService: ConfigService,
@@ -20,6 +20,11 @@ export class SchedulerServiceImpl implements ISchedulerService {
20
20
 
21
21
  @Cron(CronExpression.EVERY_MINUTE)
22
22
  async runScheduledJobs(): Promise<void> {
23
+ const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
24
+ if (solidCliRunning === "true") {
25
+ return;
26
+ }
27
+
23
28
  const now = new Date();
24
29
 
25
30
  // this.logger.log(`[${now.getTime()}]: scheduler service started run...`);
@@ -18,6 +18,7 @@ import { SecurityRuleRepository } from 'src';
18
18
  @Injectable()
19
19
  export class SecurityRuleService extends CRUDService<SecurityRule> implements OnApplicationBootstrap {
20
20
  constructor(
21
+ @Inject(forwardRef(() => ModelMetadataService))
21
22
  readonly modelMetadataService: ModelMetadataService,
22
23
  readonly moduleMetadataService: ModuleMetadataService,
23
24
  readonly configService: ConfigService,
@@ -1,4 +1,4 @@
1
- import { Injectable } from "@nestjs/common";
1
+ import { forwardRef, Inject, Injectable } from "@nestjs/common";
2
2
  import { ModelMetadataService } from "src/services/model-metadata.service";
3
3
  import { SelectionProvider } from "src/decorators/selection-provider.decorator";
4
4
  import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
@@ -8,7 +8,10 @@ import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues
8
8
  @Injectable()
9
9
  export class ListOfModelsSelectionProvider implements ISelectionProvider<ISelectionProviderContext> {
10
10
  private readonly modelMetadataService: ModelMetadataService;
11
- constructor(modelMetadataService: ModelMetadataService) {
11
+ constructor(
12
+ @Inject(forwardRef(() => ModelMetadataService))
13
+ modelMetadataService: ModelMetadataService
14
+ ) {
12
15
  this.modelMetadataService = modelMetadataService;
13
16
  }
14
17
  help(): string {