@solidstarters/solid-core 1.2.193 → 1.2.201

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 (630) 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/mcp.command.d.ts +20 -0
  10. package/dist/commands/mcp.command.d.ts.map +1 -0
  11. package/dist/commands/mcp.command.js +208 -0
  12. package/dist/commands/mcp.command.js.map +1 -0
  13. package/dist/commands/refresh-model.command.d.ts +8 -5
  14. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  15. package/dist/commands/refresh-model.command.js +36 -0
  16. package/dist/commands/refresh-model.command.js.map +1 -1
  17. package/dist/commands/remove-fields.command.js +1 -1
  18. package/dist/commands/remove-fields.command.js.map +1 -1
  19. package/dist/commands/seed.command.d.ts +2 -0
  20. package/dist/commands/seed.command.d.ts.map +1 -1
  21. package/dist/commands/seed.command.js +28 -1
  22. package/dist/commands/seed.command.js.map +1 -1
  23. package/dist/constants/error-messages.d.ts +2 -0
  24. package/dist/constants/error-messages.d.ts.map +1 -1
  25. package/dist/constants/error-messages.js +4 -0
  26. package/dist/constants/error-messages.js.map +1 -1
  27. package/dist/controllers/authentication.controller.js +1 -1
  28. package/dist/controllers/authentication.controller.js.map +1 -1
  29. package/dist/controllers/email-template.controller.js +1 -1
  30. package/dist/controllers/email-template.controller.js.map +1 -1
  31. package/dist/controllers/field-metadata.controller.d.ts +136 -4
  32. package/dist/controllers/field-metadata.controller.d.ts.map +1 -1
  33. package/dist/controllers/field-metadata.controller.js +14 -1
  34. package/dist/controllers/field-metadata.controller.js.map +1 -1
  35. package/dist/controllers/media-storage-provider-metadata.controller.js +1 -1
  36. package/dist/controllers/media-storage-provider-metadata.controller.js.map +1 -1
  37. package/dist/controllers/model-metadata.controller.js +1 -1
  38. package/dist/controllers/model-metadata.controller.js.map +1 -1
  39. package/dist/controllers/model-sequence.controller.d.ts +43 -0
  40. package/dist/controllers/model-sequence.controller.d.ts.map +1 -0
  41. package/dist/controllers/model-sequence.controller.js +179 -0
  42. package/dist/controllers/model-sequence.controller.js.map +1 -0
  43. package/dist/controllers/module-metadata.controller.js +1 -1
  44. package/dist/controllers/module-metadata.controller.js.map +1 -1
  45. package/dist/controllers/otp-authentication.controller.js +1 -1
  46. package/dist/controllers/otp-authentication.controller.js.map +1 -1
  47. package/dist/controllers/service.controller.js +1 -1
  48. package/dist/controllers/service.controller.js.map +1 -1
  49. package/dist/controllers/setting.controller.d.ts +1 -0
  50. package/dist/controllers/setting.controller.d.ts.map +1 -1
  51. package/dist/controllers/setting.controller.js +15 -0
  52. package/dist/controllers/setting.controller.js.map +1 -1
  53. package/dist/controllers/sms-template.controller.js +1 -1
  54. package/dist/controllers/sms-template.controller.js.map +1 -1
  55. package/dist/controllers/test-queue.controller.js +1 -1
  56. package/dist/controllers/test-queue.controller.js.map +1 -1
  57. package/dist/controllers/test.controller.js +1 -1
  58. package/dist/controllers/test.controller.js.map +1 -1
  59. package/dist/dtos/basic-filters.dto.d.ts +3 -1
  60. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  61. package/dist/dtos/basic-filters.dto.js +8 -2
  62. package/dist/dtos/basic-filters.dto.js.map +1 -1
  63. package/dist/dtos/basic-group-filters.dto.d.ts +6 -0
  64. package/dist/dtos/basic-group-filters.dto.d.ts.map +1 -0
  65. package/dist/dtos/basic-group-filters.dto.js +46 -0
  66. package/dist/dtos/basic-group-filters.dto.js.map +1 -0
  67. package/dist/dtos/create-ai-interaction.dto.d.ts +2 -0
  68. package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -1
  69. package/dist/dtos/create-ai-interaction.dto.js +14 -1
  70. package/dist/dtos/create-ai-interaction.dto.js.map +1 -1
  71. package/dist/dtos/create-field-metadata.dto.d.ts +22 -5
  72. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  73. package/dist/dtos/create-field-metadata.dto.js +34 -8
  74. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  75. package/dist/dtos/create-import-transaction.dto.d.ts +0 -1
  76. package/dist/dtos/create-import-transaction.dto.d.ts.map +1 -1
  77. package/dist/dtos/create-import-transaction.dto.js +1 -7
  78. package/dist/dtos/create-import-transaction.dto.js.map +1 -1
  79. package/dist/dtos/create-model-metadata.dto.d.ts +2 -0
  80. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  81. package/dist/dtos/create-model-metadata.dto.js +13 -1
  82. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  83. package/dist/dtos/create-model-sequence.dto.d.ts +14 -0
  84. package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -0
  85. package/dist/dtos/create-model-sequence.dto.js +90 -0
  86. package/dist/dtos/create-model-sequence.dto.js.map +1 -0
  87. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  88. package/dist/dtos/create-role-metadata.dto.js +6 -1
  89. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  90. package/dist/dtos/get-mcp-url.dto.d.ts +5 -0
  91. package/dist/dtos/get-mcp-url.dto.d.ts.map +1 -0
  92. package/dist/dtos/get-mcp-url.dto.js +31 -0
  93. package/dist/dtos/get-mcp-url.dto.js.map +1 -0
  94. package/dist/dtos/resolve-s3-url.dto.d.ts +10 -0
  95. package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -0
  96. package/dist/dtos/resolve-s3-url.dto.js +49 -0
  97. package/dist/dtos/resolve-s3-url.dto.js.map +1 -0
  98. package/dist/dtos/update-ai-interaction.dto.d.ts +2 -0
  99. package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -1
  100. package/dist/dtos/update-ai-interaction.dto.js +13 -1
  101. package/dist/dtos/update-ai-interaction.dto.js.map +1 -1
  102. package/dist/dtos/update-field-metadata.dto.d.ts.map +1 -1
  103. package/dist/dtos/update-field-metadata.dto.js.map +1 -1
  104. package/dist/dtos/update-import-transaction.dto.d.ts +0 -1
  105. package/dist/dtos/update-import-transaction.dto.d.ts.map +1 -1
  106. package/dist/dtos/update-import-transaction.dto.js +1 -7
  107. package/dist/dtos/update-import-transaction.dto.js.map +1 -1
  108. package/dist/dtos/update-model-sequence.dto.d.ts +15 -0
  109. package/dist/dtos/update-model-sequence.dto.d.ts.map +1 -0
  110. package/dist/dtos/update-model-sequence.dto.js +94 -0
  111. package/dist/dtos/update-model-sequence.dto.js.map +1 -0
  112. package/dist/entities/action-metadata.entity.js +4 -4
  113. package/dist/entities/action-metadata.entity.js.map +1 -1
  114. package/dist/entities/ai-interaction.entity.d.ts +2 -0
  115. package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
  116. package/dist/entities/ai-interaction.entity.js +15 -6
  117. package/dist/entities/ai-interaction.entity.js.map +1 -1
  118. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  119. package/dist/entities/chatter-message-details.entity.js +1 -1
  120. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  121. package/dist/entities/chatter-message.entity.js +1 -1
  122. package/dist/entities/chatter-message.entity.js.map +1 -1
  123. package/dist/entities/common.entity.d.ts +2 -3
  124. package/dist/entities/common.entity.d.ts.map +1 -1
  125. package/dist/entities/common.entity.js +10 -11
  126. package/dist/entities/common.entity.js.map +1 -1
  127. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +2 -2
  128. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
  129. package/dist/entities/dashboard-question.entity.js +3 -3
  130. package/dist/entities/dashboard-question.entity.js.map +1 -1
  131. package/dist/entities/dashboard-variable.entity.js +3 -3
  132. package/dist/entities/dashboard-variable.entity.js.map +1 -1
  133. package/dist/entities/dashboard.entity.js +1 -1
  134. package/dist/entities/dashboard.entity.js.map +1 -1
  135. package/dist/entities/email-template.entity.d.ts.map +1 -1
  136. package/dist/entities/email-template.entity.js +4 -3
  137. package/dist/entities/email-template.entity.js.map +1 -1
  138. package/dist/entities/export-template.entity.js +2 -2
  139. package/dist/entities/export-template.entity.js.map +1 -1
  140. package/dist/entities/export-transaction.entity.js +2 -2
  141. package/dist/entities/export-transaction.entity.js.map +1 -1
  142. package/dist/entities/field-metadata.entity.d.ts +1 -0
  143. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  144. package/dist/entities/field-metadata.entity.js +8 -4
  145. package/dist/entities/field-metadata.entity.js.map +1 -1
  146. package/dist/entities/import-transaction-error-log.entity.js +1 -1
  147. package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
  148. package/dist/entities/import-transaction.entity.d.ts +0 -1
  149. package/dist/entities/import-transaction.entity.d.ts.map +1 -1
  150. package/dist/entities/import-transaction.entity.js +2 -7
  151. package/dist/entities/import-transaction.entity.js.map +1 -1
  152. package/dist/entities/legacy-common-with-id.entity.d.ts +5 -0
  153. package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -0
  154. package/dist/entities/legacy-common-with-id.entity.js +32 -0
  155. package/dist/entities/legacy-common-with-id.entity.js.map +1 -0
  156. package/dist/entities/legacy-common.entity.d.ts +13 -0
  157. package/dist/entities/legacy-common.entity.d.ts.map +1 -0
  158. package/dist/entities/legacy-common.entity.js +68 -0
  159. package/dist/entities/legacy-common.entity.js.map +1 -0
  160. package/dist/entities/list-of-values.entity.js +2 -2
  161. package/dist/entities/list-of-values.entity.js.map +1 -1
  162. package/dist/entities/locale.entity.js +1 -1
  163. package/dist/entities/locale.entity.js.map +1 -1
  164. package/dist/entities/media.entity.d.ts.map +1 -1
  165. package/dist/entities/media.entity.js +3 -3
  166. package/dist/entities/media.entity.js.map +1 -1
  167. package/dist/entities/menu-item-metadata.entity.js +4 -4
  168. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  169. package/dist/entities/model-metadata.entity.d.ts +2 -0
  170. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  171. package/dist/entities/model-metadata.entity.js +11 -3
  172. package/dist/entities/model-metadata.entity.js.map +1 -1
  173. package/dist/entities/model-sequence.entity.d.ts +15 -0
  174. package/dist/entities/model-sequence.entity.d.ts.map +1 -0
  175. package/dist/entities/model-sequence.entity.js +67 -0
  176. package/dist/entities/model-sequence.entity.js.map +1 -0
  177. package/dist/entities/mq-message-queue.entity.js +1 -1
  178. package/dist/entities/mq-message-queue.entity.js.map +1 -1
  179. package/dist/entities/mq-message.entity.d.ts +3 -3
  180. package/dist/entities/mq-message.entity.d.ts.map +1 -1
  181. package/dist/entities/mq-message.entity.js +10 -10
  182. package/dist/entities/mq-message.entity.js.map +1 -1
  183. package/dist/entities/saved-filters.entity.js +4 -4
  184. package/dist/entities/saved-filters.entity.js.map +1 -1
  185. package/dist/entities/scheduled-job.entity.js +4 -4
  186. package/dist/entities/scheduled-job.entity.js.map +1 -1
  187. package/dist/entities/security-rule.entity.js +2 -2
  188. package/dist/entities/security-rule.entity.js.map +1 -1
  189. package/dist/entities/setting.entity.js +2 -2
  190. package/dist/entities/setting.entity.js.map +1 -1
  191. package/dist/entities/sms-template.entity.js +2 -2
  192. package/dist/entities/sms-template.entity.js.map +1 -1
  193. package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
  194. package/dist/entities/user-activity-history.entity.js +1 -1
  195. package/dist/entities/user-activity-history.entity.js.map +1 -1
  196. package/dist/entities/user-view-metadata.entity.js +2 -2
  197. package/dist/entities/user-view-metadata.entity.js.map +1 -1
  198. package/dist/entities/user.entity.js +13 -15
  199. package/dist/entities/user.entity.js.map +1 -1
  200. package/dist/entities/view-metadata.entity.js +3 -3
  201. package/dist/entities/view-metadata.entity.js.map +1 -1
  202. package/dist/helpers/date.helper.d.ts +1 -1
  203. package/dist/helpers/date.helper.d.ts.map +1 -1
  204. package/dist/helpers/date.helper.js +24 -2
  205. package/dist/helpers/date.helper.js.map +1 -1
  206. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.d.ts.map +1 -1
  207. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js +13 -2
  208. package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
  209. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +0 -1
  210. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  211. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +4 -9
  212. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  213. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +0 -1
  214. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
  215. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +7 -8
  216. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
  217. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +0 -1
  218. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  219. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +4 -9
  220. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  221. package/dist/helpers/model-metadata-helper.service.d.ts +4 -1
  222. package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
  223. package/dist/helpers/model-metadata-helper.service.js +52 -30
  224. package/dist/helpers/model-metadata-helper.service.js.map +1 -1
  225. package/dist/helpers/module-metadata-helper.service.d.ts +1 -0
  226. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  227. package/dist/helpers/module-metadata-helper.service.js +9 -0
  228. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  229. package/dist/helpers/module.helper.d.ts +1 -0
  230. package/dist/helpers/module.helper.d.ts.map +1 -1
  231. package/dist/helpers/module.helper.js +26 -2
  232. package/dist/helpers/module.helper.js.map +1 -1
  233. package/dist/helpers/schematic.service.d.ts +9 -3
  234. package/dist/helpers/schematic.service.d.ts.map +1 -1
  235. package/dist/helpers/schematic.service.js +49 -32
  236. package/dist/helpers/schematic.service.js.map +1 -1
  237. package/dist/helpers/solid-registry.d.ts +14 -2
  238. package/dist/helpers/solid-registry.d.ts.map +1 -1
  239. package/dist/helpers/solid-registry.js +10 -0
  240. package/dist/helpers/solid-registry.js.map +1 -1
  241. package/dist/helpers/typeorm-db-helper.d.ts +3 -0
  242. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -0
  243. package/dist/helpers/typeorm-db-helper.js +24 -0
  244. package/dist/helpers/typeorm-db-helper.js.map +1 -0
  245. package/dist/index.d.ts +7 -2
  246. package/dist/index.d.ts.map +1 -1
  247. package/dist/index.js +8 -3
  248. package/dist/index.js.map +1 -1
  249. package/dist/interfaces.d.ts +3 -0
  250. package/dist/interfaces.d.ts.map +1 -1
  251. package/dist/interfaces.js.map +1 -1
  252. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts +1 -0
  253. package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
  254. package/dist/jobs/computed-field-evaluation-subscriber.service.js +16 -4
  255. package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +1 -1
  256. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
  257. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +6 -1
  258. package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
  259. package/dist/repository/media.repository.d.ts.map +1 -1
  260. package/dist/repository/media.repository.js +4 -0
  261. package/dist/repository/media.repository.js.map +1 -1
  262. package/dist/repository/model-sequence.repository.d.ts +14 -0
  263. package/dist/repository/model-sequence.repository.d.ts.map +1 -0
  264. package/dist/repository/model-sequence.repository.js +103 -0
  265. package/dist/repository/model-sequence.repository.js.map +1 -0
  266. package/dist/seeders/module-metadata-seeder.service.d.ts +8 -13
  267. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  268. package/dist/seeders/module-metadata-seeder.service.js +103 -43
  269. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  270. package/dist/seeders/seed-data/solid-core-metadata.json +553 -652
  271. package/dist/seeders/system-fields-seeder.service.d.ts +1 -0
  272. package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
  273. package/dist/seeders/system-fields-seeder.service.js +12 -3
  274. package/dist/seeders/system-fields-seeder.service.js.map +1 -1
  275. package/dist/services/action-metadata.service.d.ts.map +1 -1
  276. package/dist/services/action-metadata.service.js +1 -0
  277. package/dist/services/action-metadata.service.js.map +1 -1
  278. package/dist/services/ai-interaction.service.d.ts.map +1 -1
  279. package/dist/services/ai-interaction.service.js +2 -1
  280. package/dist/services/ai-interaction.service.js.map +1 -1
  281. package/dist/services/authentication.service.d.ts.map +1 -1
  282. package/dist/services/authentication.service.js +22 -14
  283. package/dist/services/authentication.service.js.map +1 -1
  284. package/dist/services/chatter-message-details.service.d.ts.map +1 -1
  285. package/dist/services/chatter-message-details.service.js +1 -0
  286. package/dist/services/chatter-message-details.service.js.map +1 -1
  287. package/dist/services/chatter-message.service.d.ts.map +1 -1
  288. package/dist/services/chatter-message.service.js +7 -3
  289. package/dist/services/chatter-message.service.js.map +1 -1
  290. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
  291. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +10 -6
  292. package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
  293. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +15 -0
  294. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -0
  295. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +72 -0
  296. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -0
  297. package/dist/services/crud-helper.service.d.ts +31 -6
  298. package/dist/services/crud-helper.service.d.ts.map +1 -1
  299. package/dist/services/crud-helper.service.js +285 -50
  300. package/dist/services/crud-helper.service.js.map +1 -1
  301. package/dist/services/crud.service.d.ts +7 -2
  302. package/dist/services/crud.service.d.ts.map +1 -1
  303. package/dist/services/crud.service.js +135 -26
  304. package/dist/services/crud.service.js.map +1 -1
  305. package/dist/services/database/database-bootstrap.service.d.ts +12 -0
  306. package/dist/services/database/database-bootstrap.service.d.ts.map +1 -0
  307. package/dist/services/database/database-bootstrap.service.js +115 -0
  308. package/dist/services/database/database-bootstrap.service.js.map +1 -0
  309. package/dist/services/email-template.service.d.ts +7 -7
  310. package/dist/services/email-template.service.d.ts.map +1 -1
  311. package/dist/services/email-template.service.js +8 -7
  312. package/dist/services/email-template.service.js.map +1 -1
  313. package/dist/services/excel.service.d.ts +10 -0
  314. package/dist/services/excel.service.d.ts.map +1 -1
  315. package/dist/services/excel.service.js +100 -0
  316. package/dist/services/excel.service.js.map +1 -1
  317. package/dist/services/field-metadata.service.d.ts +146 -6
  318. package/dist/services/field-metadata.service.d.ts.map +1 -1
  319. package/dist/services/field-metadata.service.js +218 -58
  320. package/dist/services/field-metadata.service.js.map +1 -1
  321. package/dist/services/file.service.d.ts +1 -0
  322. package/dist/services/file.service.d.ts.map +1 -1
  323. package/dist/services/file.service.js +9 -0
  324. package/dist/services/file.service.js.map +1 -1
  325. package/dist/services/fixtures.service.d.ts +13 -0
  326. package/dist/services/fixtures.service.d.ts.map +1 -0
  327. package/dist/services/fixtures.service.js +95 -0
  328. package/dist/services/fixtures.service.js.map +1 -0
  329. package/dist/services/genai/ingest-metadata.service.d.ts.map +1 -1
  330. package/dist/services/genai/ingest-metadata.service.js +1 -1
  331. package/dist/services/genai/ingest-metadata.service.js.map +1 -1
  332. package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
  333. package/dist/services/import-transaction-error-log.service.js +1 -0
  334. package/dist/services/import-transaction-error-log.service.js.map +1 -1
  335. package/dist/services/import-transaction.service.d.ts.map +1 -1
  336. package/dist/services/import-transaction.service.js +7 -1
  337. package/dist/services/import-transaction.service.js.map +1 -1
  338. package/dist/services/list-of-values.service.d.ts +2 -2
  339. package/dist/services/list-of-values.service.d.ts.map +1 -1
  340. package/dist/services/list-of-values.service.js +2 -1
  341. package/dist/services/list-of-values.service.js.map +1 -1
  342. package/dist/services/locale.service.d.ts.map +1 -1
  343. package/dist/services/locale.service.js +1 -0
  344. package/dist/services/locale.service.js.map +1 -1
  345. package/dist/services/mail/smtp-email.service.js +0 -1
  346. package/dist/services/mail/smtp-email.service.js.map +1 -1
  347. package/dist/services/media.service.d.ts +3 -3
  348. package/dist/services/media.service.d.ts.map +1 -1
  349. package/dist/services/media.service.js +6 -4
  350. package/dist/services/media.service.js.map +1 -1
  351. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  352. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +17 -6
  353. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  354. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  355. package/dist/services/mediaStorageProviders/file-storage-provider.js +0 -13
  356. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  357. package/dist/services/menu-item-metadata.service.d.ts +3 -1
  358. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  359. package/dist/services/menu-item-metadata.service.js +35 -11
  360. package/dist/services/menu-item-metadata.service.js.map +1 -1
  361. package/dist/services/model-metadata.service.d.ts.map +1 -1
  362. package/dist/services/model-metadata.service.js +16 -45
  363. package/dist/services/model-metadata.service.js.map +1 -1
  364. package/dist/services/model-sequence.service.d.ts +23 -0
  365. package/dist/services/model-sequence.service.d.ts.map +1 -0
  366. package/dist/services/model-sequence.service.js +55 -0
  367. package/dist/services/model-sequence.service.js.map +1 -0
  368. package/dist/services/module-metadata.service.d.ts +1 -0
  369. package/dist/services/module-metadata.service.d.ts.map +1 -1
  370. package/dist/services/module-metadata.service.js +35 -1
  371. package/dist/services/module-metadata.service.js.map +1 -1
  372. package/dist/services/mq-message.service.d.ts.map +1 -1
  373. package/dist/services/mq-message.service.js +3 -4
  374. package/dist/services/mq-message.service.js.map +1 -1
  375. package/dist/services/permission-metadata.service.d.ts +5 -5
  376. package/dist/services/permission-metadata.service.d.ts.map +1 -1
  377. package/dist/services/permission-metadata.service.js +6 -5
  378. package/dist/services/permission-metadata.service.js.map +1 -1
  379. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  380. package/dist/services/queues/database-subscriber.service.js +2 -1
  381. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  382. package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
  383. package/dist/services/queues/publisher-factory.service.js +4 -0
  384. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  385. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  386. package/dist/services/queues/rabbitmq-subscriber.service.js +2 -2
  387. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  388. package/dist/services/role-metadata.service.d.ts.map +1 -1
  389. package/dist/services/role-metadata.service.js +1 -0
  390. package/dist/services/role-metadata.service.js.map +1 -1
  391. package/dist/services/scheduled-job.service.d.ts +6 -6
  392. package/dist/services/scheduled-job.service.d.ts.map +1 -1
  393. package/dist/services/scheduled-job.service.js +8 -8
  394. package/dist/services/scheduled-job.service.js.map +1 -1
  395. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  396. package/dist/services/scheduled-jobs/scheduler.service.js +4 -0
  397. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  398. package/dist/services/security-rule.service.d.ts.map +1 -1
  399. package/dist/services/security-rule.service.js +1 -0
  400. package/dist/services/security-rule.service.js.map +1 -1
  401. package/dist/services/selection-providers/list-of-models-selection-provider.service.d.ts.map +1 -1
  402. package/dist/services/selection-providers/list-of-models-selection-provider.service.js +4 -0
  403. package/dist/services/selection-providers/list-of-models-selection-provider.service.js.map +1 -1
  404. package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.d.ts +2 -2
  405. package/dist/services/selection-providers/list-of-values-selection-providers.service.d.ts.map +1 -0
  406. package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.js +3 -3
  407. package/dist/services/selection-providers/list-of-values-selection-providers.service.js.map +1 -0
  408. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts +20 -0
  409. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts.map +1 -0
  410. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js +87 -0
  411. package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js.map +1 -0
  412. package/dist/services/setting.service.d.ts +7 -5
  413. package/dist/services/setting.service.d.ts.map +1 -1
  414. package/dist/services/setting.service.js +28 -5
  415. package/dist/services/setting.service.js.map +1 -1
  416. package/dist/services/sms-template.service.d.ts +7 -7
  417. package/dist/services/sms-template.service.d.ts.map +1 -1
  418. package/dist/services/sms-template.service.js +8 -7
  419. package/dist/services/sms-template.service.js.map +1 -1
  420. package/dist/services/solid-introspect.service.d.ts +10 -3
  421. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  422. package/dist/services/solid-introspect.service.js +66 -12
  423. package/dist/services/solid-introspect.service.js.map +1 -1
  424. package/dist/services/solid-ts-morph.service.js +2 -2
  425. package/dist/services/solid-ts-morph.service.js.map +1 -1
  426. package/dist/services/user-activity-history.service.d.ts.map +1 -1
  427. package/dist/services/user-activity-history.service.js +1 -0
  428. package/dist/services/user-activity-history.service.js.map +1 -1
  429. package/dist/services/user-view-metadata.service.d.ts.map +1 -1
  430. package/dist/services/user-view-metadata.service.js +3 -2
  431. package/dist/services/user-view-metadata.service.js.map +1 -1
  432. package/dist/services/user.service.d.ts.map +1 -1
  433. package/dist/services/user.service.js +1 -0
  434. package/dist/services/user.service.js.map +1 -1
  435. package/dist/services/view-metadata.service.d.ts +3 -1
  436. package/dist/services/view-metadata.service.d.ts.map +1 -1
  437. package/dist/services/view-metadata.service.js +33 -5
  438. package/dist/services/view-metadata.service.js.map +1 -1
  439. package/dist/solid-core-cli-db.module.d.ts.map +1 -1
  440. package/dist/solid-core-cli-db.module.js +5 -2
  441. package/dist/solid-core-cli-db.module.js.map +1 -1
  442. package/dist/solid-core.module.d.ts.map +1 -1
  443. package/dist/solid-core.module.js +23 -1
  444. package/dist/solid-core.module.js.map +1 -1
  445. package/dist/subscribers/audit.subscriber.d.ts +3 -2
  446. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  447. package/dist/subscribers/audit.subscriber.js +8 -10
  448. package/dist/subscribers/audit.subscriber.js.map +1 -1
  449. package/dist/subscribers/computed-entity-field.subscriber.d.ts +7 -4
  450. package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
  451. package/dist/subscribers/computed-entity-field.subscriber.js +60 -21
  452. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  453. package/dist/subscribers/created-by-updated-by.subscriber.d.ts +4 -2
  454. package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
  455. package/dist/subscribers/created-by-updated-by.subscriber.js +10 -8
  456. package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
  457. package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -1
  458. package/dist/subscribers/field-metadata.subscriber.js +0 -1
  459. package/dist/subscribers/field-metadata.subscriber.js.map +1 -1
  460. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
  461. package/dist/subscribers/model-metadata.subscriber.js +3 -2
  462. package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
  463. package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts +3 -2
  464. package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts.map +1 -1
  465. package/dist/subscribers/soft-delete-aware-event.subscriber.js +6 -11
  466. package/dist/subscribers/soft-delete-aware-event.subscriber.js.map +1 -1
  467. package/dist/transformers/typeorm/local-date-time-transformer.d.ts +5 -0
  468. package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -0
  469. package/dist/transformers/typeorm/local-date-time-transformer.js +26 -0
  470. package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -0
  471. package/dist/tsconfig.tsbuildinfo +1 -1
  472. package/docs/grouping-enhancements.md +89 -0
  473. package/package.json +1 -1
  474. package/sql/default/mssql/proc_CleanupModelMetadata.sql +175 -0
  475. package/sql/default/mssql/proc_CleanupModuleMetadata.sql +78 -0
  476. package/sql/default/mssql/scratchpad.sql.txt +10 -0
  477. package/sql/default/postgres/proc_CleanupModelMetadata.sql +148 -0
  478. package/sql/default/postgres/proc_CleanupModuleMetadata.sql +50 -0
  479. package/sql/default/postgres/scratchpad.sql.txt +12 -0
  480. package/sql-server-changes.txt +88 -0
  481. package/src/commands/fixtures/fixtures-setup.command.ts +44 -0
  482. package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
  483. package/src/commands/mcp.command.ts +215 -0
  484. package/src/commands/refresh-model.command.ts +39 -5
  485. package/src/commands/remove-fields.command.ts +1 -1
  486. package/src/commands/seed.command.ts +34 -15
  487. package/src/constants/error-messages.ts +7 -1
  488. package/src/controllers/authentication.controller.ts +1 -1
  489. package/src/controllers/email-template.controller.ts +1 -1
  490. package/src/controllers/field-metadata.controller.ts +7 -1
  491. package/src/controllers/media-storage-provider-metadata.controller.ts +1 -1
  492. package/src/controllers/model-metadata.controller.ts +1 -1
  493. package/src/controllers/model-sequence.controller.ts +93 -0
  494. package/src/controllers/module-metadata.controller.ts +1 -1
  495. package/src/controllers/otp-authentication.controller.ts +1 -1
  496. package/src/controllers/service.controller.ts +1 -1
  497. package/src/controllers/setting.controller.ts +33 -21
  498. package/src/controllers/sms-template.controller.ts +1 -1
  499. package/src/controllers/test-queue.controller.ts +1 -1
  500. package/src/controllers/test.controller.ts +1 -1
  501. package/src/dtos/basic-filters.dto.ts +6 -1
  502. package/src/dtos/basic-group-filters.dto.ts +23 -0
  503. package/src/dtos/create-ai-interaction.dto.ts +16 -9
  504. package/src/dtos/create-field-metadata.dto.ts +43 -13
  505. package/src/dtos/create-import-transaction.dto.ts +0 -4
  506. package/src/dtos/create-model-metadata.dto.ts +10 -0
  507. package/src/dtos/create-model-sequence.dto.ts +51 -0
  508. package/src/dtos/create-role-metadata.dto.ts +23 -4
  509. package/src/dtos/get-mcp-url.dto.ts +13 -0
  510. package/src/dtos/resolve-s3-url.dto.ts +31 -0
  511. package/src/dtos/update-ai-interaction.dto.ts +16 -9
  512. package/src/dtos/update-field-metadata.dto.ts +1 -2
  513. package/src/dtos/update-import-transaction.dto.ts +0 -4
  514. package/src/dtos/update-model-sequence.dto.ts +53 -0
  515. package/src/entities/action-metadata.entity.ts +4 -4
  516. package/src/entities/ai-interaction.entity.ts +16 -12
  517. package/src/entities/chatter-message-details.entity.ts +18 -18
  518. package/src/entities/chatter-message.entity.ts +2 -2
  519. package/src/entities/common.entity.ts +20 -11
  520. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +2 -2
  521. package/src/entities/dashboard-question.entity.ts +3 -3
  522. package/src/entities/dashboard-variable.entity.ts +3 -3
  523. package/src/entities/dashboard.entity.ts +1 -1
  524. package/src/entities/email-template.entity.ts +4 -3
  525. package/src/entities/export-template.entity.ts +2 -2
  526. package/src/entities/export-transaction.entity.ts +2 -2
  527. package/src/entities/field-metadata.entity.ts +6 -3
  528. package/src/entities/import-transaction-error-log.entity.ts +2 -2
  529. package/src/entities/import-transaction.entity.ts +2 -5
  530. package/src/entities/legacy-common-with-id.entity.ts +11 -0
  531. package/src/entities/legacy-common.entity.ts +58 -0
  532. package/src/entities/list-of-values.entity.ts +2 -2
  533. package/src/entities/locale.entity.ts +1 -1
  534. package/src/entities/media.entity.ts +25 -25
  535. package/src/entities/menu-item-metadata.entity.ts +4 -4
  536. package/src/entities/model-metadata.entity.ts +9 -2
  537. package/src/entities/model-sequence.entity.ts +32 -0
  538. package/src/entities/mq-message-queue.entity.ts +1 -1
  539. package/src/entities/mq-message.entity.ts +34 -34
  540. package/src/entities/saved-filters.entity.ts +5 -5
  541. package/src/entities/scheduled-job.entity.ts +4 -4
  542. package/src/entities/security-rule.entity.ts +2 -2
  543. package/src/entities/setting.entity.ts +2 -2
  544. package/src/entities/sms-template.entity.ts +2 -2
  545. package/src/entities/user-activity-history.entity.ts +14 -14
  546. package/src/entities/user-view-metadata.entity.ts +2 -2
  547. package/src/entities/user.entity.ts +15 -15
  548. package/src/entities/view-metadata.entity.ts +3 -3
  549. package/src/helpers/date.helper.ts +31 -10
  550. package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +18 -5
  551. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +9 -9
  552. package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +16 -8
  553. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +9 -9
  554. package/src/helpers/model-metadata-helper.service.ts +67 -34
  555. package/src/helpers/module-metadata-helper.service.ts +18 -1
  556. package/src/helpers/module.helper.ts +37 -1
  557. package/src/helpers/schematic.service.ts +72 -46
  558. package/src/helpers/solid-registry.ts +28 -2
  559. package/src/helpers/typeorm-db-helper.ts +26 -0
  560. package/src/index.ts +7 -2
  561. package/src/interfaces.ts +3 -0
  562. package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
  563. package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +17 -21
  564. package/src/repository/media.repository.ts +3 -2
  565. package/src/repository/model-sequence.repository.ts +97 -0
  566. package/src/seeders/module-metadata-seeder.service.ts +176 -58
  567. package/src/seeders/seed-data/solid-core-metadata.json +555 -654
  568. package/src/seeders/system-fields-seeder.service.ts +39 -36
  569. package/src/services/action-metadata.service.ts +3 -2
  570. package/src/services/ai-interaction.service.ts +3 -2
  571. package/src/services/authentication.service.ts +46 -14
  572. package/src/services/chatter-message-details.service.ts +2 -1
  573. package/src/services/chatter-message.service.ts +10 -4
  574. package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +17 -12
  575. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
  576. package/src/services/crud-helper.service.ts +319 -53
  577. package/src/services/crud.service.ts +233 -34
  578. package/src/services/database/database-bootstrap.service.ts +91 -0
  579. package/src/services/email-template.service.ts +11 -13
  580. package/src/services/excel.service.ts +146 -3
  581. package/src/services/field-metadata.service.ts +322 -70
  582. package/src/services/file.service.ts +9 -0
  583. package/src/services/fixtures.service.ts +108 -0
  584. package/src/services/genai/ingest-metadata.service.ts +4 -3
  585. package/src/services/import-transaction-error-log.service.ts +2 -1
  586. package/src/services/import-transaction.service.ts +8 -4
  587. package/src/services/list-of-values.service.ts +4 -4
  588. package/src/services/locale.service.ts +2 -1
  589. package/src/services/mail/smtp-email.service.ts +1 -1
  590. package/src/services/media.service.ts +10 -11
  591. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +22 -7
  592. package/src/services/mediaStorageProviders/file-storage-provider.ts +18 -13
  593. package/src/services/menu-item-metadata.service.ts +87 -52
  594. package/src/services/model-metadata.service.ts +68 -47
  595. package/src/services/model-sequence.service.ts +33 -0
  596. package/src/services/module-metadata.service.ts +49 -2
  597. package/src/services/mq-message.service.ts +16 -15
  598. package/src/services/permission-metadata.service.ts +8 -9
  599. package/src/services/queues/database-subscriber.service.ts +3 -1
  600. package/src/services/queues/publisher-factory.service.ts +2 -1
  601. package/src/services/queues/rabbitmq-subscriber.service.ts +4 -2
  602. package/src/services/role-metadata.service.ts +1 -0
  603. package/src/services/scheduled-job.service.ts +9 -9
  604. package/src/services/scheduled-jobs/scheduler.service.ts +5 -0
  605. package/src/services/security-rule.service.ts +1 -0
  606. package/src/services/selection-providers/list-of-models-selection-provider.service.ts +5 -2
  607. package/src/{providers → services/selection-providers}/list-of-values-selection-providers.service.ts +2 -2
  608. package/src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts +94 -0
  609. package/src/services/setting.service.ts +46 -16
  610. package/src/services/sms-template.service.ts +11 -13
  611. package/src/services/solid-introspect.service.ts +97 -10
  612. package/src/services/solid-ts-morph.service.ts +2 -2
  613. package/src/services/user-activity-history.service.ts +3 -2
  614. package/src/services/user-view-metadata.service.ts +4 -3
  615. package/src/services/user.service.ts +2 -1
  616. package/src/services/view-metadata.service.ts +52 -21
  617. package/src/solid-core-cli-db.module.ts +5 -4
  618. package/src/solid-core.module.ts +23 -1
  619. package/src/subscribers/audit.subscriber.ts +14 -9
  620. package/src/subscribers/computed-entity-field.subscriber.ts +71 -22
  621. package/src/subscribers/created-by-updated-by.subscriber.ts +14 -8
  622. package/src/subscribers/field-metadata.subscriber.ts +1 -1
  623. package/src/subscribers/model-metadata.subscriber.ts +4 -2
  624. package/src/subscribers/soft-delete-aware-event.subscriber.ts +12 -6
  625. package/src/transformers/typeorm/local-date-time-transformer.ts +30 -0
  626. package/dist/providers/list-of-values-selection-providers.service.d.ts.map +0 -1
  627. package/dist/providers/list-of-values-selection-providers.service.js.map +0 -1
  628. package/src/commands/ingest-rag-chunking-strategy-for.md +0 -224
  629. package/src/entities/user.entity.ts.bkp +0 -144
  630. package/src/services/docker exec -it mssql //" +0 -8
