@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
@@ -1,4 +1,5 @@
1
1
  import { classify } from "@angular-devkit/core/src/utils/strings";
2
+ import { BadRequestException } from "@nestjs/common";
2
3
  import { isEmpty, isNotEmpty, isString } from "class-validator";
3
4
  import { FieldCrudManager, ValidationError } from "src/interfaces";
4
5
  import { IsParsableInt } from "src/validators/is-parsable-int";
@@ -64,16 +65,23 @@ export class ManyToOneRelationFieldCrudManager implements FieldCrudManager {
64
65
  // Avoid transforming if both fieldId and fieldUserKey is empty
65
66
  if ((isEmpty(fieldId)) && isEmpty(fieldUserKeyValue)) return dto;
66
67
 
68
+ if (!this.options.relationCoModelSingularName) {
69
+ throw new BadRequestException(`ManyToOneRelationFieldCrudManager: relationCoModelSingularName is not defined in the field: ${this.options.fieldName}`);
70
+ }
67
71
  // // Load the related entity from the database, using the repository of the related entity
68
- const entityTarget = this.getRelatedEntityTarget(classify(this.options.relationCoModelSingularName));
72
+ //const entityTarget = this.getRelatedEntityTarget(classify(this.options.relationCoModelSingularName));
73
+ const coModelEntityName = classify(this.options.relationCoModelSingularName);
74
+
75
+ //Load the related entity from the database, using the repository of the related entity
76
+ //const entityTarget = this.getRelatedEntityTarget(classify(this.options.relationCoModelSingularName));
69
77
  if (isNotEmpty(fieldId)) {
70
- dto[this.options.fieldName] = await this.options.entityManager.getRepository(entityTarget).findOneBy({ id: fieldId });
78
+ dto[this.options.fieldName] = await this.options.entityManager.getRepository(coModelEntityName).findOneBy({ id: fieldId });
71
79
  if (this.options.required && isEmpty(dto[this.options.fieldName])) {
72
80
  throw new Error(`ManyToOneRelationFieldCrudManager: Record with id: ${fieldId} not found in ${this.options.relationCoModelSingularName}`);
73
81
  }
74
82
  }
75
83
  else {
76
- dto[this.options.fieldName] = await this.options.entityManager.getRepository(entityTarget).findOneBy({ [this.options.relationCoModelUserKeyFieldName]: fieldUserKeyValue });
84
+ dto[this.options.fieldName] = await this.options.entityManager.getRepository(coModelEntityName).findOneBy({ [this.options.relationCoModelUserKeyFieldName]: fieldUserKeyValue });
77
85
  if (this.options.required && isEmpty(dto[this.options.fieldName])) {
78
86
  throw new Error(`ManyToOneRelationFieldCrudManager: Record with userKey: ${this.options.relationCoModelUserKeyFieldName}: ${fieldUserKeyValue} not found in ${this.options.relationCoModelSingularName}`);
79
87
  }
@@ -88,10 +96,10 @@ export class ManyToOneRelationFieldCrudManager implements FieldCrudManager {
88
96
  }
89
97
 
90
98
  // Returns the entity target class from the entity name
91
- private getRelatedEntityTarget(relatedEntityName: string): any {
92
- const entityMetadatas = this.options.entityManager.connection.entityMetadatas;
93
- const relatedEntityMetadata = entityMetadatas.find(em => em.name === relatedEntityName);
94
- return relatedEntityMetadata.target;
95
- }
99
+ // private getRelatedEntityTarget(relatedEntityName: string): any {
100
+ // const entityMetadatas = this.options.entityManager.connection.entityMetadatas;
101
+ // const relatedEntityMetadata = entityMetadatas.find(em => em.name === relatedEntityName);
102
+ // return relatedEntityMetadata.target;
103
+ // }
96
104
 
97
105
  }
@@ -75,11 +75,11 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
75
75
 
76
76
  async transformForCreate(dto: any): Promise<any> {
77
77
  // const relatedFieldData: any[] = dto[this.fieldName()];
78
- const currentEntityTarget = this.getEntityTarget(classify(this.options.modelSingularName));
79
- const currentEntityRepository = this.options.entityManager.getRepository(currentEntityTarget);
78
+ const currentEntityName = classify(this.options.modelSingularName);
79
+ const currentEntityRepository = this.options.entityManager.getRepository(currentEntityName);
80
80
 
81
- const relatedEntityTarget = this.getEntityTarget(classify(this.options.relationCoModelSingularName));
82
- const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityTarget)
81
+ const relatedEntityName = classify(this.options.relationCoModelSingularName);
82
+ const relatedEntityRepository = this.options.entityManager.getRepository(relatedEntityName);
83
83
 
84
84
  dto[this.valueFieldName] = await this.transformByCommand(dto, relatedEntityRepository, currentEntityRepository);
85
85
  return dto;
@@ -197,9 +197,9 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
197
197
 
198
198
  // TODO: We have moved this to SolidRegistry service, refactor to use that service.
199
199
  // Returns the entity target class from the entity name
200
- private getEntityTarget(entityName: string): any { //TODO Can be refactored to use this function from crud helper service
201
- const entityMetadatas = this.options.entityManager.connection.entityMetadatas;
202
- const entityMetadata = entityMetadatas.find(em => em.name === entityName);
203
- return entityMetadata.target;
204
- }
200
+ // private getEntityTarget(entityName: string): any { //TODO Can be refactored to use this function from crud helper service
201
+ // const entityMetadatas = this.options.entityManager.connection.entityMetadatas;
202
+ // const entityMetadata = entityMetadatas.find(em => em.name === entityName);
203
+ // return entityMetadata.target;
204
+ // }
205
205
  }
