@solidxai/core 0.1.6-beta.9 → 0.1.7

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 (311) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CHANGELOG.md +71 -0
  3. package/dist/controllers/dashboard-layout.controller.d.ts +47 -0
  4. package/dist/controllers/dashboard-layout.controller.d.ts.map +1 -0
  5. package/dist/controllers/dashboard-layout.controller.js +204 -0
  6. package/dist/controllers/dashboard-layout.controller.js.map +1 -0
  7. package/dist/dtos/create-dashboard-layout.dto.d.ts +8 -0
  8. package/dist/dtos/create-dashboard-layout.dto.d.ts.map +1 -0
  9. package/dist/dtos/create-dashboard-layout.dto.js +53 -0
  10. package/dist/dtos/create-dashboard-layout.dto.js.map +1 -0
  11. package/dist/dtos/create-dashboard-variable.dto.d.ts +1 -0
  12. package/dist/dtos/create-dashboard-variable.dto.d.ts.map +1 -1
  13. package/dist/dtos/create-dashboard-variable.dto.js +7 -1
  14. package/dist/dtos/create-dashboard-variable.dto.js.map +1 -1
  15. package/dist/dtos/update-dashboard-layout.dto.d.ts +8 -0
  16. package/dist/dtos/update-dashboard-layout.dto.d.ts.map +1 -0
  17. package/dist/dtos/update-dashboard-layout.dto.js +53 -0
  18. package/dist/dtos/update-dashboard-layout.dto.js.map +1 -0
  19. package/dist/dtos/update-dashboard-variable.dto.d.ts +1 -0
  20. package/dist/dtos/update-dashboard-variable.dto.d.ts.map +1 -1
  21. package/dist/dtos/update-dashboard-variable.dto.js +7 -1
  22. package/dist/dtos/update-dashboard-variable.dto.js.map +1 -1
  23. package/dist/entities/action-metadata.entity.d.ts.map +1 -1
  24. package/dist/entities/action-metadata.entity.js.map +1 -1
  25. package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
  26. package/dist/entities/ai-interaction.entity.js +5 -4
  27. package/dist/entities/ai-interaction.entity.js.map +1 -1
  28. package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
  29. package/dist/entities/chatter-message-details.entity.js +4 -3
  30. package/dist/entities/chatter-message-details.entity.js.map +1 -1
  31. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  32. package/dist/entities/chatter-message.entity.js +4 -3
  33. package/dist/entities/chatter-message.entity.js.map +1 -1
  34. package/dist/entities/dashboard-layout.entity.d.ts +9 -0
  35. package/dist/entities/dashboard-layout.entity.d.ts.map +1 -0
  36. package/dist/entities/dashboard-layout.entity.js +41 -0
  37. package/dist/entities/dashboard-layout.entity.js.map +1 -0
  38. package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +1 -1
  39. package/dist/entities/dashboard-question-sql-dataset-config.entity.js +5 -4
  40. package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
  41. package/dist/entities/dashboard-question.entity.d.ts.map +1 -1
  42. package/dist/entities/dashboard-question.entity.js +5 -4
  43. package/dist/entities/dashboard-question.entity.js.map +1 -1
  44. package/dist/entities/dashboard-variable.entity.d.ts +1 -0
  45. package/dist/entities/dashboard-variable.entity.d.ts.map +1 -1
  46. package/dist/entities/dashboard-variable.entity.js +10 -4
  47. package/dist/entities/dashboard-variable.entity.js.map +1 -1
  48. package/dist/entities/dashboard.entity.d.ts +2 -0
  49. package/dist/entities/dashboard.entity.d.ts.map +1 -1
  50. package/dist/entities/dashboard.entity.js +9 -3
  51. package/dist/entities/dashboard.entity.js.map +1 -1
  52. package/dist/entities/email-attachment.entity.d.ts.map +1 -1
  53. package/dist/entities/email-attachment.entity.js +2 -1
  54. package/dist/entities/email-attachment.entity.js.map +1 -1
  55. package/dist/entities/email-template.entity.js +1 -1
  56. package/dist/entities/email-template.entity.js.map +1 -1
  57. package/dist/entities/export-transaction.entity.d.ts.map +1 -1
  58. package/dist/entities/export-transaction.entity.js +2 -1
  59. package/dist/entities/export-transaction.entity.js.map +1 -1
  60. package/dist/entities/field-metadata.entity.js +2 -2
  61. package/dist/entities/field-metadata.entity.js.map +1 -1
  62. package/dist/entities/import-transaction-error-log.entity.d.ts.map +1 -1
  63. package/dist/entities/import-transaction-error-log.entity.js +3 -2
  64. package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
  65. package/dist/entities/import-transaction.entity.d.ts.map +1 -1
  66. package/dist/entities/import-transaction.entity.js +2 -1
  67. package/dist/entities/import-transaction.entity.js.map +1 -1
  68. package/dist/entities/mq-message-queue.entity.d.ts.map +1 -1
  69. package/dist/entities/mq-message-queue.entity.js.map +1 -1
  70. package/dist/entities/mq-message.entity.d.ts.map +1 -1
  71. package/dist/entities/mq-message.entity.js +5 -3
  72. package/dist/entities/mq-message.entity.js.map +1 -1
  73. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  74. package/dist/entities/saved-filters.entity.js +3 -2
  75. package/dist/entities/saved-filters.entity.js.map +1 -1
  76. package/dist/entities/security-rule.entity.d.ts.map +1 -1
  77. package/dist/entities/security-rule.entity.js +2 -1
  78. package/dist/entities/security-rule.entity.js.map +1 -1
  79. package/dist/entities/sms-template.entity.js +1 -1
  80. package/dist/entities/sms-template.entity.js.map +1 -1
  81. package/dist/entities/user-view-metadata.entity.d.ts.map +1 -1
  82. package/dist/entities/user-view-metadata.entity.js +2 -1
  83. package/dist/entities/user-view-metadata.entity.js.map +1 -1
  84. package/dist/entities/user.entity.d.ts.map +1 -1
  85. package/dist/entities/user.entity.js +2 -0
  86. package/dist/entities/user.entity.js.map +1 -1
  87. package/dist/entities/view-metadata.entity.d.ts.map +1 -1
  88. package/dist/entities/view-metadata.entity.js.map +1 -1
  89. package/dist/helpers/bootstrap.helper.d.ts +14 -0
  90. package/dist/helpers/bootstrap.helper.d.ts.map +1 -0
  91. package/dist/helpers/bootstrap.helper.js +132 -0
  92. package/dist/helpers/bootstrap.helper.js.map +1 -0
  93. package/dist/helpers/cache.helper.d.ts +2 -0
  94. package/dist/helpers/cache.helper.d.ts.map +1 -0
  95. package/dist/helpers/cache.helper.js +8 -0
  96. package/dist/helpers/cache.helper.js.map +1 -0
  97. package/dist/helpers/cors.helper.d.ts.map +1 -1
  98. package/dist/helpers/cors.helper.js +13 -4
  99. package/dist/helpers/cors.helper.js.map +1 -1
  100. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
  101. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  102. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +8 -9
  103. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  104. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts +2 -2
  105. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts.map +1 -1
  106. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js +8 -5
  107. package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
  108. package/dist/helpers/solid-registry.d.ts +3 -0
  109. package/dist/helpers/solid-registry.d.ts.map +1 -1
  110. package/dist/helpers/solid-registry.js +7 -0
  111. package/dist/helpers/solid-registry.js.map +1 -1
  112. package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
  113. package/dist/helpers/typeorm-db-helper.js +21 -0
  114. package/dist/helpers/typeorm-db-helper.js.map +1 -1
  115. package/dist/index.d.ts +3 -0
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +3 -0
  118. package/dist/index.js.map +1 -1
  119. package/dist/interfaces.d.ts +2 -0
  120. package/dist/interfaces.d.ts.map +1 -1
  121. package/dist/interfaces.js.map +1 -1
  122. package/dist/jobs/chatter-queue-options.js +1 -1
  123. package/dist/jobs/chatter-queue-options.js.map +1 -1
  124. package/dist/jobs/chatter-queue-publisher.service.d.ts +9 -9
  125. package/dist/jobs/chatter-queue-publisher.service.d.ts.map +1 -1
  126. package/dist/jobs/chatter-queue-publisher.service.js +5 -5
  127. package/dist/jobs/chatter-queue-publisher.service.js.map +1 -1
  128. package/dist/jobs/chatter-queue-subscriber.service.d.ts +4 -4
  129. package/dist/jobs/chatter-queue-subscriber.service.d.ts.map +1 -1
  130. package/dist/jobs/chatter-queue-subscriber.service.js +11 -11
  131. package/dist/jobs/chatter-queue-subscriber.service.js.map +1 -1
  132. package/dist/jobs/computed-field-evaluation-queue-options.d.ts +2 -0
  133. package/dist/jobs/computed-field-evaluation-queue-options.d.ts.map +1 -1
  134. package/dist/jobs/computed-field-evaluation-queue-options.js +2 -0
  135. package/dist/jobs/computed-field-evaluation-queue-options.js.map +1 -1
  136. package/dist/jobs/database/chatter-queue-options-database.d.ts +8 -0
  137. package/dist/jobs/database/chatter-queue-options-database.d.ts.map +1 -0
  138. package/dist/jobs/database/chatter-queue-options-database.js +10 -0
  139. package/dist/jobs/database/chatter-queue-options-database.js.map +1 -0
  140. package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts +12 -0
  141. package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts.map +1 -0
  142. package/dist/jobs/database/chatter-queue-publisher-database.service.js +39 -0
  143. package/dist/jobs/database/chatter-queue-publisher-database.service.js.map +1 -0
  144. package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts +19 -0
  145. package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -0
  146. package/dist/jobs/database/chatter-queue-subscriber-database.service.js +62 -0
  147. package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -0
  148. package/dist/repository/dashboard-layout.repository.d.ts +12 -0
  149. package/dist/repository/dashboard-layout.repository.d.ts.map +1 -0
  150. package/dist/repository/dashboard-layout.repository.js +34 -0
  151. package/dist/repository/dashboard-layout.repository.js.map +1 -0
  152. package/dist/repository/model-metadata.repository.d.ts +6 -1
  153. package/dist/repository/model-metadata.repository.d.ts.map +1 -1
  154. package/dist/repository/model-metadata.repository.js +41 -2
  155. package/dist/repository/model-metadata.repository.js.map +1 -1
  156. package/dist/seeders/module-metadata-seeder.service.js +4 -4
  157. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  158. package/dist/seeders/seed-data/solid-core-metadata.json +372 -32
  159. package/dist/services/chatter-message.service.d.ts +4 -4
  160. package/dist/services/chatter-message.service.d.ts.map +1 -1
  161. package/dist/services/chatter-message.service.js +33 -9
  162. package/dist/services/chatter-message.service.js.map +1 -1
  163. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +7 -3
  164. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -1
  165. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +61 -22
  166. package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -1
  167. package/dist/services/crud.service.js +1 -1
  168. package/dist/services/crud.service.js.map +1 -1
  169. package/dist/services/dashboard-layout.service.d.ts +20 -0
  170. package/dist/services/dashboard-layout.service.d.ts.map +1 -0
  171. package/dist/services/dashboard-layout.service.js +120 -0
  172. package/dist/services/dashboard-layout.service.js.map +1 -0
  173. package/dist/services/dashboard.service.d.ts +2 -0
  174. package/dist/services/dashboard.service.d.ts.map +1 -1
  175. package/dist/services/dashboard.service.js +4 -0
  176. package/dist/services/dashboard.service.js.map +1 -1
  177. package/dist/services/model-metadata.service.d.ts +3 -1
  178. package/dist/services/model-metadata.service.d.ts.map +1 -1
  179. package/dist/services/model-metadata.service.js +21 -2
  180. package/dist/services/model-metadata.service.js.map +1 -1
  181. package/dist/services/permission-metadata.service.d.ts +5 -1
  182. package/dist/services/permission-metadata.service.d.ts.map +1 -1
  183. package/dist/services/permission-metadata.service.js +66 -20
  184. package/dist/services/permission-metadata.service.js.map +1 -1
  185. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  186. package/dist/services/queues/database-subscriber.service.js +6 -1
  187. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  188. package/dist/services/queues/publisher-factory.service.js +0 -1
  189. package/dist/services/queues/publisher-factory.service.js.map +1 -1
  190. package/dist/services/queues/rabbitmq-publisher.service.d.ts +1 -0
  191. package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
  192. package/dist/services/queues/rabbitmq-publisher.service.js +6 -1
  193. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
  194. package/dist/services/queues/rabbitmq-subscriber.service.d.ts +5 -1
  195. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  196. package/dist/services/queues/rabbitmq-subscriber.service.js +84 -9
  197. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  198. package/dist/services/request-context.service.d.ts +2 -1
  199. package/dist/services/request-context.service.d.ts.map +1 -1
  200. package/dist/services/request-context.service.js.map +1 -1
  201. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  202. package/dist/services/scheduled-jobs/scheduler.service.js +20 -2
  203. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  204. package/dist/services/solid-introspect.service.d.ts +6 -1
  205. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  206. package/dist/services/solid-introspect.service.js +27 -2
  207. package/dist/services/solid-introspect.service.js.map +1 -1
  208. package/dist/services/solid-ts-morph.service.d.ts +9 -0
  209. package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
  210. package/dist/services/solid-ts-morph.service.js +76 -0
  211. package/dist/services/solid-ts-morph.service.js.map +1 -1
  212. package/dist/solid-core.module.d.ts.map +1 -1
  213. package/dist/solid-core.module.js +16 -0
  214. package/dist/solid-core.module.js.map +1 -1
  215. package/dist/subscribers/audit.subscriber.d.ts +10 -7
  216. package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
  217. package/dist/subscribers/audit.subscriber.js +58 -85
  218. package/dist/subscribers/audit.subscriber.js.map +1 -1
  219. package/dist/subscribers/computed-entity-field.subscriber.js +3 -1
  220. package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
  221. package/dist/subscribers/created-by-updated-by.subscriber.d.ts +0 -1
  222. package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
  223. package/dist/subscribers/created-by-updated-by.subscriber.js +3 -13
  224. package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
  225. package/dist/winston.logger.d.ts.map +1 -1
  226. package/dist/winston.logger.js +2 -1
  227. package/dist/winston.logger.js.map +1 -1
  228. package/package.json +3 -1
  229. package/sql/default/mariadb/proc_CleanupModelMetadata.sql +153 -0
  230. package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +56 -0
  231. package/sql/default/mysql/proc_CleanupModelMetadata.sql +153 -0
  232. package/sql/default/mysql/proc_CleanupModuleMetadata.sql +56 -0
  233. package/src/controllers/dashboard-layout.controller.ts +106 -0
  234. package/src/dtos/create-dashboard-layout.dto.ts +31 -0
  235. package/src/dtos/create-dashboard-variable.dto.ts +4 -0
  236. package/src/dtos/update-dashboard-layout.dto.ts +30 -0
  237. package/src/dtos/update-dashboard-variable.dto.ts +5 -1
  238. package/src/entities/action-metadata.entity.ts +3 -2
  239. package/src/entities/ai-interaction.entity.ts +5 -4
  240. package/src/entities/chatter-message-details.entity.ts +4 -3
  241. package/src/entities/chatter-message.entity.ts +4 -3
  242. package/src/entities/dashboard-layout.entity.ts +18 -0
  243. package/src/entities/dashboard-question-sql-dataset-config.entity.ts +5 -4
  244. package/src/entities/dashboard-question.entity.ts +5 -4
  245. package/src/entities/dashboard-variable.entity.ts +9 -4
  246. package/src/entities/dashboard.entity.ts +7 -2
  247. package/src/entities/email-attachment.entity.ts +2 -1
  248. package/src/entities/email-template.entity.ts +1 -1
  249. package/src/entities/export-transaction.entity.ts +2 -1
  250. package/src/entities/field-metadata.entity.ts +2 -2
  251. package/src/entities/import-transaction-error-log.entity.ts +3 -2
  252. package/src/entities/import-transaction.entity.ts +2 -1
  253. package/src/entities/mq-message-queue.entity.ts +8 -8
  254. package/src/entities/mq-message.entity.ts +5 -3
  255. package/src/entities/saved-filters.entity.ts +3 -2
  256. package/src/entities/security-rule.entity.ts +2 -1
  257. package/src/entities/sms-template.entity.ts +1 -1
  258. package/src/entities/user-view-metadata.entity.ts +2 -1
  259. package/src/entities/user.entity.ts +37 -2
  260. package/src/entities/view-metadata.entity.ts +3 -0
  261. package/src/helpers/bootstrap.helper.ts +222 -0
  262. package/src/helpers/cache.helper.ts +5 -0
  263. package/src/helpers/cors.helper.ts +26 -6
  264. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +9 -9
  265. package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +9 -6
  266. package/src/helpers/solid-registry.ts +10 -5
  267. package/src/helpers/typeorm-db-helper.ts +26 -0
  268. package/src/index.ts +3 -0
  269. package/src/interfaces.ts +3 -0
  270. package/src/jobs/chatter-queue-options.ts +1 -1
  271. package/src/jobs/chatter-queue-publisher.service.ts +11 -11
  272. package/src/jobs/chatter-queue-subscriber.service.ts +13 -8
  273. package/src/jobs/computed-field-evaluation-queue-options.ts +2 -0
  274. package/src/jobs/database/chatter-queue-options-database.ts +9 -0
  275. package/src/jobs/database/chatter-queue-publisher-database.service.ts +24 -0
  276. package/src/jobs/database/chatter-queue-subscriber-database.service.ts +53 -0
  277. package/src/repository/dashboard-layout.repository.ts +17 -0
  278. package/src/repository/model-metadata.repository.ts +45 -2
  279. package/src/seeders/module-metadata-seeder.service.ts +5 -5
  280. package/src/seeders/seed-data/solid-core-metadata.json +373 -33
  281. package/src/services/1.js +6 -0
  282. package/src/services/chatter-message.service.ts +41 -9
  283. package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +79 -40
  284. package/src/services/crud.service.ts +1 -1
  285. package/src/services/dashboard-layout.service.ts +111 -0
  286. package/src/services/dashboard.service.ts +7 -0
  287. package/src/services/model-metadata.service.ts +22 -43
  288. package/src/services/permission-metadata.service.ts +73 -20
  289. package/src/services/queues/database-subscriber.service.ts +7 -1
  290. package/src/services/queues/publisher-factory.service.ts +1 -1
  291. package/src/services/queues/rabbitmq-publisher.service.ts +8 -2
  292. package/src/services/queues/rabbitmq-subscriber.service.ts +127 -10
  293. package/src/services/request-context.service.ts +2 -1
  294. package/src/services/scheduled-jobs/scheduler.service.ts +22 -4
  295. package/src/services/solid-introspect.service.ts +28 -0
  296. package/src/services/solid-ts-morph.service.ts +98 -0
  297. package/src/solid-core.module.ts +21 -2
  298. package/src/subscribers/audit.subscriber.ts +63 -271
  299. package/src/subscribers/computed-entity-field.subscriber.ts +3 -3
  300. package/src/subscribers/created-by-updated-by.subscriber.ts +22 -16
  301. package/src/winston.logger.ts +2 -1
  302. package/dist-tests/api/authenticate.spec.js +0 -119
  303. package/dist-tests/api/authenticate.spec.js.map +0 -1
  304. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
  305. package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
  306. package/dist-tests/api/ping.spec.js +0 -21
  307. package/dist-tests/api/ping.spec.js.map +0 -1
  308. package/dist-tests/helpers/auth.js +0 -41
  309. package/dist-tests/helpers/auth.js.map +0 -1
  310. package/dist-tests/helpers/env.js +0 -11
  311. package/dist-tests/helpers/env.js.map +0 -1