@@ -1,8 +1,8 @@
1
- import { BadRequestException, NotFoundException } from "@nestjs/common";
1
+ import { BadRequestException, Inject, NotFoundException } from "@nestjs/common";
2
2
  import { ConfigService } from "@nestjs/config";
3
3
  import { DiscoveryService, ModuleRef } from "@nestjs/core";
4
4
  import { isArray } from "class-validator";
5
- import { CommonEntity, SolidBaseRepository } from "src";
5
+ import { CommonEntity, SolidBaseRepository, User } from "src";
6
6
  import { ERROR_MESSAGES } from "src/constants/error-messages";
7
7
  import { SUCCESS_MESSAGES } from "src/constants/success-messages";
8
8
  import { EntityManager, FindOptionsWhere, In, IsNull, Not, QueryFailedError, SelectQueryBuilder } from "typeorm";
@@ -33,13 +33,14 @@ import { SelectionStaticFieldCrudManager } from "../helpers/field-crud-managers/
33
33
  import { ShortTextFieldCrudManager } from "../helpers/field-crud-managers/ShortTextFieldCrudManager";
34
34
  import { UUIDFieldCrudManager } from "../helpers/field-crud-managers/UUIDFieldCrudManager";
35
35
  import { FieldCrudManager, MediaWithFullUrl } from "../interfaces";