@@ -1,18 +1,20 @@
1
1
  // Return the system fields metadata for a model
2
2
 
3
- import { Injectable, Logger } from "@nestjs/common";
3
+ import { forwardRef, Inject, Injectable, Logger } from "@nestjs/common";
4
+ import { _ } from "lodash";
5
+ import { LEGACY_TABLE_FIELDS_PREFIX } from "src/entities/legacy-common.entity";
4
6
  import { ModelMetadataRepository } from "src/repository/model-metadata.repository";
5
7
  import { SolidRegistry } from "./solid-registry";
6
- import {_ } from "lodash";
7
- import { LEGACY_TABLE_FIELDS_PREFIX } from "src/entities/legacy-common.entity";
8
8
 
9
9
  @Injectable()
10
10
  export class ModelMetadataHelperService {
11
11
  private readonly logger = new Logger(ModelMetadataHelperService.name);
12
12
 
13
- constructor(private readonly registry: SolidRegistry,
13
+ constructor(
14
+ private readonly registry: SolidRegistry,
14
15
  // @InjectRepository(ModelMetadata)
15
16
  // private readonly modelMetadataRepo: Repository<ModelMetadata>,
17
+ @Inject(forwardRef(() => ModelMetadataRepository))
16
18
  private readonly modelMetadataRepo: ModelMetadataRepository,
17
19
  ) {
18
20
  }
@@ -57,4 +57,21 @@ export class ModuleMetadataHelperService {
57
57
  }
58
58
  return filePath;
59
59
  }
60
- }
60
+ async getModuleMetadataFolderPath(moduleName: string): Promise<string> {
61
+ if (!moduleName) {
62
+ return '';
63
+ }
64
+
65
+ const dashModuleName = dasherize(moduleName);
66
+
67
+ const folderPath = path.resolve(
68
+ process.cwd(),
69
+ 'module-metadata',
70
+ dashModuleName,
71
+ );
72
+
73
+ const exists = await this.fileService.pathExists(folderPath);
74
+ return exists ? folderPath : '';
75
+ }
76
+
77
+ }
@@ -1,6 +1,8 @@
1
+ import { Logger } from '@nestjs/common';
1
2
  import * as fs from 'fs'; // Use the Promise-based version of fs for async/await
2
3
  import * as path from 'path'; // To handle file paths
3
4
 
5
+ const logger = new Logger('module.helper');
4
6
 
5
7
  export const getDynamicModuleNames = (): string[] => {
6
8
  const dynamicModulesToExclude = process.env.SOLID_DYNAMIC_MODULES_TO_EXCLUDE?.split(',') || [];
@@ -21,15 +23,48 @@ export const getDynamicModuleNames = (): string[] => {
21
23
 
22
24
  if (!isValidDirectory) return false;
23
25
 
24
- return true
25
- // const fullPath = path.join(srcPath, dirent.name);
26
- // const files = fs.readdirSync(fullPath);
26
+ // return true
27
+ const fullPath = path.join(srcPath, dirent.name);
28
+ const files = fs.readdirSync(fullPath);
27
29
  // skip if empty directory
28
- // return files.length > 0;
30
+ return files.length > 0;
29
31
  })