@@ -9,6 +9,29 @@ const LONG_TEXT_MAP: Record<DatasourceType, ColumnOptions> = {
9
9
  [DatasourceType.oracle]: { type: "clob" },
10
10
  };
11
11
 
12
+ // For simple-json columns that may contain large payloads: on MySQL/MariaDB the default
13
+ // TEXT backing store is limited to 64 KB, so we override the type to longtext and supply
14
+ // an explicit JSON transformer so TypeORM still serialises/deserialises correctly.
15
+ const SIMPLE_JSON_LARGE_TEXT_MAP: Record<DatasourceType, ColumnOptions> = {
16
+ [DatasourceType.postgres]: {},
17
+ [DatasourceType.mssql]: {},
18
+ [DatasourceType.mysql]: {
19
+ type: "longtext",
20
+ transformer: {
21
+ to: (value: any) => (value !== undefined && value !== null ? JSON.stringify(value) : value),
22
+ from: (value: any) => (value !== null && value !== undefined ? JSON.parse(value) : value),
23
+ },
24
+ },
25
+ [DatasourceType.mariadb]: {
26
+ type: "longtext",
27
+ transformer: {
28
+ to: (value: any) => (value !== undefined && value !== null ? JSON.stringify(value) : value),
29
+ from: (value: any) => (value !== null && value !== undefined ? JSON.parse(value) : value),
30
+ },
31
+ },
32
+ [DatasourceType.oracle]: { type: "clob" },
33
+ };
34
+
12
35
  const solidCoreDbType: DatasourceType =