36
- import { CrudHelperService } from "./crud-helper.service";
36
+ import { CrudHelperService, FilterCombinator, UserIdFields } from "./crud-helper.service";
37
37
  import { FileService } from "./file.service";
38
38
  import { HashingService } from "./hashing.service";
39
39
  import { getMediaStorageProvider } from "./mediaStorageProviders";
40
40
  import { ModelMetadataService } from "./model-metadata.service";
41
41
  import { ModuleMetadataService } from "./module-metadata.service";
42
42
  import { RequestContextService } from "./request-context.service";
43
+ import { BasicGroupFilterDto } from "src/dtos/basic-group-filters.dto";
43
44
 
44
45
  export class CRUDService<T extends CommonEntity> { // Add two generic value i.e Person,CreatePersonDto, so we get the proper types in our service
45
46
 
@@ -55,6 +56,8 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
55
56
  readonly modelName: string,
56
57
  readonly moduleName: string,
57
58
  readonly moduleRef: ModuleRef,
59
+ readonly defaultEntityManager? : EntityManager
60
+
58
61
  //We can just have the Model Entity here
59
62
  ) { }
60
63
 
@@ -178,7 +181,16 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
178
181
  throw new Error(`Entity [${this.moduleName}.${this.modelName}] with id ${id} not found`);