30
32
  .map(dirent => dirent.name);
31
33
 
32
- console.log(`Enabled dynamic modules:`, enabledModules);
34
+ // logger.debug(`Enabled dynamic modules:`, enabledModules);
35
+ return enabledModules;
36
+ }
37
+
38
+ export const getDynamicModuleNamesBasedOnMetadata = (): string[] => {
39
+ const dynamicModulesToExclude = process.env.SOLID_DYNAMIC_MODULES_TO_EXCLUDE?.split(',') || [];
40
+
41
+ // Find a path that is ../${srcPath}/module-metadata save it in a variable.
42
+ // const srcPath = path.join(process.cwd(), 'src');
43
+ const moduleMetadataPath = path.join(process.cwd(), 'module-metadata');
44
+ const coreModuleNames = getCoreModuleNames();
45
+ const allExcludedModules = [...new Set([...coreModuleNames, ...dynamicModulesToExclude])];
46
+
47
+ // if module-metadata path does not exist, return empty array
48
+ if (!fs.existsSync(moduleMetadataPath)) {
49
+ logger.warn(`Module metadata path does not exist: ${moduleMetadataPath}`);
50
+ return [];
51
+ }
52
+
53
+ const moduleMetadataDirectories = fs.readdirSync(moduleMetadataPath, { withFileTypes: true });
54
+ const enabledModules = moduleMetadataDirectories
55
+ .filter(dirent => {
56
+ const isValidDirectory = dirent.isDirectory() && !allExcludedModules.includes(dirent.name);
57
+
58
+ if (!isValidDirectory) return false;
59
+
60
+ const fullPath = path.join(moduleMetadataPath, dirent.name, `${dirent.name}-metadata.json`);
61
+
62
+ const stats = fs.statSync(fullPath, { throwIfNoEntry: false });
63
+ return !!stats && stats.isFile();
64
+ })
65
+ .map(dirent => dirent.name);
66
+
67
+ // logger.debug(`Enabled dynamic modules basis src:`, enabledModules);
33
68
  return enabledModules;
34
69
  }
35
70
 
@@ -7,6 +7,9 @@ import { SecurityRule } from 'src/entities/security-rule.entity';
7
7
  import { IScheduledJob } from 'src/services/scheduled-jobs/scheduled-job.interface';
8
8
  import { IDashboardQuestionDataProvider, IDashboardVariableSelectionProvider, IErrorCodeProvider, ISecurityRuleConfigProvider, ISelectionProvider, ISelectionProviderContext, ISolidDatabaseModule } from "../interfaces";
9
9
  import { DatasourceType } from 'src/dtos/create-model-metadata.dto';
10
+ import { ObjectLiteral } from 'typeorm';
11
+ import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';
12
+ import { RelationMetadata } from 'typeorm/metadata/RelationMetadata';
10
13
 