13
36
  Object.values(DatasourceType).includes(process.env.SOLID_CORE_DB_TYPE as DatasourceType)
14
37
  ? (process.env.SOLID_CORE_DB_TYPE as DatasourceType)
@@ -20,6 +43,9 @@ export function getColumnType(solidType: string): ColumnOptions {
20
43
  case "richText":
21
44
  return LONG_TEXT_MAP[solidCoreDbType];
22
45
 
46
+ case "simpleJsonLargeText":
47
+ return SIMPLE_JSON_LARGE_TEXT_MAP[solidCoreDbType];
48
+
23
49
  default:
24
50
  return {};
25
51
  }
package/src/index.ts CHANGED
@@ -137,6 +137,7 @@ export * from './entities/user-activity-history.entity'
137
137
  export * from './entities/dashboard.entity'
138
138
  export * from './entities/dashboard-variable.entity'
139
139
  export * from './entities/dashboard-question.entity'
140
+ export * from './entities/dashboard-layout.entity'
140
141
  export * from './entities/dashboard-question-sql-dataset-config.entity'
141
142
  export * from './entities/ai-interaction.entity'
142
143
  export * from './entities/model-sequence.entity'
@@ -175,7 +176,9 @@ export * from './helpers/field-crud-managers/SelectionDynamicFieldCrudManager' /
175
176
  export * from './helpers/field-crud-managers/SelectionStaticFieldCrudManager' //rename