179
182
  }
180
183
 
181
- updateDto.id = id;
184
+ if (model.draftPublishWorkflow === true && entity.publishedAt) {
185
+ throw new BadRequestException(`Cannot update a published record for model ${this.modelName}. Unpublish it first.`
186
+ );
187
+ }
188
+
189
+ // // In some instances for legacy tables sometimes id is mapped as a bigint.
190
+ // // in these cases the update method ends up attempting to insert records due to some type orm type mismatch issue.
191
+ // const idFieldMetadata = model.fields.find(f => f.name === 'id');
192
+ // updateDto.id = idFieldMetadata?.type === 'bigint' ? BigInt(id) : id;
193
+
182
194
  // This class will be extended by the generated service class i.e PersonService
183
195
  // The data required to identify the model and module name will be passed from the generate CrudService subclass
184
196
  //TODO: Algorithm to create the entity
@@ -239,6 +251,10 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
239
251
  throw new Error(`Entity [${this.moduleName}.${this.modelName}] with id ${id} not found`);
240
252
  }
241
253
 
254
+ if (model.draftPublishWorkflow === true && entity.publishedAt) {
255
+ throw new BadRequestException(`Cannot update a published record for model ${this.modelName}, Unpublish it first.`);
256
+ }
257
+
242
258
  // If the model has internationalisation enabled, delete children with defaultEntityLocaleId === this entity's id