11
14
  type ControllerMetadata = {
12
15
  name: string;
@@ -39,6 +42,16 @@ export enum RESERVED_SOLID_KEYWORDS {
39
42
  locale = "locale"
40
43
  }
41
44
 
45
+ export interface TypeOrmEventContext {
46
+ eventType?: string;
47
+ entity?: ObjectLiteral | undefined;
48
+ databaseEntity?: any;
49
+ entityId?: any;
50
+ metadataName?: string;
51
+ updatedColumns?: string[];
52
+ updatedRelations?: string[];
53
+ }
54
+
42
55
  export interface ComputedFieldMetadata<TContext = any> {
43
56
  moduleName: string; // Name of the module where the computed field is defined
44
57
  modelName: string; // Name of the model where the computed field is defined
@@ -49,6 +62,7 @@ export interface ComputedFieldMetadata<TContext = any> {
49
62
  computedFieldValueProviderName: string; // Name of the provider that computes the field value
50
63
  // Example: '{"contextKey": "contextValue"}'
51
64
  computedFieldValueProviderCtxt: TContext; // Context for the computed field value
65
+ eventContext: TypeOrmEventContext;
52
66
  }
53
67
 
54
68
  @Injectable()
@@ -67,6 +81,7 @@ export class SolidRegistry {
67
81
  private dashboardQuestionDataProviders: Set<InstanceWrapper> = new Set();
68
82
  private mailProviders: Set<InstanceWrapper> = new Set();
69
83
  private whatsappProviders: Set<InstanceWrapper> = new Set();
84
+ private smsProviders: Set<InstanceWrapper> = new Set();
70
85
  private securityRuleConfigProviders: Set<InstanceWrapper> = new Set();
71
86
  private errorCodeProviders: Set<InstanceWrapper> = new Set();
72
87
 
@@ -78,6 +93,10 @@ export class SolidRegistry {
78
93
  this.whatsappProviders.add(whatsappProvider);
79
94
  }
80
95
 
96
+ registerSmsProvider(smsProvider: InstanceWrapper): void {
97
+ this.smsProviders.add(smsProvider);
98
+ }
99
+
81
100
  registerSecurityRuleConfigProvider(securityRuleConfigProvider: InstanceWrapper): void {
82
101
  this.securityRuleConfigProviders.add(securityRuleConfigProvider);
83
102
  }
@@ -134,6 +153,10 @@ export class SolidRegistry {
134
153
  return Array.from(this.whatsappProviders);
135
154
  }
136
155
 
156
+ getSmsProviders(): Array<InstanceWrapper> {
157
+ return Array.from(this.smsProviders);
158
+ }
159
+
137
160
  getSecurityRuleConfigProviders(): Array<InstanceWrapper> {
138
161
  return Array.from(this.securityRuleConfigProviders);
139
162
  }
package/src/index.ts CHANGED
@@ -24,6 +24,7 @@ export * from './decorators/solid-database-module.decorator'
24
24
  export * from './decorators/solid-service.decorator'
25
25
  export * from './decorators/mail-provider.decorator'
26
26
  export * from './decorators/security-rule-config-provider.decorator'
27
+ export * from './decorators/sms-provider.decorator'
27
28
 
28
29
  export * from './dtos/post-chatter-message.dto'
29
30
  export * from './dtos/security-rule-config.dto'
@@ -137,6 +138,7 @@ export * from './entities/dashboard-variable.entity'
137
138
  export * from './entities/dashboard-question.entity'
138
139
  export * from './entities/dashboard-question-sql-dataset-config.entity'
139
140
  export * from './entities/ai-interaction.entity'
141
+ export * from './entities/model-sequence.entity'
140
142
 
141
143
  export * from './enums/auth-type.enum'
142
144
  export * from './decorators/disallow-in-production.decorator'
@@ -193,12 +195,12 @@ export * from './jobs/api-email-subscriber.service'
193
195
  export { SmtpEmailQueuePublisherRabbitmq, SmtpEmailQueuePublisherRabbitmq as EmailQueuePublisher } from './jobs/smtp-email-publisher.service' // alias for backward compatibility
194
196
  export * from './jobs/smtp-email-queue-options'
195
197
  export { SmtpEmailQueueSubscriberRabbitmq, SmtpEmailQueueSubscriberRabbitmq as EmailQueueSubscriber } from './jobs/smtp-email-subscriber.service' // alias for backward compatibility
196
- export * from './jobs/otp-publisher.service'
197
- export * from './jobs/otp-queue-options'
198
- export * from './jobs/otp-subscriber.service'
199
- export * from './jobs/sms-publisher.service'
200
- export * from './jobs/sms-queue-options'
201
- export * from './jobs/sms-subscriber.service'
198
+ export * from './jobs/msg91-otp-publisher.service'
199
+ export * from './jobs/msg91-otp-queue-options'
200
+ export * from './jobs/msg91-otp-subscriber.service'
201
+ export * from './jobs/msg91-sms-publisher.service'
202
+ export * from './jobs/msg91-sms-queue-options'
203
+ export * from './jobs/msg91-sms-subscriber.service'
202
204
  export * from './jobs/msg91-whatsapp-publisher.service'
203
205
  export * from './jobs/msg91-whatsapp-queue-options'
204
206
  export * from './jobs/msg91-whatsapp-subscriber.service'
@@ -280,6 +282,8 @@ export * from './services/ai-interaction.service'
280
282
 
281
283
  // Factories
282
284
  export * from './factories/mail.factory'
285
+ export * from './factories/sms.factory'
286
+ export * from './factories/whatsapp.factory'
283
287
 
284
288
  // Repositories
285
289
  export * from './repository/solid-base.repository'
@@ -299,6 +303,8 @@ export * from './subscribers/audit.subscriber'
299
303
  export * from './transformers/array-transformer'
300
304
  export * from './transformers/boolean-transformer'
301
305
  export * from './transformers/integer-transformer'
306
+ export { default as datetimeTransformer } from './transformers/datetime-transformer'
307
+ export * from './transformers/typeorm/local-date-time-transformer'
302
308
 
303
309
  export * from './validators/is-parsable-int'
304
310
 
@@ -307,6 +313,5 @@ export * from './interfaces'
307
313
  export * from './solid-core.module'
308
314
 
309
315
  export * from './winston.logger'
310
- export { default as datetimeTransformer } from './transformers/datetime-transformer'
311
316
 
312
317
  export { ERROR_MESSAGES } from './constants/error-messages'
@@ -1,4 +1,4 @@
1
- import { Injectable } from "@nestjs/common";
1
+ import { Injectable, Logger } from "@nestjs/common";
2
2
  import { SolidRegistry } from "src/helpers/solid-registry";
3
3
  import { IEntityPostComputeFieldProvider, QueuesModuleOptions } from "src/interfaces";
4
4
  import { QueueMessage } from "src/interfaces/mq";
@@ -11,6 +11,7 @@ import computedFieldEvaluationQueueOptions from "./computed-field-evaluation-que
11
11
 
12
12
  @Injectable()
13
13
  export class ComputedFieldEvaluationSubscriberRabbitmq extends RabbitMqSubscriber<ComputedFieldEvaluationPayload> {
14
+ private readonly _logger = new Logger(ComputedFieldEvaluationSubscriberRabbitmq.name);
14
15
  constructor(
15
16
  readonly mqMessageService: MqMessageService,
16
17
  readonly mqMessageQueueService: MqMessageQueueService,
@@ -30,9 +31,19 @@ export class ComputedFieldEvaluationSubscriberRabbitmq extends RabbitMqSubscribe
30
31
  // It will then call the corresponding provider computeAndSave method to perform the evaluation
31
32
  async subscribe(message: QueueMessage<ComputedFieldEvaluationPayload>) {
32
33
  const { databaseEntity, ...computedFieldMetadata } = message.payload;
33
- const provider = this.solidRegistry.getComputedFieldProvider(computedFieldMetadata.computedFieldValueProviderName);
34
+ const { computedFieldValueProviderName } = computedFieldMetadata;
35
+ const provider = this.solidRegistry.getComputedFieldProvider(computedFieldValueProviderName);
34
36
  // Get the instance of the provider and assert it is of type IEntityComputedFieldProvider
35
37
  const providerInstance = provider.instance as IEntityPostComputeFieldProvider<any, any>; // IEntityComputedFieldProvider
36
- await providerInstance.postComputeAndSaveValue(databaseEntity, computedFieldMetadata); //FIXME There should some way to check/assert if the provider actually has a postComputeAndSaveValue
38
+ if (typeof providerInstance.postComputeAndSaveValue !== 'function') {
39
+ this._logger.warn(`Provider "${computedFieldValueProviderName}" does not implement postComputeAndSaveValue; skipping post-compute.`);
40
+ return;
41
+ }
42
+ await providerInstance.postComputeAndSaveValue(databaseEntity, {
43
+ ...computedFieldMetadata,
44
+ computedFieldValueProviderCtxt: {
45
+ ...(computedFieldMetadata.computedFieldValueProviderCtxt || {}),
46
+ },
47
+ }); //FIXME There should some way to check/assert if the provider actually has a postComputeAndSaveValue
37
48
  }
38
- }
49
+ }
@@ -1,13 +1,13 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
 
3
- import smsQueueOptions from './sms-queue-database-options';
3
+ import smsQueueOptions from './msg91-sms-queue-database-options';
4
4
  import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
5
5
  import { MqMessageService } from 'src/services/mq-message.service';
6
6
  import { QueuesModuleOptions } from 'src/interfaces';
7
7
  import { DatabasePublisher } from 'src/services/queues/database-publisher.service';
8
8
 
9
9
  @Injectable()
10
- export class SmsQueuePublisherDatabase extends DatabasePublisher<any> {
10
+ export class Msg91SmsQueuePublisherDatabase extends DatabasePublisher<any> {
11
11
  constructor(
12
12
  protected readonly mqMessageService: MqMessageService,
13
13
  protected readonly mqMessageQueueService: MqMessageQueueService,
@@ -1,18 +1,20 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
 
3
3
  import { QueueMessage } from 'src/interfaces/mq';
4
- import smsQueueOptions from './sms-queue-database-options';
4
+ import smsQueueOptions from './msg91-sms-queue-database-options';
5
5
  import { MqMessageService } from 'src/services/mq-message.service';
6
6
  import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
7
7
  import { Msg91SMSService } from 'src/services/sms/Msg91SMSService';
8
8
  import { QueuesModuleOptions } from 'src/interfaces';
9
9
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
10
10
  import { PollerService } from 'src/services/poller.service';
11
+ import { SmsFactory } from 'src/factories/sms.factory';
11
12
 
12
13
  @Injectable()
13
- export class SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
14
+ export class Msg91SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
14
15
  constructor(
15
- private readonly smsService: Msg91SMSService,
16
+ // private readonly smsService: Msg91SMSService,
17
+ private readonly smsFactory: SmsFactory,
16
18
  readonly mqMessageService: MqMessageService,
17
19
  readonly mqMessageQueueService: MqMessageQueueService,
18
20
  readonly poller: PollerService,
@@ -27,6 +29,9 @@ export class SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
27
29
  }
28
30
 
29
31
  subscribe(message: QueueMessage<any>) {
30
- return this.smsService.sendSMSSynchronously(message);
32
+ const smsService: Msg91SMSService = this.smsFactory.getSmsService(Msg91SMSService.name) as Msg91SMSService;
33
+ return smsService.sendSMSSynchronously(message);
34
+
35
+ // return this.smsService.sendSMSSynchronously(message);
31
36
  }
32
37
  }
@@ -8,11 +8,14 @@ import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.serv
8
8
  import { Msg91OTPService } from 'src/services/sms/Msg91OTPService';
9
9
  import { QueuesModuleOptions } from 'src/interfaces';
10
10
  import { PollerService } from 'src/services/poller.service';
11
+ import { SmsFactory } from 'src/factories/sms.factory';
11
12
 
12
13
  @Injectable()
13
14
  export class OTPQueueSubscriberDatabase extends DatabaseSubscriber<any> {
14
15
  constructor(
15
- private readonly otpService: Msg91OTPService,
16
+ // private readonly otpService: Msg91OTPService,
17
+ private readonly smsFactory: SmsFactory,
18
+
16
19
  readonly mqMessageService: MqMessageService,
17
20
  readonly poller: PollerService,
18
21
  readonly mqMessageQueueService: MqMessageQueueService,
@@ -27,6 +30,9 @@ export class OTPQueueSubscriberDatabase extends DatabaseSubscriber<any> {
27
30
  }
28
31
 
29
32
  subscribe(message: QueueMessage<any>) {
30
- this.otpService.sendSMSSynchronously(message);
33
+ const otpService: Msg91OTPService = this.smsFactory.getSmsService(Msg91OTPService.name) as Msg91OTPService;
34
+ return otpService.sendSMSSynchronously(message);
35
+
36
+ // this.otpService.sendSMSSynchronously(message);
31
37
  }
32
38
  }
@@ -8,11 +8,13 @@ import { QueuesModuleOptions } from 'src/interfaces';
8
8
  import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
9
9
  import { TwilioSMSService } from 'src/services/sms/TwilioSMSService';
10
10
  import { PollerService } from 'src/services/poller.service';
11
+ import { SmsFactory } from 'src/factories/sms.factory';
11
12
 
12
13
  @Injectable()
13
14
  export class TwilioSmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
14
15
  constructor(
15
- private readonly smsService: TwilioSMSService,
16
+ // private readonly smsService: TwilioSMSService,
17
+ private readonly smsFactory: SmsFactory,
16
18
  readonly mqMessageService: MqMessageService,
17
19
  readonly mqMessageQueueService: MqMessageQueueService,
18
20
  readonly poller: PollerService,
@@ -27,6 +29,7 @@ export class TwilioSmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
27
29
  }
28
30
 
29
31
  subscribe(message: QueueMessage<any>) {
30
- return this.smsService.sendSMSSynchronously(message);
32
+ const smsService: TwilioSMSService = this.smsFactory.getSmsService(TwilioSMSService.name) as TwilioSMSService;
33
+ return smsService.sendSMSSynchronously(message);
31
34
  }
32
35
  }
@@ -1,13 +1,13 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
 
3
3
  import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
4
- import otpQueueOptions from './otp-queue-options';
4
+ import otpQueueOptions from './msg91-otp-queue-options';
5
5
  import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
6
6
  import { MqMessageService } from 'src/services/mq-message.service';
7
7
  import { QueuesModuleOptions } from "../interfaces";
8
8
 
9
9
  @Injectable()
10
- export class OTPQueuePublisher extends RabbitMqPublisher<any> {
10
+ export class Msg91OTPQueuePublisher extends RabbitMqPublisher<any> {
11
11
  constructor(
12
12
  protected readonly mqMessageService: MqMessageService,
13
13
  protected readonly mqMessageQueueService: MqMessageQueueService,
@@ -3,15 +3,18 @@ import { Injectable } from '@nestjs/common';
3
3
  import { QueueMessage } from 'src/interfaces/mq';
4
4
  import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
5
5
  import { Msg91OTPService } from '../services/sms/Msg91OTPService';
6
- import otpQueueOptions from './otp-queue-options';
6
+ import otpQueueOptions from './msg91-otp-queue-options';
7
7
  import { MqMessageService } from 'src/services/mq-message.service';
8
8
  import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
9
9
  import { QueuesModuleOptions } from "../interfaces";
10
+ import { SmsFactory } from 'src/factories/sms.factory';
10
11
 
11
12
  @Injectable()
12
- export class OTPQueueSubscriber extends RabbitMqSubscriber<any> {
13
+ export class Msg91OTPQueueSubscriber extends RabbitMqSubscriber<any> {
13
14
  constructor(
14
- private readonly otpService: Msg91OTPService,
15
+ // private readonly otpService: Msg91OTPService,
16
+ private readonly smsFactory: SmsFactory,
17
+
15
18
  readonly mqMessageService: MqMessageService,
16
19
  readonly mqMessageQueueService: MqMessageQueueService,
17
20
  ) {
@@ -25,6 +28,9 @@ export class OTPQueueSubscriber extends RabbitMqSubscriber<any> {
25
28
  }
26
29
 
27
30
  subscribe(message: QueueMessage<any>) {
28
- this.otpService.sendSMSSynchronously(message);
31
+ const otpService: Msg91OTPService = this.smsFactory.getSmsService(Msg91OTPService.name) as Msg91OTPService;
32
+ return otpService.sendSMSSynchronously(message);
33
+
34
+ // this.otpService.sendSMSSynchronously(message);
29
35
  }
30
36
  }
@@ -1,13 +1,13 @@
1
1
  import { Injectable } from '@nestjs/common';
2
2
 
3
3
  import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
4
- import smsQueueOptions from './sms-queue-options';
4
+ import smsQueueOptions from './msg91-sms-queue-options';
5
5
  import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
6
6
  import { MqMessageService } from 'src/services/mq-message.service';
7
7
  import { QueuesModuleOptions } from "../interfaces";
8
8
 
9
9
  @Injectable()
10
- export class SmsQueuePublisher extends RabbitMqPublisher<any> {
10
+ export class Msg91SmsQueuePublisher extends RabbitMqPublisher<any> {
11
11
  constructor(
12
12
  protected readonly mqMessageService: MqMessageService,
13
13
  protected readonly mqMessageQueueService: MqMessageQueueService,
@@ -2,16 +2,18 @@ import { Injectable } from '@nestjs/common';
2
2
 
3
3
  import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
4
4
  import { QueueMessage } from 'src/interfaces/mq';
5
- import smsQueueOptions from './sms-queue-options';
5
+ import smsQueueOptions from './msg91-sms-queue-options';
6
6
  import { Msg91SMSService } from '../services/sms/Msg91SMSService';
7
7
  import { MqMessageService } from 'src/services/mq-message.service';
8
8
  import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
9
9
  import { QueuesModuleOptions } from "../interfaces";
10
+ import { SmsFactory } from 'src/factories/sms.factory';
10
11
 
11
12
  @Injectable()
12
- export class SmsQueueSubscriber extends RabbitMqSubscriber<any> {
13
+ export class Msg91SmsQueueSubscriber extends RabbitMqSubscriber<any> {
13
14
  constructor(
14
- private readonly smsService: Msg91SMSService,
15
+ // private readonly smsService: Msg91SMSService,
16
+ private readonly smsFactory: SmsFactory,
15
17
  readonly mqMessageService: MqMessageService,
16
18
  readonly mqMessageQueueService: MqMessageQueueService,
17
19
  ) {
@@ -25,6 +27,9 @@ export class SmsQueueSubscriber extends RabbitMqSubscriber<any> {
25
27
  }
26
28
 
27
29
  subscribe(message: QueueMessage<any>) {
28
- return this.smsService.sendSMSSynchronously(message);
30
+ const smsService: Msg91SMSService = this.smsFactory.getSmsService(Msg91SMSService.name) as Msg91SMSService;
31
+ return smsService.sendSMSSynchronously(message);
32
+
33
+ // return this.smsService.sendSMSSynchronously(message);
29
34
  }
30
35
  }
@@ -8,11 +8,13 @@ import { PollerService } from 'src/services/poller.service';
8
8
  import { TwilioSMSService } from 'src/services/sms/TwilioSMSService';
9
9
  import smsQueueOptions from './twilio-sms-queue-options';
10
10
  import { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';
11
+ import { SmsFactory } from 'src/factories/sms.factory';
11
12
 
12
13
  @Injectable()
13
14
  export class TwilioSmsQueueSubscriberRabbitmq extends RabbitMqSubscriber<any> {
14
15
  constructor(
15
- private readonly smsService: TwilioSMSService,
16
+ // private readonly smsService: TwilioSMSService,
17
+ private readonly smsFactory: SmsFactory,
16
18
  readonly mqMessageService: MqMessageService,
17
19
  readonly mqMessageQueueService: MqMessageQueueService,
18
20
  readonly poller: PollerService,
@@ -27,6 +29,8 @@ export class TwilioSmsQueueSubscriberRabbitmq extends RabbitMqSubscriber<any> {
27
29
  }
28
30
 
29
31
  subscribe(message: QueueMessage<any>) {
30
- return this.smsService.sendSMSSynchronously(message);
32
+ const smsService: TwilioSMSService = this.smsFactory.getSmsService(TwilioSMSService.name) as TwilioSMSService;
33
+ return smsService.sendSMSSynchronously(message);
34
+ // return this.smsService.sendSMSSynchronously(message);
31
35
  }
32
36
  }
@@ -1,7 +1,7 @@
1
- import { Injectable } from '@nestjs/common';
1
+ import { forwardRef, Inject, Injectable } from '@nestjs/common';
2
2
  import { Media } from 'src/entities/media.entity';
3
3
  import { RequestContextService } from 'src/services/request-context.service';
4
- import { DataSource } from 'typeorm';
4
+ import { DataSource, In } from 'typeorm';
5
5
  import { FieldMetadataRepository } from './field-metadata.repository';
6
6
  import { MediaStorageProviderMetadataRepository } from './media-storage-provider-metadata.repository';
7
7
  import { ModelMetadataRepository } from './model-metadata.repository';
@@ -21,6 +21,7 @@ export class MediaRepository extends SolidBaseRepository<Media> {
21
21
  // @InjectRepository(MediaStorageProviderMetadata)
22
22
  // private readonly mediaStorageProviderMetadataRepo: Repository<MediaStorageProviderMetadata>,
23
23
  private readonly fieldMetadataRepo: FieldMetadataRepository,
24
+ @Inject(forwardRef(() => ModelMetadataRepository))
24
25
  private readonly modelMetadataRepo: ModelMetadataRepository,
25
26
  private readonly mediaStorageProviderMetadataRepo: MediaStorageProviderMetadataRepository,
26
27
  ) {