176
177
  export * from './helpers/field-crud-managers/ShortTextFieldCrudManager' //rename
177
178
  export * from './helpers/field-crud-managers/UUIDFieldCrudManager' //rename
179
+ export * from './helpers/bootstrap.helper'
178
180
  export * from './helpers/environment.helper'
181
+ export * from './helpers/cache.helper'
179
182
  export * from './helpers/cors.helper'
180
183
  export * from './helpers/security.helper'
181
184
  export * from './helpers/model-metadata-helper.service'
package/src/interfaces.ts CHANGED
@@ -111,6 +111,8 @@ export interface ISelectionProviderContext {
111
111
  limit: number;
112
112
  offset: number;
113
113
  formValues: Record<string, any>;
114
+ //Attribute to control the validation on creating the record
115
+ validateOnSave?: boolean;
114
116
  // query: string;
115
117
  }
116
118
 
@@ -269,6 +271,7 @@ export interface QueuesModuleOptions {
269
271
  type: BrokerType;
270
272
  queueName: string;
271
273
  prefetch?: number;
274
+ persistToDatabase?: boolean;
272
275
  }
273
276
 
274
277
  export type MediaWithFullUrl = Media & {
@@ -1,6 +1,6 @@
1
1
  import { BrokerType } from "../interfaces";
2
2
 
3
- const QUEUE_NAME = 'solid_chatter_queue';
3
+ const QUEUE_NAME = 'solid_chatter_queue_rabbitmq';
4
4
 
5
5
  export default {
6
6
  name: QUEUE_NAME,
@@ -7,21 +7,21 @@ import { MqMessageService } from '../services/mq-message.service';
7
7
  import { QueuesModuleOptions } from "../interfaces";
8
8
 
9
9
 
10
- export type ChatterEventType = 'insert' | 'update' | 'delete';
10
+ export type AuditEventType = 'insert' | 'update' | 'delete';
11
11
 
12
- export interface ChatterMessagePayload {
13
- eventType: ChatterEventType;
14
- model: string; // entity name
15
- entityId: string; // id string
16
- occurredAt: string; // ISO
17
- before?: any;
18
- after?: any;
19
- diff?: string[]; // changed column names for updates
20
- userId?: string | null;
12
+ export interface AuditQueuePayload {
13
+ eventType: AuditEventType;
14
+ modelName: string; // TypeORM entity class name (e.g. 'Order')
15
+ entityId: string | number | null;
16
+ occurredAt: string; // ISO timestamp, captured at event time
17
+ after?: any; // entity state after operation (insert/update)
18
+ before?: any; // entity state before operation (update/delete)
19
+ updatedColumnNames?: string[]; // propertyNames of changed columns (update only)
20
+ userId?: number | null; // active user captured at event time
21
21
  }
22
22
 
23
23
  @Injectable()
24
- export class ChatterQueuePublisher extends RabbitMqPublisher<any> {
24
+ export class ChatterQueuePublisherRabbitmq extends RabbitMqPublisher<AuditQueuePayload> {
25
25
  constructor(
26
26
  protected readonly mqMessageService: MqMessageService,
27
27
  protected readonly mqMessageQueueService: MqMessageQueueService,
@@ -6,12 +6,12 @@ import { MqMessageService } from '../services/mq-message.service';
6
6
  import { MqMessageQueueService } from '../services/mq-message-queue.service';
7
7
  import { QueuesModuleOptions } from "../interfaces";
8
8
  import chatterQueueOptions from './chatter-queue-options';
9
- import { ChatterMessagePayload } from './chatter-queue-publisher.service';
9
+ import { AuditQueuePayload } from './chatter-queue-publisher.service';
10
10
  import { ChatterMessageService } from 'src/services/chatter-message.service';
11
11
 
12
12
  @Injectable()
13
- export class ChatterQueueSubscriber extends RabbitMqSubscriber<any> {
14
- private readonly chatterQueueLogger = new Logger(ChatterQueueSubscriber.name);
13
+ export class ChatterQueueSubscriberRabbitmq extends RabbitMqSubscriber<AuditQueuePayload> {
14
+ private readonly chatterLogger = new Logger(ChatterQueueSubscriberRabbitmq.name);
15
15
 
16
16
  constructor(
17
17
  readonly mqMessageService: MqMessageService,
@@ -27,19 +27,24 @@ export class ChatterQueueSubscriber extends RabbitMqSubscriber<any> {
27
27
  }
28
28
  }
29
29
 
30
- async subscribe(message: QueueMessage<ChatterMessagePayload>) {
30
+ async subscribe(message: QueueMessage<AuditQueuePayload>) {
31
31
  const p = message.payload;
32
- this.chatterQueueLogger.debug(`Audit event ${p.eventType} ${p.model}#${p.entityId}`);
32
+ this.chatterLogger.debug(`Audit event ${p.eventType} ${p.modelName}#${p.entityId}`);
33
33
 
34
34
  switch (p.eventType) {
35
35
  case 'insert':
36
- await this.chatterMessageService.postAuditMessageOnInsert(p.after, { name: p.model } as any);
36
+ await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
37
37
  break;
38
38
  case 'update':
39
- await this.chatterMessageService.postAuditMessageOnUpdate(p.after, { name: p.model } as any, p.before, (p.diff || []).map(n => ({ propertyName: n })));
39
+ await this.chatterMessageService.postAuditMessageOnUpdate(
40
+ p.after,
41
+ p.modelName,
42
+ p.before,
43
+ (p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
44
+ );
40
45
  break;
41
46
  case 'delete':
42
- await this.chatterMessageService.postAuditMessageOnDelete(p.before, { name: p.model } as any, p.before);
47
+ await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
43
48
  break;
44
49
  }
45
50
  }
@@ -6,4 +6,6 @@ export default {
6
6
  name: QUEUE_NAME,
7
7
  type: BrokerType.RabbitMQ,
8
8
  queueName: QUEUE_NAME,
9
+ prefetch: 10,
10
+ persistToDatabase: false,
9
11
  };
@@ -0,0 +1,9 @@
1
+ import { BrokerType } from "../../interfaces";
2
+
3
+ const QUEUE_NAME = 'solid_chatter_queue_database';
4
+
5
+ export default {
6
+ name: QUEUE_NAME,
7
+ type: BrokerType.Database,
8
+ queueName: QUEUE_NAME,
9
+ };
@@ -0,0 +1,24 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ import { DatabasePublisher } from 'src/services/queues/database-publisher.service';
4
+ import { MqMessageQueueService } from '../../services/mq-message-queue.service';
5
+ import { MqMessageService } from '../../services/mq-message.service';
6
+ import { QueuesModuleOptions } from "../../interfaces";
7
+ import { AuditQueuePayload } from '../chatter-queue-publisher.service';
8
+ import chatterQueueOptionsDatabase from './chatter-queue-options-database';
9
+
10
+ @Injectable()
11
+ export class ChatterQueuePublisherDatabase extends DatabasePublisher<AuditQueuePayload> {
12
+ constructor(
13
+ protected readonly mqMessageService: MqMessageService,
14
+ protected readonly mqMessageQueueService: MqMessageQueueService,
15
+ ) {
16
+ super(mqMessageService, mqMessageQueueService);
17
+ }
18
+
19
+ options(): QueuesModuleOptions {
20
+ return {
21
+ ...chatterQueueOptionsDatabase
22
+ };
23
+ }
24
+ }
@@ -0,0 +1,53 @@
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+
3
+ import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
4
+ import { QueueMessage } from 'src/interfaces/mq';
5
+ import { MqMessageService } from '../../services/mq-message.service';
6
+ import { MqMessageQueueService } from '../../services/mq-message-queue.service';
7
+ import { QueuesModuleOptions } from "../../interfaces";
8
+ import { PollerService } from 'src/services/poller.service';
9
+ import { AuditQueuePayload } from '../chatter-queue-publisher.service';
10
+ import { ChatterMessageService } from 'src/services/chatter-message.service';
11
+ import chatterQueueOptionsDatabase from './chatter-queue-options-database';
12
+
13
+ @Injectable()
14
+ export class ChatterQueueSubscriberDatabase extends DatabaseSubscriber<AuditQueuePayload> {
15
+ private readonly chatterLogger = new Logger(ChatterQueueSubscriberDatabase.name);
16
+
17
+ constructor(
18
+ readonly mqMessageService: MqMessageService,
19
+ readonly mqMessageQueueService: MqMessageQueueService,
20
+ readonly poller: PollerService,
21
+ private readonly chatterMessageService: ChatterMessageService,
22
+ ) {
23
+ super(mqMessageService, mqMessageQueueService, poller);
24
+ }
25
+
26
+ options(): QueuesModuleOptions {
27
+ return {
28
+ ...chatterQueueOptionsDatabase
29
+ };
30
+ }
31
+
32
+ async subscribe(message: QueueMessage<AuditQueuePayload>) {
33
+ const p = message.payload;
34
+ this.chatterLogger.debug(`Audit event ${p.eventType} ${p.modelName}#${p.entityId}`);
35
+
36
+ switch (p.eventType) {
37
+ case 'insert':
38
+ await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
39
+ break;
40
+ case 'update':
41
+ await this.chatterMessageService.postAuditMessageOnUpdate(
42
+ p.after,
43
+ p.modelName,
44
+ p.before,
45
+ (p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
46
+ );
47
+ break;
48
+ case 'delete':
49
+ await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
50
+ break;
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,17 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { RequestContextService } from 'src/services/request-context.service';
3
+ import { DataSource } from 'typeorm';
4
+ import { SecurityRuleRepository } from './security-rule.repository';
5
+ import { SolidBaseRepository } from './solid-base.repository';
6
+ import { DashboardLayout } from 'src/entities/dashboard-layout.entity';
7
+
8
+ @Injectable()
9
+ export class DashboardLayoutRepository extends SolidBaseRepository<DashboardLayout> {
10
+ constructor(
11
+ readonly dataSource: DataSource,
12
+ readonly requestContextService: RequestContextService,
13
+ readonly securityRuleRepository: SecurityRuleRepository,
14
+ ) {
15
+ super(DashboardLayout, dataSource, requestContextService, securityRuleRepository);
16
+ }
17
+ }
@@ -1,5 +1,9 @@
1
- import { Injectable } from '@nestjs/common';
1
+ import { CACHE_MANAGER } from '@nestjs/cache-manager';
2
+ import { Inject, Injectable } from '@nestjs/common';
3
+ import { Cache } from 'cache-manager';
4
+ import { createHash } from 'crypto';
2
5
  import { ModelMetadata } from 'src';
6
+ import { shouldUseCache } from 'src/helpers/cache.helper';
3
7
  import { DataSource } from 'typeorm';
4
8
  import { SolidBaseRepository } from './solid-base.repository';
5
9
 
@@ -7,9 +11,48 @@ import { SolidBaseRepository } from './solid-base.repository';
7
11
  export class ModelMetadataRepository extends SolidBaseRepository<ModelMetadata> {
8
12
  constructor(
9
13
  readonly dataSource: DataSource,
14
+ @Inject(CACHE_MANAGER) private readonly cacheManager: Cache,
10
15
  // readonly requestContextService: RequestContextService,
11
16
  // readonly securityRuleRepository: SecurityRuleRepository,
12
17
  ) {
13
18
  super(ModelMetadata, dataSource, null, null);
14
19
  }
15
- }
20
+
21
+ async find(options?: any): Promise<ModelMetadata[]> {
22
+ if (!shouldUseCache()) {
23
+ return super.find(options);
24
+ }
25
+
26
+ const cacheKey = this.buildCacheKey('find', options);
27
+ const cached = await this.cacheManager.get<ModelMetadata[]>(cacheKey);
28
+ if (cached !== undefined) {
29
+ return cached;
30
+ }
31
+
32
+ const result = await super.find(options);
33
+ await this.cacheManager.set(cacheKey, result);
34
+ return result;
35
+ }
36
+
37
+ async findOne(options: any): Promise<ModelMetadata | null> {
38
+ if (!shouldUseCache()) {
39
+ return super.findOne(options);
40
+ }
41
+
42
+ const cacheKey = this.buildCacheKey('findOne', options);
43
+ const cached = await this.cacheManager.get<ModelMetadata | null>(cacheKey);
44
+ if (cached !== undefined) {
45
+ return cached;
46
+ }
47
+
48
+ const result = await super.findOne(options);
49
+ await this.cacheManager.set(cacheKey, result);
50
+ return result;
51
+ }
52
+
53
+ private buildCacheKey(method: 'find' | 'findOne', options: unknown): string {
54
+ const serialized = JSON.stringify(options ?? {});
55
+ const hash = createHash('sha256').update(serialized).digest('hex');
56
+ return `modelMetadataRepo:${method}:${hash}`;
57
+ }
58
+ }
@@ -140,17 +140,17 @@ export class ModuleMetadataSeederService {
140
140
  console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);
141
141
  this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);
142
142
 
143
+ currentStep = 'seedMediaStorageProviders';
144
+ this.logger.log(`Seeding Media Storage Providers`);
145
+ const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
146
+ console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
147
+
143
148
  // Process module metadata first.
144
149
  currentStep = 'seedModuleModelFields';
145
150
  this.logger.log(`Seeding Module / Model / Fields`);
146
151
  const moduleModelFieldCounts = await this.seedModuleModelFields(moduleMetadata);
147
152
  console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);
148
153
 
149
- currentStep = 'seedMediaStorageProviders';
150
- this.logger.log(`Seeding Media Storage Providers`);
151
- const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
152
- console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
153
-
154
154
  currentStep = 'seedRoles';
155
155
  this.logger.log(`Seeding Roles`);
156
156
  const roleCounts = await this.seedRoles(overallMetadata);