243
259
  if (model.internationalisation) {
244
260
  // Find all child entities where defaultEntityLocaleId === this entity's id
@@ -430,6 +446,8 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
430
446
  const alias = 'entity';
431
447
  // Extract the required keys from the input query
432
448
  let { limit, offset, populateMedia, populateGroup, groupFilter } = basicFilterDto;
449
+ const populateUserIdFields = this.crudHelperService.extractUserIdFieldsFromPopulate(basicFilterDto.populate);
450
+
433
451
  const { singularName, internationalisation, draftPublishWorkflow } = await this.loadModel();
434
452
  // Check wheather user has update permission for model
435
453
  if (solidRequestContext.activeUser) {
@@ -445,16 +463,34 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
445
463
 
446
464
  // Create above query on pincode table using query builder
447
465
  var qb: SelectQueryBuilder<T> = await this.repo.createSecurityRuleAwareQueryBuilder(alias)
448
- qb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
449
- if (internationalisation && draftPublishWorkflow) {
450
- qb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow, this.moduleRef);
451
- }
452
466
 
453
467
  if (basicFilterDto.groupBy) {
454
- // Get the records and the count
455
- const { groupMeta, groupRecords } = await this.handleGroupFind(qb, groupFilter, populateGroup, alias, populateMedia);
456
- const totalGroups = await this.crudHelperService.countGroupedRecords(qb, basicFilterDto, alias);
457
- qb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
468
+ const groupFilterQb = (internationalisation && draftPublishWorkflow)
469
+ ? this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow, this.moduleRef, FilterCombinator.AND, false, false)
470
+ : this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, undefined, undefined, undefined, FilterCombinator.AND, false, false);
471
+
472
+ const groupByFields = this.crudHelperService.normalize(basicFilterDto.groupBy);
473
+ if (!groupByFields.length) {
474
+ throw new BadRequestException(ERROR_MESSAGES.INVALID_GROUP_BY_COUNT);
475
+ }
476
+
477
+ if (basicFilterDto.populateGroup) {
478
+ const hasRelationGroup = groupByFields.some(field => field.includes('.'));
479
+ if (hasRelationGroup) {
480
+ throw new BadRequestException('populateGroup is not supported when grouping on relation fields. Fetch group metadata first and retrieve records in a separate call.');
481
+ }
482
+ }
483
+
484
+ const { aliasMap: groupAliasMap, formatMap: groupFormatMap, expressionMap: groupExpressionMap } = this.crudHelperService.applyGroupBySelections(groupFilterQb, groupByFields, alias);
485
+ const aggregateAliasMap = this.crudHelperService.applyAggregates(groupFilterQb, basicFilterDto.aggregates, alias);
486
+ const sortAliasMap = { ...groupAliasMap, ...aggregateAliasMap };
487
+ this.crudHelperService.applyGroupSortingAndPagination(groupFilterQb, basicFilterDto.sort, sortAliasMap, limit, offset);
488
+
489
+ const groupByResult = await groupFilterQb.getRawMany();
490
+ const totalGroups = await this.crudHelperService.countGroups(groupFilterQb);
491
+
492
+ const groupByFieldsOrdered = this.crudHelperService.normalize(basicFilterDto.groupBy || []);
493
+ const { groupMeta, groupRecords } = await this.handleGroupFind(groupByResult, groupFilter, populateGroup, alias, populateUserIdFields, populateMedia, basicFilterDto, groupAliasMap, aggregateAliasMap, groupByFieldsOrdered, groupFormatMap, groupExpressionMap);
458
494
 
459
495
  return {
460
496
  meta: {
@@ -465,8 +501,10 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
465
501
  }
466
502
  }
467
503
  else {
468
- // Get the records and the count
469
- const { meta, records } = await this.handleNonGroupFind(qb, populateMedia, offset, limit, alias);
504
+ qb = (internationalisation && draftPublishWorkflow)
505
+ ? this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow, this.moduleRef)
506
+ : this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
507
+ const { meta, records } = await this.handleNonGroupFind(qb, populateUserIdFields, populateMedia, offset, limit, alias);
470
508
  return {
471
509
  meta,
472
510
  records,
@@ -474,9 +512,14 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
474
512
  }
475
513
  }
476
514
 
477
- private async handleNonGroupFind(qb: SelectQueryBuilder<T>, populateMedia: string[], offset: number, limit: number, alias: string) {
515
+ private async handleNonGroupFind(qb: SelectQueryBuilder<T>, populateUserIdFields: UserIdFields[], populateMedia: string[], offset: number, limit: number, alias: string) {
478
516
  const [entities, count] = await qb.getManyAndCount();
479
517
 
518
+ // Populate the entity with the userId fields
519
+ if (populateUserIdFields && populateUserIdFields.length > 0) {
520
+ await this.handlePopulateUserIdFields(populateUserIdFields, entities);
521
+ }
522
+
480
523
  // Populate the entity with the media
481
524
  if (populateMedia && populateMedia.length > 0) {
482
525
  await this.handlePopulateMedia(populateMedia, entities);
@@ -485,37 +528,65 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
485
528
  return this.wrapFindResponse(offset, limit, count, entities);
486
529
  }
487
530
 
488
- private async handleGroupFind(qb: SelectQueryBuilder<T>, groupFilter: BasicFilterDto, populateGroup: boolean, alias: string, populateMedia: string[]) {
489
- const groupByResult = await qb.getRawMany();
490
-
531
+ private async handleGroupFind(
532
+ groupByResult: any[],
533
+ groupFilter: BasicGroupFilterDto | undefined,
534
+ populateGroup: boolean,
535
+ alias: string,
536
+ populateUserIdFields: UserIdFields[],
537
+ populateMedia: string[],
538
+ baseFilterDto: BasicFilterDto,
539
+ groupAliasMap: Record<string, string>,
540
+ aggregateAliasMap: Record<string, string>,
541
+ groupByFieldsOrdered: string[],
542
+ groupFormatMap: Record<string, string | undefined>,
543
+ groupExpressionMap: Record<string, string>
544
+ ) {
491
545
  const groupMeta = [];
492
546
  const groupRecords = [];
547
+ const aggregateAliasSet = new Set(Object.values(aggregateAliasMap));
493
548
  // For each group, get the records and the count
494
549
  for (const group of groupByResult) {
495
550
  if (populateGroup) {
496
551
  let groupByQb: SelectQueryBuilder<T> = await this.repo.createSecurityRuleAwareQueryBuilder(alias);
497
- groupByQb = this.crudHelperService.buildFilterQuery(groupByQb, groupFilter, alias);
498
- groupByQb = this.crudHelperService.buildGroupByRecordsQuery(groupByQb, group, alias);
552
+ const groupFilterDto: BasicFilterDto = {
553
+ ...baseFilterDto,
554
+ ...groupFilter,
555
+ groupBy: undefined,
556
+ aggregates: undefined,
557
+ // Only use explicit groupFilter.sort for record ordering; group-level sorts can contain
558
+ // group expressions (e.g. createdAt:day) that are invalid on record queries.
559
+ sort: groupFilter?.sort,
560
+ };
561
+ groupByQb = this.crudHelperService.buildFilterQuery(groupByQb, groupFilterDto, alias);
562
+ groupByQb = this.crudHelperService.buildGroupByRecordsQuery(groupByQb, group, alias, groupAliasMap, aggregateAliasMap, groupExpressionMap);
499
563
  const [entities, count] = await groupByQb.getManyAndCount();
500
564
 
565
+ // Populate the entity with the userId fields
566
+ if (populateUserIdFields && populateUserIdFields.length > 0) {
567
+ await this.handlePopulateUserIdFields(populateUserIdFields, entities);
568
+ }
569
+
501
570
  // Populate the entity with the media
502
571
  if (populateMedia && populateMedia.length > 0) {
503
572
  await this.handlePopulateMedia(populateMedia, entities);
504
573
  }
505
- const groupData = this.wrapFindResponse(groupFilter.offset, groupFilter.limit, count, entities);
506
- groupRecords.push(this.crudHelperService.createGroupRecords(group, alias, groupData));
574
+ const groupData = this.wrapFindResponse(groupFilter?.offset, groupFilter?.limit, count, entities);
575
+ groupRecords.push(this.crudHelperService.createGroupRecords(group, aggregateAliasSet, groupData, groupByFieldsOrdered, groupAliasMap, groupFormatMap));
507
576
  }
508
- groupMeta.push(this.crudHelperService.createGroupMeta(group, alias));
577
+ groupMeta.push(this.crudHelperService.createGroupMeta(group, aggregateAliasSet, groupByFieldsOrdered, groupAliasMap, groupFormatMap));
509
578
  }
510
579
  return { groupMeta, groupRecords };
511
580
  }
512
581
 
513
- private wrapFindResponse(offset: number, limit: number, count: number, entities: T[]) {
514
- const currentPage = Math.floor(offset / limit) + 1;
515
- const totalPages = Math.ceil(count / limit);
582
+ private wrapFindResponse(offset: number | undefined, limit: number | undefined, count: number, entities: T[]) {
583
+ const safeLimit = limit ?? count ?? 0;
584
+ const safeOffset = offset ?? 0;
585
+ const currentPage = safeLimit ? Math.floor(safeOffset / safeLimit) + 1 : 1;
586
+ const totalPages = safeLimit ? Math.ceil(count / safeLimit) : 1;
516
587
 
517
- const nextPage = currentPage < totalPages ? currentPage + 1 : null;
518
- const prevPage = currentPage > 1 ? currentPage - 1 : null;
588
+ const nextPage = safeLimit && currentPage < totalPages ? currentPage + 1 : null;
589
+ const prevPage = safeLimit && currentPage > 1 ? currentPage - 1 : null;
519
590
 
520
591
  const r = {
521
592
  meta: {
@@ -524,15 +595,34 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
524
595
  nextPage: nextPage,
525
596
  prevPage: prevPage,
526
597
  totalPages: totalPages,
527
- perPage: +limit,
598
+ perPage: safeLimit ? +safeLimit : 0,
528
599
  },
529
600
  records: entities
530
601
  };
531
602
  return r;
532
603
  }
533
604
 
605
+ // entities is an array of T
606
+ // T can contain createdBy and updatedBy fields
607
+ // We need to populate the createdBy and updatedBy fields with the User entity
608
+ private async handlePopulateUserIdFields(userIdFields: UserIdFields[], entities: T[]) {
609
+ const userRepository = this.entityManager.getRepository(User);
610
+ for (const entity of entities) {
611
+ for (const userFieldPath of userIdFields) {
612
+ const userId = entity[userFieldPath as keyof T] as unknown as number;
613
+ if (userId) {
614
+ const user = await userRepository.findOne({
615
+ where: { id: userId },
616
+ });
617
+ // @ts-ignore
618
+ entity[userFieldPath] = user;
619
+ }
620
+ }
621
+ }
622
+ }
623
+
534
624
  private async handlePopulateMedia(populateMedia: string[], entities: T[]) {
535
- const model = await this.entityManager.getRepository(ModelMetadata).findOne({
625
+ const model = await this.getDefaultEntityManager().getRepository(ModelMetadata).findOne({
536
626
  where: {
537
627
  singularName: this.modelName,
538
628
  },
@@ -615,7 +705,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
615
705
  return mediaDetails as MediaWithFullUrl[];
616
706
  }
617
707
 
618
- async findOne(id: number, query: any, solidRequestContext: any = {}) {
708
+ async findOne(id: number, query: any={}, solidRequestContext: any = {}) {
619
709
  const { populate = [], fields = [], populateMedia = [] } = query;
620
710
 
621
711
  // const normalizedFields = this.crudHelperService.normalize(fields);
@@ -731,8 +821,30 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
731
821
  id: id,
732
822
  } as unknown as FindOptionsWhere<T>,
733
823
  });
824
+
734
825
  removedEntities.push(entity);
735
826
  }
827
+
828
+
829
+ // entity-level flag
830
+ const isDraftPublishEnabled = model?.draftPublishWorkflow === true;
831
+
832
+ let publishedEntitiesExists: T[] = [];
833
+
834
+ if (isDraftPublishEnabled) {
835
+ publishedEntitiesExists = removedEntities.filter(
836
+ (x) => !!x?.publishedAt
837
+ );
838
+ }
839
+
840
+ if (publishedEntitiesExists.length > 0) {
841
+ const publishedEntitiesExistsID = publishedEntitiesExists.map(x => x.id);
842
+
843
+ throw new BadRequestException(
844
+ `Cannot delete published record(s) for model ${this.modelName} with Ids ${publishedEntitiesExistsID.join(', ')}. Unpublish them first.`
845
+ );
846
+ }
847
+
736
848
  if (model.enableSoftDelete === true) {
737
849
  await this.repo.softRemove(removedEntities);
738
850
  return this.repo.save(removedEntities);
@@ -767,7 +879,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
767
879
  await this.repo.update(id, {
768
880
  deletedAt: null, deletedTracker: "not-deleted"
769
881
  } as unknown as QueryDeepPartialEntity<T>
770
- );
882
+ );
771
883
 
772
884
  return { message: SUCCESS_MESSAGES.RECORD_RECOVERED, data: softDeletedRows };
773
885
  } catch (error) {
@@ -849,7 +961,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
849
961
  throw new BadRequestException(`Field ${field.name} does not define a relationCoModelSingularName`);
850
962
  }
851
963
 
852
- const relationCoModel = await this.entityManager.getRepository(ModelMetadata).findOne({
964
+ const relationCoModel = await this.getDefaultEntityManager().getRepository(ModelMetadata).findOne({
853
965
  where: { singularName: field.relationCoModelSingularName },
854
966
  relations: ['fields', 'fields.mediaStorageProvider', 'fields.model'],
855
967
  });
@@ -868,5 +980,92 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
868
980
  }
869
981
  return model.userKeyField?.name || '';
870
982
  }
871
- }
872
983
 
984
+ /* Publish a record - sets publishedAt timestamp */
985
+ async publishRecord(id: number, solidRequestContext: any = {}): Promise<T> {
986
+
987
+ const model = await this.loadModel();
988
+
989
+ // Check if publish workflow is enabled for this model
990
+ if (!model.draftPublishWorkflow) {
991
+ throw new BadRequestException(
992
+ `Publish workflow is not enabled for ${this.modelName}`
993
+ );
994
+ }
995
+
996
+ // Check user permissions
997
+ if (solidRequestContext.activeUser) {
998
+ const hasPermission = this.crudHelperService.hasPublishPermissionOnModel(
999
+ solidRequestContext.activeUser,
1000
+ model.singularName
1001
+ );
1002
+ if (!hasPermission) {
1003
+ throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);
1004
+ }
1005
+ }
1006
+
1007
+ // Find the entity
1008
+ const entity = await this.repo.findOne({ where: { id } as any });
1009
+ if (!entity) {
1010
+ throw new NotFoundException(`${this.modelName} with id ${id} not found`);
1011
+ }
1012
+
1013
+ // Check if already published
1014
+ if (entity.publishedAt) {
1015
+ throw new BadRequestException(
1016
+ `${this.modelName} with id ${id} is already published`
1017
+ );
1018
+ }
1019
+
1020
+ // Update publish status
1021
+ const updatedEntity = await this.repo.save({ ...entity, publishedAt: new Date() });
1022
+
1023
+ return updatedEntity
1024
+ }
1025
+
1026
+ /* Unpublish a record - clears publishedAt timestamp */
1027
+ async unpublishRecord(id: number, solidRequestContext: any = {}): Promise<T> {
1028
+
1029
+ const model = await this.loadModel();
1030
+
1031
+ // Check if publish workflow is enabled for this model
1032
+ if (!model.draftPublishWorkflow) {
1033
+ throw new BadRequestException(
1034
+ `Publish workflow is not enabled for ${this.modelName}`
1035
+ );
1036
+ }
1037
+
1038
+ // Check user permissions
1039
+ if (solidRequestContext.activeUser) {
1040
+ const hasPermission = this.crudHelperService.hasUnpublishPermissionOnModel(
1041
+ solidRequestContext.activeUser,
1042
+ model.singularName
1043
+ );
1044
+ if (!hasPermission) {
1045
+ throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);
1046
+ }
1047
+ }
1048
+
1049
+ // Find the entity
1050
+ const entity = await this.repo.findOne({ where: { id } as any });
1051
+ if (!entity) {
1052
+ throw new NotFoundException(`${this.modelName} with id ${id} not found`);
1053
+ }
1054
+
1055
+ // Check if already unpublished
1056
+ if (!entity.publishedAt) {
1057
+ throw new BadRequestException(
1058
+ `${this.modelName} with id ${id} is already unpublished`
1059
+ );
1060
+ }
1061
+
1062
+ // Update unpublish status
1063
+ const updatedEntity = await this.repo.save({ ...entity, publishedAt: null });
1064
+
1065
+ return updatedEntity
1066
+ }
1067
+
1068
+ private getDefaultEntityManager(){
1069
+ return this.defaultEntityManager ?? this.entityManager;
1070
+ }
1071
+ }
@@ -0,0 +1,91 @@
1
+ import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
2
+ import { DataSource } from 'typeorm';
3
+ import { readdir, readFile } from 'fs/promises';
4
+ import * as path from 'path';
5
+ import { InjectDataSource } from '@nestjs/typeorm';
6
+
7
+ @Injectable()
8
+ export class DatabaseBootstrapService implements OnModuleInit {
9
+ private readonly logger = new Logger(DatabaseBootstrapService.name);
10
+
11
+ constructor(
12
+ @InjectDataSource()
13
+ private readonly dataSource: DataSource,
14
+ ) { }
15
+
16
+ async onModuleInit() {
17
+ if (!this.dataSource.isInitialized) {
18
+ this.logger.warn(`[${this.dataSource.name}] DataSource not initialized. Skipping SQL bootstrap.`);
19
+ return;
20
+ }
21
+
22
+ this.logger.debug(`[${this.dataSource.name}] Bootstrapping stored procedures...`);
23
+
24
+ await this.applyAllSqlFiles();
25
+
26
+ this.logger.debug(`[${this.dataSource.name}] SQL bootstrap completed`);
27
+ }
28
+
29
+ private resolveSqlDirectory(): string {
30
+ const datasourceName = this.dataSource.name || 'default';
31
+ const dbType = this.dataSource.options.type;
32
+
33
+ const sqlFilePath = path.resolve(__dirname, `../../../sql/${datasourceName}/${dbType}`);
34
+
35
+ return sqlFilePath
36
+ }
37
+
38
+ private async applyAllSqlFiles() {
39
+ const sqlDir = this.resolveSqlDirectory();
40
+
41
+ this.logger.debug(`[${this.dataSource.name}] SQL directory: ${sqlDir}`);
42
+
43
+ let files: string[];
44
+ try {
45
+ files = await readdir(sqlDir);
46
+ } catch {
47
+ this.logger.warn(
48
+ `[${this.dataSource.name}] No SQL directory found. Skipping.`,
49
+ );
50
+ return;
51
+ }
52
+
53
+ const sqlFiles = files
54
+ .filter(file => file.endsWith('.sql'))
55
+ .sort();
56
+
57
+ if (!sqlFiles.length) {
58
+ this.logger.warn(
59
+ `[${this.dataSource.name}] No SQL files found`,
60
+ );
61
+ return;
62
+ }
63
+
64
+ for (const file of sqlFiles) {
65
+ await this.applySqlFileSafely(
66
+ path.join(sqlDir, file),
67
+ file,
68
+ );
69
+ }
70
+ }
71
+
72
+ private async applySqlFileSafely(
73
+ filePath: string,
74
+ fileName: string,
75
+ ) {
76
+ this.logger.debug(`[${this.dataSource.name}] Applying ${fileName}`);
77
+
78
+ try {
79
+ const sql = await readFile(filePath, 'utf8');
80
+ await this.dataSource.query(sql);
81
+
82
+ this.logger.debug(`[${this.dataSource.name}] Applied ${fileName}`);
83
+ } catch (error) {
84
+ // DO NOT THROW — continue with next file
85
+ this.logger.error(
86
+ `[${this.dataSource.name}] Failed ${fileName}`,
87
+ error instanceof Error ? error.stack : String(error),
88
+ );
89
+ }
90
+ }
91
+ }
@@ -1,25 +1,23 @@
1
- import { Injectable, NotFoundException } from '@nestjs/common';
1
+ import { forwardRef, Inject, Injectable } from '@nestjs/common';
2
2
 
3
- import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
4
- import { EntityManager, Repository } from 'typeorm';
5
- import { PaginationQueryDto } from 'src/dtos/pagination-query.dto';
3
+ import { ConfigService } from '@nestjs/config';
4
+ import { DiscoveryService, ModuleRef } from '@nestjs/core';
5
+ import { InjectEntityManager } from '@nestjs/typeorm';
6
+ import { EmailTemplateRepository } from 'src/repository/email-template.repository';
7
+ import { EntityManager } from 'typeorm';
6
8
  import { EmailTemplate } from '../entities/email-template.entity';
7
- import { CreateEmailTemplateDto } from '../dtos/create-email-template.dto';
8
- import { UpdateEmailTemplateDto } from '../dtos/update-email-template.dto';
9
+ import { CrudHelperService } from './crud-helper.service';
9
10
  import { CRUDService } from './crud.service';
10
- import { ModelMetadataService } from './model-metadata.service';
11
- import { ModuleMetadataService } from './module-metadata.service';
12
- import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
13
- import { ConfigService } from '@nestjs/config';
14
11
  import { FileService } from './file.service';
12
+ import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
15
13
  import { MediaService } from './media.service';
16
- import { DiscoveryService, ModuleRef } from '@nestjs/core';
17
- import { CrudHelperService } from './crud-helper.service';
18
- import { EmailTemplateRepository } from 'src/repository/email-template.repository';
14
+ import { ModelMetadataService } from './model-metadata.service';
15
+ import { ModuleMetadataService } from './module-metadata.service';
19
16
 
20
17
  @Injectable()
21
18
  export class EmailTemplateService extends CRUDService<EmailTemplate>{
22
19
  constructor(
20
+ @Inject(forwardRef(() => ModelMetadataService))
23
21
  readonly modelMetadataService: ModelMetadataService,
24
22
  readonly moduleMetadataService: ModuleMetadataService,
25
23
  readonly mediaStorageProviderService: MediaStorageProviderMetadataService,