rez_core 6.6.6 → 7.0.1

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 (1067) hide show
  1. package/.claude/settings.local.json +26 -0
  2. package/.idea/250218_nodejs_core.iml +9 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/copilot.data.migration.agent.xml +6 -0
  6. package/.idea/copilot.data.migration.ask.xml +6 -0
  7. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  8. package/.idea/copilot.data.migration.edit.xml +6 -0
  9. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.prettierrc +3 -3
  15. package/README.md +99 -99
  16. package/dist/app.controller.js.map +1 -1
  17. package/dist/app.module.js +4 -10
  18. package/dist/app.module.js.map +1 -1
  19. package/dist/constant/attribute.constant.d.ts +8 -0
  20. package/dist/constant/attribute.constant.js +14 -0
  21. package/dist/constant/attribute.constant.js.map +1 -0
  22. package/dist/constant/db-data-type.constant.d.ts +33 -0
  23. package/dist/constant/db-data-type.constant.js +119 -0
  24. package/dist/constant/db-data-type.constant.js.map +1 -0
  25. package/dist/constant/entity.constant.d.ts +4 -0
  26. package/dist/constant/entity.constant.js +9 -0
  27. package/dist/constant/entity.constant.js.map +1 -0
  28. package/dist/constant/status.constant.d.ts +4 -0
  29. package/dist/constant/status.constant.js +9 -0
  30. package/dist/constant/status.constant.js.map +1 -0
  31. package/dist/core.module.js +55 -42
  32. package/dist/core.module.js.map +1 -1
  33. package/dist/module/auth/auth.module.d.ts +6 -1
  34. package/dist/module/auth/auth.module.js +29 -7
  35. package/dist/module/auth/auth.module.js.map +1 -1
  36. package/dist/module/{user/entity/user.entity.d.ts → auth/dto/user.dto.d.ts} +13 -5
  37. package/dist/module/auth/dto/user.dto.js +7 -0
  38. package/dist/module/auth/dto/user.dto.js.map +1 -0
  39. package/dist/module/auth/services/auth.service.d.ts +1 -1
  40. package/dist/module/auth/strategies/jwt.strategy.d.ts +6 -2
  41. package/dist/module/auth/strategies/jwt.strategy.js +18 -4
  42. package/dist/module/auth/strategies/jwt.strategy.js.map +1 -1
  43. package/dist/module/dashboard/controller/dashboard.controller.d.ts +7 -7
  44. package/dist/module/dashboard/dashboard.module.js +0 -2
  45. package/dist/module/dashboard/dashboard.module.js.map +1 -1
  46. package/dist/module/dashboard/entity/dashboard_page_data.entity.d.ts +0 -1
  47. package/dist/module/dashboard/entity/dashboard_page_data.entity.js +1 -6
  48. package/dist/module/dashboard/entity/dashboard_page_data.entity.js.map +1 -1
  49. package/dist/module/dashboard/entity/widget_master.entity.d.ts +0 -1
  50. package/dist/module/dashboard/entity/widget_master.entity.js +1 -6
  51. package/dist/module/dashboard/entity/widget_master.entity.js.map +1 -1
  52. package/dist/module/dashboard/service/dashboard.service.d.ts +8 -10
  53. package/dist/module/dashboard/service/dashboard.service.js +3 -18
  54. package/dist/module/dashboard/service/dashboard.service.js.map +1 -1
  55. package/dist/module/eav/controller/eav.controller.d.ts +21 -0
  56. package/dist/module/eav/controller/eav.controller.js +127 -0
  57. package/dist/module/eav/controller/eav.controller.js.map +1 -0
  58. package/dist/module/eav/dto/eav-operation.dto.d.ts +20 -0
  59. package/dist/module/eav/dto/eav-operation.dto.js +75 -0
  60. package/dist/module/eav/dto/eav-operation.dto.js.map +1 -0
  61. package/dist/module/eav/eav.module.d.ts +2 -0
  62. package/dist/module/eav/eav.module.js +84 -0
  63. package/dist/module/eav/eav.module.js.map +1 -0
  64. package/dist/module/eav/entity/eav-boolean.entity.d.ts +9 -0
  65. package/dist/module/eav/entity/eav-boolean.entity.js +48 -0
  66. package/dist/module/eav/entity/eav-boolean.entity.js.map +1 -0
  67. package/dist/module/eav/entity/eav-date.entity.d.ts +9 -0
  68. package/dist/module/eav/entity/eav-date.entity.js +48 -0
  69. package/dist/module/eav/entity/eav-date.entity.js.map +1 -0
  70. package/dist/module/eav/entity/eav-decimal.entity.d.ts +9 -0
  71. package/dist/module/eav/entity/eav-decimal.entity.js +48 -0
  72. package/dist/module/eav/entity/eav-decimal.entity.js.map +1 -0
  73. package/dist/module/eav/entity/eav-int.entity.d.ts +9 -0
  74. package/dist/module/eav/entity/eav-int.entity.js +48 -0
  75. package/dist/module/eav/entity/eav-int.entity.js.map +1 -0
  76. package/dist/module/eav/entity/eav-json.entity.d.ts +9 -0
  77. package/dist/module/eav/entity/eav-json.entity.js +48 -0
  78. package/dist/module/eav/entity/eav-json.entity.js.map +1 -0
  79. package/dist/module/eav/entity/eav-text.entity.d.ts +9 -0
  80. package/dist/module/eav/entity/eav-text.entity.js +48 -0
  81. package/dist/module/eav/entity/eav-text.entity.js.map +1 -0
  82. package/dist/module/eav/entity/eav-time.entity.d.ts +9 -0
  83. package/dist/module/eav/entity/eav-time.entity.js +48 -0
  84. package/dist/module/eav/entity/eav-time.entity.js.map +1 -0
  85. package/dist/module/eav/entity/eav-timestamp.entity.d.ts +9 -0
  86. package/dist/module/eav/entity/eav-timestamp.entity.js +48 -0
  87. package/dist/module/eav/entity/eav-timestamp.entity.js.map +1 -0
  88. package/dist/module/eav/entity/eav-varchar.entity.d.ts +9 -0
  89. package/dist/module/eav/entity/eav-varchar.entity.js +48 -0
  90. package/dist/module/eav/entity/eav-varchar.entity.js.map +1 -0
  91. package/dist/module/eav/interface/eav-strategy.interface.d.ts +8 -0
  92. package/dist/module/eav/interface/eav-strategy.interface.js +3 -0
  93. package/dist/module/eav/interface/eav-strategy.interface.js.map +1 -0
  94. package/dist/module/eav/repository/eav-boolean.repository.d.ts +13 -0
  95. package/dist/module/eav/repository/eav-boolean.repository.js +57 -0
  96. package/dist/module/eav/repository/eav-boolean.repository.js.map +1 -0
  97. package/dist/module/eav/repository/eav-date.repository.d.ts +13 -0
  98. package/dist/module/eav/repository/eav-date.repository.js +57 -0
  99. package/dist/module/eav/repository/eav-date.repository.js.map +1 -0
  100. package/dist/module/eav/repository/eav-decimal.repository.d.ts +13 -0
  101. package/dist/module/eav/repository/eav-decimal.repository.js +57 -0
  102. package/dist/module/eav/repository/eav-decimal.repository.js.map +1 -0
  103. package/dist/module/eav/repository/eav-int.repository.d.ts +13 -0
  104. package/dist/module/eav/repository/eav-int.repository.js +57 -0
  105. package/dist/module/eav/repository/eav-int.repository.js.map +1 -0
  106. package/dist/module/eav/repository/eav-json.repository.d.ts +13 -0
  107. package/dist/module/eav/repository/eav-json.repository.js +57 -0
  108. package/dist/module/eav/repository/eav-json.repository.js.map +1 -0
  109. package/dist/module/eav/repository/eav-text.repository.d.ts +13 -0
  110. package/dist/module/eav/repository/eav-text.repository.js +57 -0
  111. package/dist/module/eav/repository/eav-text.repository.js.map +1 -0
  112. package/dist/module/eav/repository/eav-time.repository.d.ts +13 -0
  113. package/dist/module/eav/repository/eav-time.repository.js +57 -0
  114. package/dist/module/eav/repository/eav-time.repository.js.map +1 -0
  115. package/dist/module/eav/repository/eav-timestamp.repository.d.ts +13 -0
  116. package/dist/module/eav/repository/eav-timestamp.repository.js +57 -0
  117. package/dist/module/eav/repository/eav-timestamp.repository.js.map +1 -0
  118. package/dist/module/eav/repository/eav-varchar.repository.d.ts +13 -0
  119. package/dist/module/eav/repository/eav-varchar.repository.js +57 -0
  120. package/dist/module/eav/repository/eav-varchar.repository.js.map +1 -0
  121. package/dist/module/eav/service/eav-boolean.service.d.ts +12 -0
  122. package/dist/module/eav/service/eav-boolean.service.js +59 -0
  123. package/dist/module/eav/service/eav-boolean.service.js.map +1 -0
  124. package/dist/module/eav/service/eav-date.service.d.ts +12 -0
  125. package/dist/module/eav/service/eav-date.service.js +59 -0
  126. package/dist/module/eav/service/eav-date.service.js.map +1 -0
  127. package/dist/module/eav/service/eav-decimal.service.d.ts +12 -0
  128. package/dist/module/eav/service/eav-decimal.service.js +59 -0
  129. package/dist/module/eav/service/eav-decimal.service.js.map +1 -0
  130. package/dist/module/eav/service/eav-factory.service.d.ts +26 -0
  131. package/dist/module/eav/service/eav-factory.service.js +81 -0
  132. package/dist/module/eav/service/eav-factory.service.js.map +1 -0
  133. package/dist/module/eav/service/eav-int.service.d.ts +12 -0
  134. package/dist/module/eav/service/eav-int.service.js +59 -0
  135. package/dist/module/eav/service/eav-int.service.js.map +1 -0
  136. package/dist/module/eav/service/eav-json.service.d.ts +12 -0
  137. package/dist/module/eav/service/eav-json.service.js +59 -0
  138. package/dist/module/eav/service/eav-json.service.js.map +1 -0
  139. package/dist/module/eav/service/eav-text.service.d.ts +12 -0
  140. package/dist/module/eav/service/eav-text.service.js +59 -0
  141. package/dist/module/eav/service/eav-text.service.js.map +1 -0
  142. package/dist/module/eav/service/eav-time.service.d.ts +12 -0
  143. package/dist/module/eav/service/eav-time.service.js +59 -0
  144. package/dist/module/eav/service/eav-time.service.js.map +1 -0
  145. package/dist/module/eav/service/eav-timestamp.service.d.ts +12 -0
  146. package/dist/module/eav/service/eav-timestamp.service.js +59 -0
  147. package/dist/module/eav/service/eav-timestamp.service.js.map +1 -0
  148. package/dist/module/eav/service/eav-varchar.service.d.ts +12 -0
  149. package/dist/module/eav/service/eav-varchar.service.js +59 -0
  150. package/dist/module/eav/service/eav-varchar.service.js.map +1 -0
  151. package/dist/module/eav/service/eav.service.d.ts +14 -0
  152. package/dist/module/eav/service/eav.service.js +65 -0
  153. package/dist/module/eav/service/eav.service.js.map +1 -0
  154. package/dist/module/entity_json/controller/entity_json.controller.d.ts +2 -5
  155. package/dist/module/entity_json/controller/entity_json.controller.js +7 -21
  156. package/dist/module/entity_json/controller/entity_json.controller.js.map +1 -1
  157. package/dist/module/entity_json/service/entity_json.service.d.ts +10 -2
  158. package/dist/module/entity_json/service/entity_json.service.js +102 -95
  159. package/dist/module/entity_json/service/entity_json.service.js.map +1 -1
  160. package/dist/module/export/service/export.service.js +5 -0
  161. package/dist/module/export/service/export.service.js.map +1 -1
  162. package/dist/module/filter/controller/filter.controller.d.ts +1 -12
  163. package/dist/module/filter/controller/filter.controller.js +3 -2
  164. package/dist/module/filter/controller/filter.controller.js.map +1 -1
  165. package/dist/module/filter/dto/filter-request.dto.d.ts +2 -1
  166. package/dist/module/filter/entity/saved-filter-detail.entity.d.ts +0 -1
  167. package/dist/module/filter/entity/saved-filter-detail.entity.js +1 -7
  168. package/dist/module/filter/entity/saved-filter-detail.entity.js.map +1 -1
  169. package/dist/module/filter/entity/saved-filter-master.entity.d.ts +0 -1
  170. package/dist/module/filter/entity/saved-filter-master.entity.js +1 -7
  171. package/dist/module/filter/entity/saved-filter-master.entity.js.map +1 -1
  172. package/dist/module/filter/filter.module.js +2 -11
  173. package/dist/module/filter/filter.module.js.map +1 -1
  174. package/dist/module/filter/repository/saved-filter.repository.d.ts +1 -1
  175. package/dist/module/filter/repository/saved-filter.repository.js +2 -4
  176. package/dist/module/filter/repository/saved-filter.repository.js.map +1 -1
  177. package/dist/module/filter/service/filter.service.d.ts +5 -38
  178. package/dist/module/filter/service/filter.service.js +134 -88
  179. package/dist/module/filter/service/filter.service.js.map +1 -1
  180. package/dist/module/filter/service/saved-filter.service.d.ts +3 -4
  181. package/dist/module/filter/service/saved-filter.service.js +18 -15
  182. package/dist/module/filter/service/saved-filter.service.js.map +1 -1
  183. package/dist/module/integration/examples/usage.example.js +9 -9
  184. package/dist/module/integration/service/integration.service.d.ts +1 -6
  185. package/dist/module/integration/service/integration.service.js +4 -18
  186. package/dist/module/integration/service/integration.service.js.map +1 -1
  187. package/dist/module/integration/service/oauth.service.js +0 -2
  188. package/dist/module/integration/service/oauth.service.js.map +1 -1
  189. package/dist/module/integration/service/wrapper.service.js +0 -1
  190. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  191. package/dist/module/integration/strategies/email/gmail-api.strategy.js +7 -23
  192. package/dist/module/integration/strategies/email/gmail-api.strategy.js.map +1 -1
  193. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js +5 -8
  194. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js.map +1 -1
  195. package/dist/module/layout/controller/layout.controller.d.ts +1 -3
  196. package/dist/module/layout/controller/layout.controller.js +3 -7
  197. package/dist/module/layout/controller/layout.controller.js.map +1 -1
  198. package/dist/module/layout/entity/header-items.entity.js +1 -1
  199. package/dist/module/layout/entity/header-section.entity.d.ts +0 -2
  200. package/dist/module/layout/entity/header-section.entity.js +1 -9
  201. package/dist/module/layout/entity/header-section.entity.js.map +1 -1
  202. package/dist/module/layout/layout.module.js +1 -2
  203. package/dist/module/layout/layout.module.js.map +1 -1
  204. package/dist/module/layout/repository/header-section.repository.d.ts +0 -1
  205. package/dist/module/layout/repository/header-section.repository.js +0 -5
  206. package/dist/module/layout/repository/header-section.repository.js.map +1 -1
  207. package/dist/module/layout/service/header-section.service.d.ts +1 -1
  208. package/dist/module/layout/service/header-section.service.js +1 -1
  209. package/dist/module/layout/service/header-section.service.js.map +1 -1
  210. package/dist/module/layout_preference/service/layout_preference.service.d.ts +1 -1
  211. package/dist/module/linked_attributes/controller/linked_attributes.controller.d.ts +1 -0
  212. package/dist/module/linked_attributes/service/linked_attributes.service.d.ts +2 -2
  213. package/dist/module/linked_attributes/service/linked_attributes.service.js +3 -4
  214. package/dist/module/linked_attributes/service/linked_attributes.service.js.map +1 -1
  215. package/dist/module/listmaster/controller/list-master.controller.d.ts +0 -1
  216. package/dist/module/listmaster/controller/list-master.controller.js +0 -19
  217. package/dist/module/listmaster/controller/list-master.controller.js.map +1 -1
  218. package/dist/module/listmaster/entity/list-master-items.entity.d.ts +0 -4
  219. package/dist/module/listmaster/entity/list-master-items.entity.js +2 -20
  220. package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
  221. package/dist/module/listmaster/entity/list-master.entity.d.ts +1 -4
  222. package/dist/module/listmaster/entity/list-master.entity.js +5 -19
  223. package/dist/module/listmaster/entity/list-master.entity.js.map +1 -1
  224. package/dist/module/listmaster/repository/list-master-items.repository.d.ts +2 -2
  225. package/dist/module/listmaster/repository/list-master-items.repository.js +68 -25
  226. package/dist/module/listmaster/repository/list-master-items.repository.js.map +1 -1
  227. package/dist/module/listmaster/service/list-master-item.service.d.ts +1 -1
  228. package/dist/module/listmaster/service/list-master-item.service.js +129 -48
  229. package/dist/module/listmaster/service/list-master-item.service.js.map +1 -1
  230. package/dist/module/listmaster/service/list-master.service.d.ts +17 -13
  231. package/dist/module/listmaster/service/list-master.service.js +228 -135
  232. package/dist/module/listmaster/service/list-master.service.js.map +1 -1
  233. package/dist/module/mapper/entity/field-lovs.entity.d.ts +0 -1
  234. package/dist/module/mapper/entity/field-lovs.entity.js +1 -6
  235. package/dist/module/mapper/entity/field-lovs.entity.js.map +1 -1
  236. package/dist/module/mapper/entity/field-mapper.entity.d.ts +0 -1
  237. package/dist/module/mapper/entity/field-mapper.entity.js +1 -6
  238. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  239. package/dist/module/mapper/entity/mapper.entity.d.ts +0 -2
  240. package/dist/module/mapper/entity/mapper.entity.js +1 -10
  241. package/dist/module/mapper/entity/mapper.entity.js.map +1 -1
  242. package/dist/module/mapper/service/field-mapper.service.d.ts +1 -1
  243. package/dist/module/mapper/service/field-mapper.service.js +0 -1
  244. package/dist/module/mapper/service/field-mapper.service.js.map +1 -1
  245. package/dist/module/master/controller/master.controller.d.ts +1 -3
  246. package/dist/module/master/controller/master.controller.js +4 -6
  247. package/dist/module/master/controller/master.controller.js.map +1 -1
  248. package/dist/module/master/service/master.service.d.ts +1 -1
  249. package/dist/module/master/service/master.service.js +30 -44
  250. package/dist/module/master/service/master.service.js.map +1 -1
  251. package/dist/module/meta/controller/attribute-master.controller.d.ts +3 -8
  252. package/dist/module/meta/controller/attribute-master.controller.js +5 -19
  253. package/dist/module/meta/controller/attribute-master.controller.js.map +1 -1
  254. package/dist/module/meta/controller/entity-dynamic.controller.js +6 -3
  255. package/dist/module/meta/controller/entity-dynamic.controller.js.map +1 -1
  256. package/dist/module/meta/controller/entity-master.controller.js +1 -0
  257. package/dist/module/meta/controller/entity-master.controller.js.map +1 -1
  258. package/dist/module/meta/controller/entity.controller.js +3 -3
  259. package/dist/module/meta/controller/entity.controller.js.map +1 -1
  260. package/dist/module/meta/controller/entity.public.controller.js +1 -0
  261. package/dist/module/meta/controller/entity.public.controller.js.map +1 -1
  262. package/dist/module/meta/controller/media.controller.d.ts +0 -6
  263. package/dist/module/meta/controller/media.controller.js +0 -27
  264. package/dist/module/meta/controller/media.controller.js.map +1 -1
  265. package/dist/module/meta/controller/meta.controller.d.ts +1 -6
  266. package/dist/module/meta/controller/meta.controller.js +2 -19
  267. package/dist/module/meta/controller/meta.controller.js.map +1 -1
  268. package/dist/module/meta/entity/attribute-master.entity.d.ts +12 -14
  269. package/dist/module/meta/entity/attribute-master.entity.js +41 -77
  270. package/dist/module/meta/entity/attribute-master.entity.js.map +1 -1
  271. package/dist/module/meta/entity/base-entity.entity.d.ts +6 -7
  272. package/dist/module/meta/entity/base-entity.entity.js +24 -47
  273. package/dist/module/meta/entity/base-entity.entity.js.map +1 -1
  274. package/dist/module/meta/entity/dynamic.entity.d.ts +3 -0
  275. package/dist/module/{enterprise/service/brand.service.js → meta/entity/dynamic.entity.js} +9 -9
  276. package/dist/module/meta/entity/dynamic.entity.js.map +1 -0
  277. package/dist/module/meta/entity/entity-master.entity.d.ts +6 -9
  278. package/dist/module/meta/entity/entity-master.entity.js +21 -66
  279. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  280. package/dist/module/meta/entity/entity-relation-data.entity.d.ts +0 -1
  281. package/dist/module/meta/entity/entity-relation-data.entity.js +1 -7
  282. package/dist/module/meta/entity/entity-relation-data.entity.js.map +1 -1
  283. package/dist/module/meta/entity/entity-relation.entity.d.ts +0 -1
  284. package/dist/module/meta/entity/entity-relation.entity.js +1 -7
  285. package/dist/module/meta/entity/entity-relation.entity.js.map +1 -1
  286. package/dist/module/meta/entity/entity-table-column.entity.d.ts +0 -1
  287. package/dist/module/meta/entity/entity-table-column.entity.js +1 -7
  288. package/dist/module/meta/entity/entity-table-column.entity.js.map +1 -1
  289. package/dist/module/meta/entity/entity-table.entity.d.ts +0 -1
  290. package/dist/module/meta/entity/entity-table.entity.js +1 -7
  291. package/dist/module/meta/entity/entity-table.entity.js.map +1 -1
  292. package/dist/module/meta/entity/media-data.entity.d.ts +0 -2
  293. package/dist/module/meta/entity/media-data.entity.js +0 -8
  294. package/dist/module/meta/entity/media-data.entity.js.map +1 -1
  295. package/dist/module/meta/entity/preference.entity.d.ts +0 -1
  296. package/dist/module/meta/entity/preference.entity.js +1 -7
  297. package/dist/module/meta/entity/preference.entity.js.map +1 -1
  298. package/dist/module/meta/entity/view-master.entity.d.ts +0 -1
  299. package/dist/module/meta/entity/view-master.entity.js +1 -7
  300. package/dist/module/meta/entity/view-master.entity.js.map +1 -1
  301. package/dist/module/meta/entity.module.js +9 -23
  302. package/dist/module/meta/entity.module.js.map +1 -1
  303. package/dist/module/meta/repository/attribute-master.repository.d.ts +9 -3
  304. package/dist/module/meta/repository/attribute-master.repository.js +41 -15
  305. package/dist/module/meta/repository/attribute-master.repository.js.map +1 -1
  306. package/dist/module/meta/repository/entity-master.repository.js +1 -1
  307. package/dist/module/meta/repository/entity-master.repository.js.map +1 -1
  308. package/dist/module/meta/repository/entity-relation.repository.d.ts +1 -0
  309. package/dist/module/meta/repository/entity-relation.repository.js +10 -0
  310. package/dist/module/meta/repository/entity-relation.repository.js.map +1 -1
  311. package/dist/module/meta/service/attribute-master.service.d.ts +7 -7
  312. package/dist/module/meta/service/attribute-master.service.js +74 -49
  313. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  314. package/dist/module/meta/service/entity-dynamic.service.d.ts +13 -14
  315. package/dist/module/meta/service/entity-dynamic.service.js +215 -80
  316. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  317. package/dist/module/meta/service/entity-master.service.d.ts +10 -1
  318. package/dist/module/meta/service/entity-master.service.js +80 -3
  319. package/dist/module/meta/service/entity-master.service.js.map +1 -1
  320. package/dist/module/meta/service/entity-relation.service.d.ts +6 -5
  321. package/dist/module/meta/service/entity-relation.service.js +7 -10
  322. package/dist/module/meta/service/entity-relation.service.js.map +1 -1
  323. package/dist/module/meta/service/entity-service-impl.service.d.ts +4 -4
  324. package/dist/module/meta/service/entity-service-impl.service.js +14 -18
  325. package/dist/module/meta/service/entity-service-impl.service.js.map +1 -1
  326. package/dist/module/meta/service/entity-table.service.d.ts +4 -5
  327. package/dist/module/meta/service/entity-table.service.js +24 -45
  328. package/dist/module/meta/service/entity-table.service.js.map +1 -1
  329. package/dist/module/meta/service/entity-validation.service.d.ts +1 -3
  330. package/dist/module/meta/service/entity-validation.service.js +5 -34
  331. package/dist/module/meta/service/entity-validation.service.js.map +1 -1
  332. package/dist/module/meta/service/entity.service.d.ts +2 -2
  333. package/dist/module/meta/service/field-group.service.d.ts +1 -1
  334. package/dist/module/meta/service/media-data.service.d.ts +0 -4
  335. package/dist/module/meta/service/media-data.service.js +0 -129
  336. package/dist/module/meta/service/media-data.service.js.map +1 -1
  337. package/dist/module/meta/service/resolver.service.d.ts +2 -2
  338. package/dist/module/meta/service/resolver.service.js +55 -95
  339. package/dist/module/meta/service/resolver.service.js.map +1 -1
  340. package/dist/module/meta/service/section-master.service.d.ts +1 -1
  341. package/dist/module/meta/service/view-master.service.d.ts +1 -1
  342. package/dist/module/module/module.module.d.ts +0 -2
  343. package/dist/module/module/module.module.js +0 -54
  344. package/dist/module/module/module.module.js.map +1 -1
  345. package/dist/module/notification/entity/notification.entity.d.ts +17 -2
  346. package/dist/module/notification/entity/notification.entity.js +68 -2
  347. package/dist/module/notification/entity/notification.entity.js.map +1 -1
  348. package/dist/module/notification/notification.module.js +3 -12
  349. package/dist/module/notification/notification.module.js.map +1 -1
  350. package/dist/module/notification/service/email.service.d.ts +1 -0
  351. package/dist/module/notification/service/email.service.js +14 -0
  352. package/dist/module/notification/service/email.service.js.map +1 -1
  353. package/dist/module/notification/service/notification.service.d.ts +1 -5
  354. package/dist/module/notification/service/notification.service.js +41 -31
  355. package/dist/module/notification/service/notification.service.js.map +1 -1
  356. package/dist/module/preference_master/entity/preference.entity.d.ts +9 -0
  357. package/dist/module/{module/entity/module-access.entity.js → preference_master/entity/preference.entity.js} +24 -24
  358. package/dist/module/preference_master/entity/preference.entity.js.map +1 -0
  359. package/dist/module/preference_master/preference.service.d.ts +8 -0
  360. package/dist/module/{enterprise/service/enterprise.service.js → preference_master/preference.service.js} +14 -14
  361. package/dist/module/preference_master/preference.service.js.map +1 -0
  362. package/dist/module/preference_master/repo/preference.repository.d.ts +8 -0
  363. package/dist/module/{user/repository/userSession.repository.js → preference_master/repo/preference.repository.js} +25 -22
  364. package/dist/module/preference_master/repo/preference.repository.js.map +1 -0
  365. package/dist/module/user/entity/user-role-mapping.entity.d.ts +0 -12
  366. package/dist/module/user/entity/user-role-mapping.entity.js +0 -62
  367. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  368. package/dist/module/workflow/controller/activity-log.controller.d.ts +5 -6
  369. package/dist/module/workflow/entity/action-category.entity.d.ts +0 -1
  370. package/dist/module/workflow/entity/action-category.entity.js +1 -7
  371. package/dist/module/workflow/entity/action-category.entity.js.map +1 -1
  372. package/dist/module/workflow/entity/action-data.entity.d.ts +0 -1
  373. package/dist/module/workflow/entity/action-data.entity.js +1 -6
  374. package/dist/module/workflow/entity/action-data.entity.js.map +1 -1
  375. package/dist/module/workflow/entity/action-resources-mapping.entity.d.ts +0 -1
  376. package/dist/module/workflow/entity/action-resources-mapping.entity.js +1 -7
  377. package/dist/module/workflow/entity/action-resources-mapping.entity.js.map +1 -1
  378. package/dist/module/workflow/entity/action-template-mapping.entity.d.ts +0 -1
  379. package/dist/module/workflow/entity/action-template-mapping.entity.js +1 -7
  380. package/dist/module/workflow/entity/action-template-mapping.entity.js.map +1 -1
  381. package/dist/module/workflow/entity/action.entity.d.ts +0 -1
  382. package/dist/module/workflow/entity/action.entity.js +1 -7
  383. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  384. package/dist/module/workflow/entity/activity-log.entity.d.ts +0 -1
  385. package/dist/module/workflow/entity/activity-log.entity.js +1 -6
  386. package/dist/module/workflow/entity/activity-log.entity.js.map +1 -1
  387. package/dist/module/workflow/entity/comm-template.entity.d.ts +0 -1
  388. package/dist/module/workflow/entity/comm-template.entity.js +1 -7
  389. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  390. package/dist/module/workflow/entity/entity-modification.entity.d.ts +0 -1
  391. package/dist/module/workflow/entity/entity-modification.entity.js +1 -7
  392. package/dist/module/workflow/entity/entity-modification.entity.js.map +1 -1
  393. package/dist/module/workflow/entity/form.entity.d.ts +0 -1
  394. package/dist/module/workflow/entity/form.entity.js +1 -6
  395. package/dist/module/workflow/entity/form.entity.js.map +1 -1
  396. package/dist/module/workflow/entity/stage-action-mapping.entity.d.ts +0 -1
  397. package/dist/module/workflow/entity/stage-action-mapping.entity.js +1 -7
  398. package/dist/module/workflow/entity/stage-action-mapping.entity.js.map +1 -1
  399. package/dist/module/workflow/entity/stage-group.entity.d.ts +0 -1
  400. package/dist/module/workflow/entity/stage-group.entity.js +1 -7
  401. package/dist/module/workflow/entity/stage-group.entity.js.map +1 -1
  402. package/dist/module/workflow/entity/stage-movement-data.entity.d.ts +0 -1
  403. package/dist/module/workflow/entity/stage-movement-data.entity.js +1 -7
  404. package/dist/module/workflow/entity/stage-movement-data.entity.js.map +1 -1
  405. package/dist/module/workflow/entity/stage.entity.d.ts +0 -1
  406. package/dist/module/workflow/entity/stage.entity.js +1 -7
  407. package/dist/module/workflow/entity/stage.entity.js.map +1 -1
  408. package/dist/module/workflow/entity/task-data.entity.d.ts +0 -1
  409. package/dist/module/workflow/entity/task-data.entity.js +1 -6
  410. package/dist/module/workflow/entity/task-data.entity.js.map +1 -1
  411. package/dist/module/workflow/entity/workflow-data.entity.d.ts +0 -1
  412. package/dist/module/workflow/entity/workflow-data.entity.js +1 -10
  413. package/dist/module/workflow/entity/workflow-data.entity.js.map +1 -1
  414. package/dist/module/workflow/entity/workflow.entity.d.ts +0 -1
  415. package/dist/module/workflow/entity/workflow.entity.js +1 -7
  416. package/dist/module/workflow/entity/workflow.entity.js.map +1 -1
  417. package/dist/module/workflow/repository/action-category.repository.js.map +1 -1
  418. package/dist/module/workflow/repository/action-data.repository.d.ts +2 -2
  419. package/dist/module/workflow/repository/action-data.repository.js +9 -17
  420. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  421. package/dist/module/workflow/repository/action.repository.d.ts +2 -2
  422. package/dist/module/workflow/repository/action.repository.js +12 -12
  423. package/dist/module/workflow/repository/action.repository.js.map +1 -1
  424. package/dist/module/workflow/repository/activity-log.repository.d.ts +5 -6
  425. package/dist/module/workflow/repository/comm-template.repository.js +2 -2
  426. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -1
  427. package/dist/module/workflow/repository/form-master.repository.d.ts +2 -2
  428. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  429. package/dist/module/workflow/repository/form-master.repository.js.map +1 -1
  430. package/dist/module/workflow/repository/stage-group.repository.d.ts +6 -6
  431. package/dist/module/workflow/repository/stage-movement.repository.d.ts +1 -1
  432. package/dist/module/workflow/repository/stage.repository.d.ts +5 -6
  433. package/dist/module/workflow/repository/stage.repository.js +8 -8
  434. package/dist/module/workflow/repository/task.repository.d.ts +1 -1
  435. package/dist/module/workflow/repository/task.repository.js +5 -5
  436. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  437. package/dist/module/workflow/repository/workflow.repository.js +1 -1
  438. package/dist/module/workflow/repository/workflow.repository.js.map +1 -1
  439. package/dist/module/workflow/service/action-category.service.js.map +1 -1
  440. package/dist/module/workflow/service/action-data.service.d.ts +1 -1
  441. package/dist/module/workflow/service/action-data.service.js +1 -2
  442. package/dist/module/workflow/service/action-data.service.js.map +1 -1
  443. package/dist/module/workflow/service/action-template-mapping.service.js +2 -2
  444. package/dist/module/workflow/service/action.service.d.ts +1 -1
  445. package/dist/module/workflow/service/action.service.js +15 -17
  446. package/dist/module/workflow/service/action.service.js.map +1 -1
  447. package/dist/module/workflow/service/activity-log.service.d.ts +6 -7
  448. package/dist/module/workflow/service/activity-log.service.js.map +1 -1
  449. package/dist/module/workflow/service/comm-template.service.d.ts +1 -1
  450. package/dist/module/workflow/service/comm-template.service.js +0 -2
  451. package/dist/module/workflow/service/comm-template.service.js.map +1 -1
  452. package/dist/module/workflow/service/entity-modification.service.d.ts +1 -1
  453. package/dist/module/workflow/service/entity-modification.service.js +2 -3
  454. package/dist/module/workflow/service/entity-modification.service.js.map +1 -1
  455. package/dist/module/workflow/service/form-master.service.d.ts +1 -1
  456. package/dist/module/workflow/service/form-master.service.js +2 -2
  457. package/dist/module/workflow/service/form-master.service.js.map +1 -1
  458. package/dist/module/workflow/service/populate-workflow.service.d.ts +2 -6
  459. package/dist/module/workflow/service/populate-workflow.service.js +6 -17
  460. package/dist/module/workflow/service/populate-workflow.service.js.map +1 -1
  461. package/dist/module/workflow/service/stage-group.service.d.ts +1 -1
  462. package/dist/module/workflow/service/stage.service.d.ts +1 -1
  463. package/dist/module/workflow/service/stage.service.js.map +1 -1
  464. package/dist/module/workflow/service/task.service.d.ts +1 -1
  465. package/dist/module/workflow/service/task.service.js +10 -13
  466. package/dist/module/workflow/service/task.service.js.map +1 -1
  467. package/dist/module/workflow/service/workflow-meta.service.d.ts +1 -1
  468. package/dist/module/workflow/service/workflow-meta.service.js +2 -7
  469. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  470. package/dist/module/workflow/service/workflow.service.d.ts +1 -1
  471. package/dist/module/workflow/service/workflow.service.js +2 -2
  472. package/dist/module/workflow/service/workflow.service.js.map +1 -1
  473. package/dist/module/workflow-automation/entity/workflow-automation.entity.d.ts +1 -3
  474. package/dist/module/workflow-automation/entity/workflow-automation.entity.js +1 -9
  475. package/dist/module/workflow-automation/entity/workflow-automation.entity.js.map +1 -1
  476. package/dist/module/workflow-automation/service/schedule-handler.service.js +11 -12
  477. package/dist/module/workflow-automation/service/schedule-handler.service.js.map +1 -1
  478. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +8 -10
  479. package/dist/module/workflow-automation/service/workflow-automation.service.js +18 -15
  480. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  481. package/dist/module/workflow-automation/workflow-automation.module.js +3 -1
  482. package/dist/module/workflow-automation/workflow-automation.module.js.map +1 -1
  483. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.d.ts +2 -3
  484. package/dist/module/workflow-schedule/processors/schedule.processor.js +5 -9
  485. package/dist/module/workflow-schedule/processors/schedule.processor.js.map +1 -1
  486. package/dist/module/workflow-schedule/service/workflow-schedule.service.d.ts +1 -1
  487. package/dist/module/workflow-schedule/service/workflow-schedule.service.js +4 -13
  488. package/dist/module/workflow-schedule/service/workflow-schedule.service.js.map +1 -1
  489. package/dist/table.config.d.ts +2 -23
  490. package/dist/table.config.js +21 -33
  491. package/dist/table.config.js.map +1 -1
  492. package/dist/tsconfig.build.tsbuildinfo +1 -1
  493. package/dist/utils/service/reflection-helper.service.js +2 -2
  494. package/docs/modules/event-driven-integration-design.md +91 -91
  495. package/docs/modules/integration.md +250 -250
  496. package/eslint.config.mjs +34 -34
  497. package/nest-cli.json +14 -14
  498. package/package.json +128 -125
  499. package/server.log +850 -0
  500. package/src/app.controller.ts +12 -13
  501. package/src/app.module.ts +62 -68
  502. package/src/app.service.ts +8 -8
  503. package/src/config/bull.config.ts +69 -69
  504. package/src/config/config.module.ts +17 -17
  505. package/src/config/database.config.ts +48 -48
  506. package/src/constant/attribute.constant.ts +9 -0
  507. package/src/constant/db-data-type.constant.ts +160 -0
  508. package/src/constant/entity.constant.ts +4 -0
  509. package/src/constant/global.constant.ts +67 -67
  510. package/src/constant/status.constant.ts +4 -0
  511. package/src/core.module.ts +96 -94
  512. package/src/decorators/roles.decorator.ts +7 -7
  513. package/src/dtos/response.dto.ts +6 -6
  514. package/src/dtos/response.ts +5 -5
  515. package/src/index.ts +1 -1
  516. package/src/module/auth/auth.module.ts +72 -49
  517. package/src/module/auth/controller/auth.controller.ts +28 -28
  518. package/src/module/auth/dto/user.dto.ts +56 -0
  519. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  520. package/src/module/auth/guards/jwt.guard.ts +22 -22
  521. package/src/module/auth/services/auth.service.ts +56 -56
  522. package/src/module/auth/services/jwt.service.ts +11 -11
  523. package/src/module/auth/strategies/google.strategy.ts +54 -54
  524. package/src/module/auth/strategies/jwt.strategy.ts +64 -58
  525. package/src/module/auth/strategies/local.strategy.ts +13 -13
  526. package/src/module/dashboard/controller/dashboard.controller.ts +38 -38
  527. package/src/module/dashboard/dashboard.module.ts +19 -21
  528. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +23 -27
  529. package/src/module/dashboard/entity/widget_master.entity.ts +15 -18
  530. package/src/module/dashboard/repository/dashboard.repository.ts +49 -49
  531. package/src/module/dashboard/service/dashboard.service.ts +69 -72
  532. package/src/module/eav/EAV_USAGE_GUIDE.md +351 -0
  533. package/src/module/eav/controller/eav.controller.ts +119 -0
  534. package/src/module/eav/dto/eav-operation.dto.ts +62 -0
  535. package/src/module/eav/eav.module.ts +80 -0
  536. package/src/module/eav/entity/eav-boolean.entity.ts +26 -0
  537. package/src/module/eav/entity/eav-date.entity.ts +25 -0
  538. package/src/module/eav/entity/eav-decimal.entity.ts +25 -0
  539. package/src/module/eav/entity/eav-int.entity.ts +25 -0
  540. package/src/module/eav/entity/eav-json.entity.ts +25 -0
  541. package/src/module/eav/entity/eav-text.entity.ts +25 -0
  542. package/src/module/eav/entity/eav-time.entity.ts +25 -0
  543. package/src/module/eav/entity/eav-timestamp.entity.ts +25 -0
  544. package/src/module/eav/entity/eav-varchar.entity.ts +25 -0
  545. package/src/module/eav/interface/eav-strategy.interface.ts +32 -0
  546. package/src/module/eav/repository/eav-boolean.repository.ts +67 -0
  547. package/src/module/eav/repository/eav-date.repository.ts +67 -0
  548. package/src/module/eav/repository/eav-decimal.repository.ts +67 -0
  549. package/src/module/eav/repository/eav-int.repository.ts +67 -0
  550. package/src/module/eav/repository/eav-json.repository.ts +67 -0
  551. package/src/module/eav/repository/eav-text.repository.ts +67 -0
  552. package/src/module/eav/repository/eav-time.repository.ts +67 -0
  553. package/src/module/eav/repository/eav-timestamp.repository.ts +67 -0
  554. package/src/module/eav/repository/eav-varchar.repository.ts +67 -0
  555. package/src/module/eav/service/eav-boolean.service.ts +64 -0
  556. package/src/module/eav/service/eav-date.service.ts +64 -0
  557. package/src/module/eav/service/eav-decimal.service.ts +64 -0
  558. package/src/module/eav/service/eav-factory.service.ts +93 -0
  559. package/src/module/eav/service/eav-int.service.ts +64 -0
  560. package/src/module/eav/service/eav-json.service.ts +64 -0
  561. package/src/module/eav/service/eav-text.service.ts +64 -0
  562. package/src/module/eav/service/eav-time.service.ts +64 -0
  563. package/src/module/eav/service/eav-timestamp.service.ts +64 -0
  564. package/src/module/eav/service/eav-varchar.service.ts +65 -0
  565. package/src/module/eav/service/eav.service.ts +116 -0
  566. package/src/module/entity_json/controller/entity_json.controller.ts +75 -60
  567. package/src/module/entity_json/docs/FlatJson_Filterin_System.md +2803 -2803
  568. package/src/module/entity_json/entity/entityJson.entity.ts +42 -42
  569. package/src/module/entity_json/entity_json.module.ts +22 -22
  570. package/src/module/entity_json/service/entityJson.repository.ts +37 -37
  571. package/src/module/entity_json/service/entity_json.service.ts +492 -486
  572. package/src/module/export/controller/export.controller.ts +83 -83
  573. package/src/module/export/export.module.ts +14 -14
  574. package/src/module/export/service/export.service.ts +107 -105
  575. package/src/module/filter/controller/filter.controller.ts +89 -87
  576. package/src/module/filter/dto/filter-request.dto.ts +41 -39
  577. package/src/module/filter/entity/saved-filter-detail.entity.ts +37 -41
  578. package/src/module/filter/entity/saved-filter-master.entity.ts +30 -35
  579. package/src/module/filter/filter.module.ts +33 -42
  580. package/src/module/filter/repository/saved-filter.repository.ts +247 -249
  581. package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
  582. package/src/module/filter/service/filter-evaluator.service.ts +82 -82
  583. package/src/module/filter/service/filter.service.ts +1389 -1406
  584. package/src/module/filter/service/saved-filter.service.ts +164 -154
  585. package/src/module/ics/controller/ics.controller.ts +21 -21
  586. package/src/module/ics/dto/ics.dto.ts +55 -55
  587. package/src/module/ics/ics.module.ts +13 -13
  588. package/src/module/ics/service/ics.service.ts +57 -57
  589. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  590. package/src/module/integration/controller/integration.controller.ts +662 -662
  591. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  592. package/src/module/integration/dto/create-config.dto.ts +526 -526
  593. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  594. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  595. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  596. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  597. package/src/module/integration/examples/usage.example.ts +338 -338
  598. package/src/module/integration/factories/base.factory.ts +7 -7
  599. package/src/module/integration/factories/email.factory.ts +49 -49
  600. package/src/module/integration/factories/integration.factory.ts +121 -121
  601. package/src/module/integration/factories/sms.factory.ts +51 -51
  602. package/src/module/integration/factories/telephone.factory.ts +41 -41
  603. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  604. package/src/module/integration/integration.module.ts +110 -110
  605. package/src/module/integration/service/calendar-event.service.ts +118 -118
  606. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  607. package/src/module/integration/service/integration-queue.service.ts +229 -229
  608. package/src/module/integration/service/integration.service.ts +2632 -2653
  609. package/src/module/integration/service/oauth.service.ts +224 -226
  610. package/src/module/integration/service/wrapper.service.ts +753 -754
  611. package/src/module/integration/strategies/email/gmail-api.strategy.ts +281 -307
  612. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  613. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  614. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -263
  615. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  616. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  617. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  618. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  619. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  620. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  621. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  622. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  623. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  624. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  625. package/src/module/layout/controller/layout.controller.ts +38 -47
  626. package/src/module/layout/entity/header-items.entity.ts +28 -28
  627. package/src/module/layout/entity/header-section.entity.ts +13 -19
  628. package/src/module/layout/layout.module.ts +20 -21
  629. package/src/module/layout/repository/header-items.repository.ts +18 -18
  630. package/src/module/layout/repository/header-section.repository.ts +16 -22
  631. package/src/module/layout/service/header-section.service.ts +25 -25
  632. package/src/module/layout_preference/controller/layout_preference.controller.ts +76 -76
  633. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  634. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  635. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  636. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  637. package/src/module/linked_attributes/controller/linked_attributes.controller.ts +137 -137
  638. package/src/module/linked_attributes/dto/create-linked-attribute-smart.dto.ts +54 -54
  639. package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
  640. package/src/module/linked_attributes/linked_attributes.module.ts +23 -23
  641. package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
  642. package/src/module/linked_attributes/service/linked_attributes.service.ts +648 -648
  643. package/src/module/linked_attributes/test/linked-attributes.service.spec.ts +244 -244
  644. package/src/module/listmaster/controller/list-master.controller.ts +206 -230
  645. package/src/module/listmaster/entity/list-master-items.entity.ts +30 -43
  646. package/src/module/listmaster/entity/list-master.entity.ts +23 -33
  647. package/src/module/listmaster/listmaster.module.ts +46 -46
  648. package/src/module/listmaster/repository/list-master-items.repository.ts +225 -173
  649. package/src/module/listmaster/repository/list-master.repository.ts +56 -56
  650. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  651. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  652. package/src/module/listmaster/service/list-master-item.service.ts +382 -280
  653. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  654. package/src/module/listmaster/service/list-master.service.ts +767 -527
  655. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  656. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  657. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  658. package/src/module/mapper/entity/field-lovs.entity.ts +15 -19
  659. package/src/module/mapper/entity/field-mapper.entity.ts +49 -53
  660. package/src/module/mapper/entity/mapper.entity.ts +9 -16
  661. package/src/module/mapper/mapper.module.ts +35 -35
  662. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  663. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  664. package/src/module/mapper/repository/mapper.repository.ts +32 -32
  665. package/src/module/mapper/service/field-mapper.service.ts +268 -269
  666. package/src/module/mapper/service/mapper.service.ts +80 -80
  667. package/src/module/master/controller/master.controller.ts +71 -74
  668. package/src/module/master/service/master.service.ts +460 -484
  669. package/src/module/meta/controller/attribute-master.controller.ts +82 -96
  670. package/src/module/meta/controller/entity-dynamic.controller.ts +123 -125
  671. package/src/module/meta/controller/entity-master.controller.ts +41 -41
  672. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  673. package/src/module/meta/controller/entity.controller.ts +301 -308
  674. package/src/module/meta/controller/entity.public.controller.ts +76 -75
  675. package/src/module/meta/controller/media.controller.ts +135 -167
  676. package/src/module/meta/controller/meta.controller.ts +80 -101
  677. package/src/module/meta/controller/view-master.controller.ts +79 -79
  678. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  679. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  680. package/src/module/meta/dto/entity-table.dto.ts +12 -12
  681. package/src/module/meta/entity/attribute-master.entity.ts +62 -92
  682. package/src/module/meta/entity/base-entity.entity.ts +52 -75
  683. package/src/module/meta/entity/dynamic.entity.ts +6 -0
  684. package/src/module/meta/entity/entity-master.entity.ts +53 -91
  685. package/src/module/meta/entity/entity-relation-data.entity.ts +24 -29
  686. package/src/module/meta/entity/entity-relation.entity.ts +18 -23
  687. package/src/module/meta/entity/entity-table-column.entity.ts +56 -61
  688. package/src/module/meta/entity/entity-table.entity.ts +45 -50
  689. package/src/module/meta/entity/media-data.entity.ts +32 -38
  690. package/src/module/meta/entity/preference.entity.ts +57 -62
  691. package/src/module/meta/entity/view-master.entity.ts +36 -41
  692. package/src/module/meta/entity.module.ts +148 -165
  693. package/src/module/meta/repository/attribute-master.repository.ts +206 -164
  694. package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
  695. package/src/module/meta/repository/entity-master.repository.ts +120 -120
  696. package/src/module/meta/repository/entity-relation.repository.ts +36 -22
  697. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  698. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  699. package/src/module/meta/repository/media-data.repository.ts +50 -50
  700. package/src/module/meta/repository/preference.repository.ts +20 -20
  701. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  702. package/src/module/meta/repository/view-master.repository.ts +42 -42
  703. package/src/module/meta/service/attribute-master.service.ts +254 -160
  704. package/src/module/meta/service/common.service.ts +9 -9
  705. package/src/module/meta/service/entity-attribute-update.service.ts +26 -26
  706. package/src/module/meta/service/entity-dynamic.service.ts +993 -835
  707. package/src/module/meta/service/entity-master.service.ts +288 -172
  708. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  709. package/src/module/meta/service/entity-relation.service.ts +85 -78
  710. package/src/module/meta/service/entity-service-impl.service.ts +394 -389
  711. package/src/module/meta/service/entity-table-column.service.ts +26 -26
  712. package/src/module/meta/service/entity-table.service.ts +157 -171
  713. package/src/module/meta/service/entity-validation.service.ts +187 -188
  714. package/src/module/meta/service/entity.service.ts +48 -48
  715. package/src/module/meta/service/field-group.service.ts +103 -103
  716. package/src/module/meta/service/media-data.service.ts +385 -610
  717. package/src/module/meta/service/preference.service.ts +16 -16
  718. package/src/module/meta/service/resolver.service.ts +260 -347
  719. package/src/module/meta/service/section-master.service.ts +104 -104
  720. package/src/module/meta/service/update-form-json.service.ts +22 -22
  721. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  722. package/src/module/meta/service/view-master.service.ts +127 -127
  723. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  724. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  725. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  726. package/src/module/module/module.module.ts +0 -42
  727. package/src/module/notification/controller/notification.controller.ts +58 -58
  728. package/src/module/notification/entity/notification.entity.ts +76 -26
  729. package/src/module/notification/entity/otp.entity.ts +28 -28
  730. package/src/module/notification/firebase-admin.config.ts +22 -22
  731. package/src/module/notification/notification.module.ts +63 -71
  732. package/src/module/notification/repository/otp.repository.ts +27 -27
  733. package/src/module/notification/service/email.service.ts +142 -127
  734. package/src/module/notification/service/notification.service.ts +163 -146
  735. package/src/module/preference_master/entity/preference.entity.ts +25 -0
  736. package/src/module/preference_master/preference.service.ts +27 -0
  737. package/src/module/preference_master/repo/preference.repository.ts +36 -0
  738. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  739. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  740. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  741. package/src/module/third-party-module/third-party.module.ts +12 -12
  742. package/src/module/user/entity/user-role-mapping.entity.ts +0 -38
  743. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  744. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  745. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  746. package/src/module/workflow/controller/action.controller.ts +111 -111
  747. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  748. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  749. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  750. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  751. package/src/module/workflow/controller/stage-group.controller.ts +49 -49
  752. package/src/module/workflow/controller/stage.controller.ts +51 -51
  753. package/src/module/workflow/controller/task.controller.ts +77 -77
  754. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  755. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  756. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  757. package/src/module/workflow/entity/action-category.entity.ts +33 -38
  758. package/src/module/workflow/entity/action-data.entity.ts +51 -55
  759. package/src/module/workflow/entity/action-resources-mapping.entity.ts +21 -29
  760. package/src/module/workflow/entity/action-template-mapping.entity.ts +12 -17
  761. package/src/module/workflow/entity/action.entity.ts +48 -53
  762. package/src/module/workflow/entity/activity-log.entity.ts +39 -43
  763. package/src/module/workflow/entity/comm-template.entity.ts +38 -43
  764. package/src/module/workflow/entity/entity-modification.entity.ts +33 -38
  765. package/src/module/workflow/entity/form.entity.ts +21 -25
  766. package/src/module/workflow/entity/stage-action-mapping.entity.ts +12 -17
  767. package/src/module/workflow/entity/stage-group.entity.ts +18 -23
  768. package/src/module/workflow/entity/stage-movement-data.entity.ts +33 -38
  769. package/src/module/workflow/entity/stage.entity.ts +15 -20
  770. package/src/module/workflow/entity/task-data.entity.ts +84 -88
  771. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  772. package/src/module/workflow/entity/workflow-data.entity.ts +6 -11
  773. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  774. package/src/module/workflow/entity/workflow.entity.ts +15 -20
  775. package/src/module/workflow/repository/action-category.repository.ts +78 -79
  776. package/src/module/workflow/repository/action-data.repository.ts +345 -354
  777. package/src/module/workflow/repository/action.repository.ts +339 -339
  778. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  779. package/src/module/workflow/repository/comm-template.repository.ts +157 -157
  780. package/src/module/workflow/repository/form-master.repository.ts +50 -50
  781. package/src/module/workflow/repository/stage-group.repository.ts +186 -186
  782. package/src/module/workflow/repository/stage-movement.repository.ts +217 -217
  783. package/src/module/workflow/repository/stage.repository.ts +160 -160
  784. package/src/module/workflow/repository/task.repository.ts +154 -156
  785. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  786. package/src/module/workflow/service/action-category.service.ts +32 -33
  787. package/src/module/workflow/service/action-data.service.ts +62 -62
  788. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  789. package/src/module/workflow/service/action-template-mapping.service.ts +137 -137
  790. package/src/module/workflow/service/action.service.ts +300 -302
  791. package/src/module/workflow/service/activity-log.service.ts +106 -107
  792. package/src/module/workflow/service/comm-template.service.ts +179 -181
  793. package/src/module/workflow/service/entity-modification.service.ts +55 -61
  794. package/src/module/workflow/service/form-master.service.ts +35 -35
  795. package/src/module/workflow/service/populate-workflow.service.ts +313 -325
  796. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  797. package/src/module/workflow/service/stage-group.service.ts +325 -325
  798. package/src/module/workflow/service/stage.service.ts +196 -197
  799. package/src/module/workflow/service/task.service.ts +547 -551
  800. package/src/module/workflow/service/workflow-list-master.service.ts +68 -68
  801. package/src/module/workflow/service/workflow-meta.service.ts +635 -640
  802. package/src/module/workflow/service/workflow.service.ts +212 -213
  803. package/src/module/workflow/workflow.module.ts +180 -180
  804. package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
  805. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
  806. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  807. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -40
  808. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  809. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  810. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  811. package/src/module/workflow-automation/service/schedule-handler.service.ts +167 -168
  812. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
  813. package/src/module/workflow-automation/service/workflow-automation.service.ts +486 -474
  814. package/src/module/workflow-automation/workflow-automation.module.ts +55 -54
  815. package/src/module/workflow-schedule/INSTALLATION.md +244 -244
  816. package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
  817. package/src/module/workflow-schedule/README.md +422 -422
  818. package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
  819. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +253 -253
  820. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
  821. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
  822. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
  823. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
  824. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
  825. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
  826. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
  827. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
  828. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +51 -53
  829. package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
  830. package/src/module/workflow-schedule/processors/schedule.processor.ts +616 -620
  831. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +588 -597
  832. package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
  833. package/src/resources/dev.properties.yaml +34 -31
  834. package/src/resources/local.properties.yaml +27 -27
  835. package/src/resources/properties.module.ts +12 -12
  836. package/src/resources/properties.yaml.ts +11 -11
  837. package/src/resources/uat.properties.yaml +31 -31
  838. package/src/table.config.ts +123 -135
  839. package/src/utils/dto/excel-data.dto.ts +14 -14
  840. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  841. package/src/utils/service/base64util.service.ts +18 -18
  842. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  843. package/src/utils/service/codeGenerator.service.ts +22 -22
  844. package/src/utils/service/dateUtil.service.ts +17 -17
  845. package/src/utils/service/encryptUtil.service.ts +97 -97
  846. package/src/utils/service/excel-helper.service.ts +72 -72
  847. package/src/utils/service/excelUtil.service.ts +15 -15
  848. package/src/utils/service/file-util.service.ts +11 -11
  849. package/src/utils/service/json-util.service.ts +23 -23
  850. package/src/utils/service/loggingUtil.service.ts +88 -88
  851. package/src/utils/service/reflection-helper.service.ts +62 -62
  852. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  853. package/src/utils/utils.module.ts +27 -27
  854. package/tsconfig.build.json +4 -4
  855. package/tsconfig.json +24 -24
  856. package/dist/migrations/1732612800000-AddEntityJsonGinIndex.d.ts +0 -6
  857. package/dist/migrations/1732612800000-AddEntityJsonGinIndex.js +0 -32
  858. package/dist/migrations/1732612800000-AddEntityJsonGinIndex.js.map +0 -1
  859. package/dist/module/auth/guards/role.guard.d.ts +0 -9
  860. package/dist/module/auth/guards/role.guard.js +0 -59
  861. package/dist/module/auth/guards/role.guard.js.map +0 -1
  862. package/dist/module/enterprise/controller/organization.controller.d.ts +0 -14
  863. package/dist/module/enterprise/controller/organization.controller.js +0 -59
  864. package/dist/module/enterprise/controller/organization.controller.js.map +0 -1
  865. package/dist/module/enterprise/enterprise.module.d.ts +0 -2
  866. package/dist/module/enterprise/enterprise.module.js +0 -57
  867. package/dist/module/enterprise/enterprise.module.js.map +0 -1
  868. package/dist/module/enterprise/entity/enterprise.entity.d.ts +0 -13
  869. package/dist/module/enterprise/entity/enterprise.entity.js +0 -64
  870. package/dist/module/enterprise/entity/enterprise.entity.js.map +0 -1
  871. package/dist/module/enterprise/entity/organization-app-mapping.entity.d.ts +0 -5
  872. package/dist/module/enterprise/entity/organization-app-mapping.entity.js +0 -32
  873. package/dist/module/enterprise/entity/organization-app-mapping.entity.js.map +0 -1
  874. package/dist/module/enterprise/entity/organization.entity.d.ts +0 -30
  875. package/dist/module/enterprise/entity/organization.entity.js +0 -136
  876. package/dist/module/enterprise/entity/organization.entity.js.map +0 -1
  877. package/dist/module/enterprise/repository/enterprise.repository.d.ts +0 -8
  878. package/dist/module/enterprise/repository/enterprise.repository.js +0 -48
  879. package/dist/module/enterprise/repository/enterprise.repository.js.map +0 -1
  880. package/dist/module/enterprise/repository/organization.repository.d.ts +0 -8
  881. package/dist/module/enterprise/repository/organization.repository.js +0 -41
  882. package/dist/module/enterprise/repository/organization.repository.js.map +0 -1
  883. package/dist/module/enterprise/repository/school.repository.d.ts +0 -8
  884. package/dist/module/enterprise/repository/school.repository.js +0 -226
  885. package/dist/module/enterprise/repository/school.repository.js.map +0 -1
  886. package/dist/module/enterprise/service/brand.service.d.ts +0 -3
  887. package/dist/module/enterprise/service/brand.service.js.map +0 -1
  888. package/dist/module/enterprise/service/enterprise.service.d.ts +0 -8
  889. package/dist/module/enterprise/service/enterprise.service.js.map +0 -1
  890. package/dist/module/enterprise/service/organization-app-mapping.service.d.ts +0 -2
  891. package/dist/module/enterprise/service/organization-app-mapping.service.js +0 -17
  892. package/dist/module/enterprise/service/organization-app-mapping.service.js.map +0 -1
  893. package/dist/module/enterprise/service/organization.service.d.ts +0 -19
  894. package/dist/module/enterprise/service/organization.service.js +0 -120
  895. package/dist/module/enterprise/service/organization.service.js.map +0 -1
  896. package/dist/module/filter/service/flatjson-filter.service.d.ts +0 -32
  897. package/dist/module/filter/service/flatjson-filter.service.js +0 -632
  898. package/dist/module/filter/service/flatjson-filter.service.js.map +0 -1
  899. package/dist/module/lead/controller/lead.controller.d.ts +0 -20
  900. package/dist/module/lead/controller/lead.controller.js +0 -58
  901. package/dist/module/lead/controller/lead.controller.js.map +0 -1
  902. package/dist/module/lead/lead.module.d.ts +0 -2
  903. package/dist/module/lead/lead.module.js +0 -26
  904. package/dist/module/lead/lead.module.js.map +0 -1
  905. package/dist/module/lead/repository/lead.repository.d.ts +0 -10
  906. package/dist/module/lead/repository/lead.repository.js +0 -53
  907. package/dist/module/lead/repository/lead.repository.js.map +0 -1
  908. package/dist/module/lead/service/lead.service.d.ts +0 -20
  909. package/dist/module/lead/service/lead.service.js +0 -55
  910. package/dist/module/lead/service/lead.service.js.map +0 -1
  911. package/dist/module/meta/controller/app-master.controller.d.ts +0 -9
  912. package/dist/module/meta/controller/app-master.controller.js +0 -51
  913. package/dist/module/meta/controller/app-master.controller.js.map +0 -1
  914. package/dist/module/meta/entity/app-master.entity.d.ts +0 -13
  915. package/dist/module/meta/entity/app-master.entity.js +0 -62
  916. package/dist/module/meta/entity/app-master.entity.js.map +0 -1
  917. package/dist/module/meta/repository/app-master.repository.d.ts +0 -7
  918. package/dist/module/meta/repository/app-master.repository.js +0 -36
  919. package/dist/module/meta/repository/app-master.repository.js.map +0 -1
  920. package/dist/module/meta/service/app-master.service.d.ts +0 -8
  921. package/dist/module/meta/service/app-master.service.js +0 -45
  922. package/dist/module/meta/service/app-master.service.js.map +0 -1
  923. package/dist/module/meta/service/populate-meta.service.d.ts +0 -13
  924. package/dist/module/meta/service/populate-meta.service.js +0 -206
  925. package/dist/module/meta/service/populate-meta.service.js.map +0 -1
  926. package/dist/module/module/controller/menu.controller.d.ts +0 -8
  927. package/dist/module/module/controller/menu.controller.js +0 -41
  928. package/dist/module/module/controller/menu.controller.js.map +0 -1
  929. package/dist/module/module/controller/module-access.controller.d.ts +0 -35
  930. package/dist/module/module/controller/module-access.controller.js +0 -148
  931. package/dist/module/module/controller/module-access.controller.js.map +0 -1
  932. package/dist/module/module/entity/menu.entity.d.ts +0 -15
  933. package/dist/module/module/entity/menu.entity.js +0 -72
  934. package/dist/module/module/entity/menu.entity.js.map +0 -1
  935. package/dist/module/module/entity/module-access.entity.d.ts +0 -9
  936. package/dist/module/module/entity/module-access.entity.js.map +0 -1
  937. package/dist/module/module/entity/module-action.entity.d.ts +0 -6
  938. package/dist/module/module/entity/module-action.entity.js +0 -37
  939. package/dist/module/module/entity/module-action.entity.js.map +0 -1
  940. package/dist/module/module/entity/module.entity.d.ts +0 -18
  941. package/dist/module/module/entity/module.entity.js +0 -84
  942. package/dist/module/module/entity/module.entity.js.map +0 -1
  943. package/dist/module/module/repository/menu.repository.d.ts +0 -15
  944. package/dist/module/module/repository/menu.repository.js +0 -163
  945. package/dist/module/module/repository/menu.repository.js.map +0 -1
  946. package/dist/module/module/repository/module-access.repository.d.ts +0 -52
  947. package/dist/module/module/repository/module-access.repository.js +0 -283
  948. package/dist/module/module/repository/module-access.repository.js.map +0 -1
  949. package/dist/module/module/service/menu.service.d.ts +0 -12
  950. package/dist/module/module/service/menu.service.js +0 -59
  951. package/dist/module/module/service/menu.service.js.map +0 -1
  952. package/dist/module/module/service/module-access.service.d.ts +0 -63
  953. package/dist/module/module/service/module-access.service.js +0 -113
  954. package/dist/module/module/service/module-access.service.js.map +0 -1
  955. package/dist/module/notification/controller/otp.controller.d.ts +0 -35
  956. package/dist/module/notification/controller/otp.controller.js +0 -103
  957. package/dist/module/notification/controller/otp.controller.js.map +0 -1
  958. package/dist/module/notification/repository/notification.repository.d.ts +0 -7
  959. package/dist/module/notification/repository/notification.repository.js +0 -43
  960. package/dist/module/notification/repository/notification.repository.js.map +0 -1
  961. package/dist/module/notification/service/otp.service.d.ts +0 -31
  962. package/dist/module/notification/service/otp.service.js +0 -112
  963. package/dist/module/notification/service/otp.service.js.map +0 -1
  964. package/dist/module/user/controller/login.controller.d.ts +0 -26
  965. package/dist/module/user/controller/login.controller.js +0 -177
  966. package/dist/module/user/controller/login.controller.js.map +0 -1
  967. package/dist/module/user/controller/user.controller.d.ts +0 -9
  968. package/dist/module/user/controller/user.controller.js +0 -59
  969. package/dist/module/user/controller/user.controller.js.map +0 -1
  970. package/dist/module/user/dto/create-user.dto.d.ts +0 -17
  971. package/dist/module/user/dto/create-user.dto.js +0 -64
  972. package/dist/module/user/dto/create-user.dto.js.map +0 -1
  973. package/dist/module/user/dto/update-user.dto.d.ts +0 -5
  974. package/dist/module/user/dto/update-user.dto.js +0 -9
  975. package/dist/module/user/dto/update-user.dto.js.map +0 -1
  976. package/dist/module/user/entity/role.entity.d.ts +0 -11
  977. package/dist/module/user/entity/role.entity.js +0 -56
  978. package/dist/module/user/entity/role.entity.js.map +0 -1
  979. package/dist/module/user/entity/user-session.entity.d.ts +0 -15
  980. package/dist/module/user/entity/user-session.entity.js +0 -102
  981. package/dist/module/user/entity/user-session.entity.js.map +0 -1
  982. package/dist/module/user/entity/user.entity.js +0 -95
  983. package/dist/module/user/entity/user.entity.js.map +0 -1
  984. package/dist/module/user/repository/role.repository.d.ts +0 -18
  985. package/dist/module/user/repository/role.repository.js +0 -87
  986. package/dist/module/user/repository/role.repository.js.map +0 -1
  987. package/dist/module/user/repository/user-role-mapping.repository.d.ts +0 -19
  988. package/dist/module/user/repository/user-role-mapping.repository.js +0 -110
  989. package/dist/module/user/repository/user-role-mapping.repository.js.map +0 -1
  990. package/dist/module/user/repository/user.repository.d.ts +0 -10
  991. package/dist/module/user/repository/user.repository.js +0 -58
  992. package/dist/module/user/repository/user.repository.js.map +0 -1
  993. package/dist/module/user/repository/userSession.repository.d.ts +0 -10
  994. package/dist/module/user/repository/userSession.repository.js.map +0 -1
  995. package/dist/module/user/service/login.service.d.ts +0 -41
  996. package/dist/module/user/service/login.service.js +0 -242
  997. package/dist/module/user/service/login.service.js.map +0 -1
  998. package/dist/module/user/service/role.service.d.ts +0 -25
  999. package/dist/module/user/service/role.service.js +0 -154
  1000. package/dist/module/user/service/role.service.js.map +0 -1
  1001. package/dist/module/user/service/user-role-mapping.service.d.ts +0 -12
  1002. package/dist/module/user/service/user-role-mapping.service.js +0 -60
  1003. package/dist/module/user/service/user-role-mapping.service.js.map +0 -1
  1004. package/dist/module/user/service/user-session.service.d.ts +0 -31
  1005. package/dist/module/user/service/user-session.service.js +0 -161
  1006. package/dist/module/user/service/user-session.service.js.map +0 -1
  1007. package/dist/module/user/service/user.service.d.ts +0 -38
  1008. package/dist/module/user/service/user.service.js +0 -243
  1009. package/dist/module/user/service/user.service.js.map +0 -1
  1010. package/dist/module/user/user.module.d.ts +0 -2
  1011. package/dist/module/user/user.module.js +0 -78
  1012. package/dist/module/user/user.module.js.map +0 -1
  1013. package/src/migrations/1732612800000-AddEntityJsonGinIndex.ts +0 -41
  1014. package/src/module/auth/guards/role.guard.ts +0 -68
  1015. package/src/module/enterprise/controller/organization.controller.ts +0 -36
  1016. package/src/module/enterprise/enterprise.module.ts +0 -45
  1017. package/src/module/enterprise/entity/enterprise.entity.ts +0 -37
  1018. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +0 -13
  1019. package/src/module/enterprise/entity/organization.entity.ts +0 -92
  1020. package/src/module/enterprise/repository/enterprise.repository.ts +0 -31
  1021. package/src/module/enterprise/repository/organization.repository.ts +0 -26
  1022. package/src/module/enterprise/repository/school.repository.ts +0 -289
  1023. package/src/module/enterprise/service/brand.service.ts +0 -5
  1024. package/src/module/enterprise/service/enterprise.service.ts +0 -16
  1025. package/src/module/enterprise/service/organization-app-mapping.service.ts +0 -4
  1026. package/src/module/enterprise/service/organization.service.ts +0 -146
  1027. package/src/module/filter/service/flatjson-filter.service.ts +0 -903
  1028. package/src/module/filter/test/flatjson-filter.service.spec.ts +0 -415
  1029. package/src/module/lead/controller/lead.controller.ts +0 -30
  1030. package/src/module/lead/lead.module.ts +0 -14
  1031. package/src/module/lead/repository/lead.repository.ts +0 -41
  1032. package/src/module/lead/service/lead.service.ts +0 -54
  1033. package/src/module/meta/controller/app-master.controller.ts +0 -38
  1034. package/src/module/meta/entity/app-master.entity.ts +0 -37
  1035. package/src/module/meta/repository/app-master.repository.ts +0 -20
  1036. package/src/module/meta/service/app-master.service.ts +0 -37
  1037. package/src/module/meta/service/populate-meta.service.ts +0 -228
  1038. package/src/module/module/controller/menu.controller.ts +0 -15
  1039. package/src/module/module/controller/module-access.controller.ts +0 -133
  1040. package/src/module/module/entity/menu.entity.ts +0 -43
  1041. package/src/module/module/entity/module-access.entity.ts +0 -25
  1042. package/src/module/module/entity/module-action.entity.ts +0 -17
  1043. package/src/module/module/entity/module.entity.ts +0 -52
  1044. package/src/module/module/repository/menu.repository.ts +0 -186
  1045. package/src/module/module/repository/module-access.repository.ts +0 -344
  1046. package/src/module/module/service/menu.service.ts +0 -82
  1047. package/src/module/module/service/module-access.service.ts +0 -189
  1048. package/src/module/notification/controller/otp.controller.ts +0 -117
  1049. package/src/module/notification/repository/notification.repository.ts +0 -33
  1050. package/src/module/notification/service/otp.service.ts +0 -133
  1051. package/src/module/user/controller/login.controller.ts +0 -199
  1052. package/src/module/user/controller/user.controller.ts +0 -40
  1053. package/src/module/user/dto/create-user.dto.ts +0 -62
  1054. package/src/module/user/dto/update-user.dto.ts +0 -4
  1055. package/src/module/user/entity/role.entity.ts +0 -33
  1056. package/src/module/user/entity/user-session.entity.ts +0 -73
  1057. package/src/module/user/entity/user.entity.ts +0 -62
  1058. package/src/module/user/repository/role.repository.ts +0 -96
  1059. package/src/module/user/repository/user-role-mapping.repository.ts +0 -126
  1060. package/src/module/user/repository/user.repository.ts +0 -50
  1061. package/src/module/user/repository/userSession.repository.ts +0 -33
  1062. package/src/module/user/service/login.service.ts +0 -326
  1063. package/src/module/user/service/role.service.ts +0 -197
  1064. package/src/module/user/service/user-role-mapping.service.ts +0 -98
  1065. package/src/module/user/service/user-session.service.ts +0 -201
  1066. package/src/module/user/service/user.service.ts +0 -368
  1067. package/src/module/user/user.module.ts +0 -65
@@ -1,835 +1,993 @@
1
- import { BadRequestException, Injectable } from '@nestjs/common';
2
- import { STATUS_ACTIVE } from 'src/constant/global.constant';
3
- import { EntityManager, In } from 'typeorm';
4
- import { UserData } from 'src/module/user/entity/user.entity';
5
- import { MediaDataService } from './media-data.service';
6
- import { ResolverService } from './resolver.service';
7
- import { EntityMasterRepository } from '../repository/entity-master.repository';
8
- import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
9
- import { ConfigService } from '@nestjs/config';
10
-
11
- @Injectable()
12
- export class EntityDynamicService {
13
- constructor(
14
- private readonly entityManager: EntityManager,
15
- private readonly mediaDataService: MediaDataService,
16
- private readonly resolverService: ResolverService,
17
- private readonly entityMasterRepo: EntityMasterRepository,
18
- private readonly reflectionHelper: ReflectionHelper,
19
- private readonly configService: ConfigService,
20
- ) {}
21
-
22
- schema = this.configService.get('DB_SCHEMA');
23
-
24
- // -----------------------------
25
- async createEntity(
26
- entityType: string,
27
- entityData: Record<string, any>,
28
- loggedInUser: any,
29
- mainID?: number,
30
- ): Promise<any> {
31
- const organizationId = loggedInUser.organization_id;
32
- const enterprise_id = loggedInUser.enterprise_id;
33
-
34
- const tableName = await this.getTableName(entityType, enterprise_id);
35
- const validAttributes = await this.getAttributeCodes(
36
- entityType,
37
- enterprise_id,
38
- );
39
-
40
- // -------------------------------------------------------
41
- // AUTO fields
42
- // -------------------------------------------------------
43
- entityData.created_date = new Date();
44
-
45
- if (loggedInUser) {
46
- entityData.created_by = loggedInUser.id;
47
-
48
- if (!entityData.organization_id)
49
- entityData.organization_id = loggedInUser.organization_id;
50
-
51
- if (!entityData.enterprise_id)
52
- entityData.enterprise_id = loggedInUser.enterprise_id;
53
-
54
- if (!entityData.level_type)
55
- entityData.level_type = loggedInUser.level_type;
56
-
57
- if (!entityData.level_id) entityData.level_id = loggedInUser.level_id;
58
-
59
- if (!entityData.entity_type) entityData.entity_type = entityType;
60
- }
61
-
62
- // -------------------------------------------------------
63
- // STATUS
64
- // -------------------------------------------------------
65
- const listMasterItemsRepo =
66
- this.reflectionHelper.getRepoService('ListMasterItems');
67
- const statusList = listMasterItemsRepo.find({
68
- where: {
69
- code: STATUS_ACTIVE,
70
- organization_id: organizationId,
71
- },
72
- });
73
-
74
- if (!entityData.status) entityData.status = statusList[0]?.id;
75
-
76
- // -------------------------------------------------------
77
- // AUTO-CODE GENERATION (POSTGRES SAFE)
78
- // -------------------------------------------------------
79
- const entityMaster =
80
- await this.entityMasterRepo.getEntityByMappedEntityType(
81
- entityType,
82
- loggedInUser.enterprise_id,
83
- );
84
-
85
- if (!entityData.code && entityData.entity_type && entityMaster) {
86
- // Extract integer suffix
87
- // const repo = this.reflectionHelper.getRepoService(entityMaster.entity_data_class);
88
-
89
- const result = this.entityManager.query(
90
- `SELECT MAX(id) as seq_no
91
- FROM ${this.schema}.${entityMaster.db_table_name}`,
92
- );
93
-
94
- let maxSeq = Number(result[0]?.max_seq_no) || 0;
95
- maxSeq++;
96
- entityData.code = `${entityData.entity_type}${maxSeq}`;
97
- }
98
-
99
- // -------------------------------------------------------
100
- // Parent ID
101
- // -------------------------------------------------------
102
- if (mainID) {
103
- entityData.parent_id = mainID;
104
- }
105
-
106
- // -------------------------------------------------------
107
- // BYPASS COLUMNS
108
- // -------------------------------------------------------
109
- const bypassColumns = [
110
- 'created_date',
111
- 'created_by',
112
- 'organization_id',
113
- 'enterprise_id',
114
- 'level_type',
115
- 'level_id',
116
- 'status',
117
- 'entity_type',
118
- 'code',
119
- 'parent_id',
120
- ];
121
-
122
- for (const col of bypassColumns) {
123
- if (!validAttributes.some((a) => a.attribute_key === col)) {
124
- validAttributes.push({
125
- attribute_key: col,
126
- is_hidden: false,
127
- db_datatype: 'text',
128
- element_type: 'text',
129
- });
130
- }
131
- }
132
-
133
- // -------------------------------------------------------
134
- // BUILD INSERT QUERY (POSTGRES FORMAT)
135
- // -------------------------------------------------------
136
- const columns: string[] = [];
137
- const values: any[] = [];
138
- let idx = 1;
139
- const placeholders: string[] = [];
140
-
141
- for (const attr of validAttributes) {
142
- if (attr.attribute_key === 'id') continue;
143
-
144
- columns.push(attr.attribute_key);
145
- values.push(entityData[attr.attribute_key] ?? null);
146
- placeholders.push(`$${idx++}`);
147
- }
148
-
149
- const colList = columns.map((c) => `"${c}"`).join(', ');
150
- const placeholderList = placeholders.join(', ');
151
-
152
- const sql = `
153
- INSERT INTO ${this.schema}.${tableName} (${colList})
154
- VALUES (${placeholderList}) RETURNING id
155
- `;
156
-
157
- const result = await this.entityManager.query(sql, values);
158
- return result[0];
159
- }
160
-
161
- // ----------------------------- get entity with relations
162
-
163
- // ----------------------------- create entity with relations
164
- async createEntityWithRelation(
165
- entityType: string,
166
- data: Record<string, any>,
167
- loggedInUser: any,
168
- ): Promise<any> {
169
- const enterpriseId = loggedInUser.enterprise_id;
170
- const organizationId = loggedInUser.organization_id;
171
-
172
- const repo = this.reflectionHelper.getRepoService('EntityRelation');
173
-
174
- const getRelation = await repo.find({
175
- where: {
176
- enterprise_id: enterpriseId,
177
- source_entity_type: entityType,
178
- },
179
- });
180
-
181
- const { mappedEntities, ...mainData } = data;
182
-
183
- // create main entity
184
- const createdEntityData = await this.createEntity(
185
- entityType,
186
- mainData,
187
- loggedInUser,
188
- );
189
- const mainID = createdEntityData.insertId || createdEntityData.id;
190
-
191
- if (mappedEntities && getRelation.length > 0) {
192
- for (const relation of getRelation) {
193
- const targetEntityType = relation.target_entity_type;
194
- const relationType = relation.relation_type;
195
-
196
- if (!mappedEntities[targetEntityType]) continue;
197
-
198
- // normalize: always array
199
- const entityDataArray = Array.isArray(mappedEntities[targetEntityType])
200
- ? mappedEntities[targetEntityType]
201
- : [mappedEntities[targetEntityType]];
202
-
203
- for (const item of entityDataArray) {
204
- const itemWithRef = {
205
- ...item,
206
- entity_type: targetEntityType,
207
- };
208
-
209
- const createdRelatedEntity = await this.createEntity(
210
- targetEntityType,
211
- itemWithRef,
212
- loggedInUser,
213
- mainID, // this will pass for parent_id
214
- );
215
-
216
- const relationRepo =
217
- this.reflectionHelper.getRepoService('EntityRelationData');
218
-
219
- await relationRepo.save({
220
- organizationId: organizationId,
221
- enterprise_id: enterpriseId,
222
- source_entity_id: mainID,
223
- source_entity_type: entityType,
224
- target_entity_id: createdRelatedEntity.id,
225
- target_entity_type: targetEntityType,
226
- relation_type: relationType,
227
- });
228
- }
229
- }
230
- }
231
-
232
- return {
233
- mainEntity: {
234
- id: mainID,
235
- entityType,
236
- data: createdEntityData,
237
- },
238
- };
239
- }
240
-
241
- // ----------------------------- get entity with relations
242
- async getEntityWithRelation(
243
- entityType: string,
244
- id: number | string,
245
- loggedInUser: any,
246
- ): Promise<any> {
247
- const mainEntity = await this.getEntityByDataSource(
248
- entityType,
249
- id,
250
- loggedInUser,
251
- );
252
- const relationRepo = this.reflectionHelper.getRepoService('EntityRelation');
253
- const relatedEntityRepo =
254
- this.reflectionHelper.getRepoService('EntityRelationData');
255
-
256
- const relations = await relationRepo.find({
257
- where: {
258
- source_entity_type: entityType,
259
- enterprise_id: loggedInUser.enterprise_id,
260
- },
261
- });
262
-
263
- const targetTypes = relations.map((r) => r.target_entity_type);
264
-
265
- if (targetTypes.length === 0) {
266
- return {
267
- entity_type: entityType,
268
- ...mainEntity,
269
- };
270
- }
271
-
272
- const relatedEntities = await relatedEntityRepo.find({
273
- where: {
274
- source_entity_id: id,
275
- target_entity_type: In(targetTypes),
276
- },
277
- });
278
-
279
- // Format response to match create entity structure
280
- const response: any = {
281
- entity_type: entityType,
282
- ...mainEntity,
283
- };
284
-
285
- if (relatedEntities.length > 0) {
286
- response.mappedEntities = await this.formatMappedEntities(
287
- relatedEntities,
288
- loggedInUser,
289
- );
290
- }
291
-
292
- return response;
293
- }
294
-
295
- // ----------------------------- formatMappedEntities
296
- async formatMappedEntities(
297
- relatedEntities: any[],
298
- loggedInUser: any,
299
- ): Promise<any> {
300
- const mappedEntities: any = {};
301
-
302
- for (const relation of relatedEntities) {
303
- const targetEntityType = relation.target_entity_type;
304
- const targetEntityId = relation.target_entity_id;
305
-
306
- const entityData = await this.getEntity(
307
- targetEntityType,
308
- targetEntityId,
309
- loggedInUser,
310
- );
311
-
312
- if (!mappedEntities[targetEntityType]) {
313
- mappedEntities[targetEntityType] = [];
314
- }
315
-
316
- mappedEntities[targetEntityType].push(entityData);
317
- }
318
-
319
- return mappedEntities;
320
- }
321
-
322
- // ----------------------------- update with relations
323
-
324
- // ----------------------------- update entity with relations
325
- async updateEntityWithRelations(
326
- entityType: string,
327
- id: number | string,
328
- data: Record<string, any>,
329
- loggedInUser: any,
330
- ): Promise<any> {
331
- const organizationId = loggedInUser.organization_id;
332
- const enterpriseId = loggedInUser.enterprise_id;
333
- const { mappedEntities, ...mainData } = data;
334
-
335
- // Update main entity
336
- const updatedMainEntity = await this.updateEntity(
337
- entityType,
338
- id,
339
- mainData,
340
- loggedInUser,
341
- );
342
-
343
- const updatedRelations: Record<string, any> = {};
344
-
345
- if (mappedEntities) {
346
- const entityRelationRepo =
347
- this.reflectionHelper.getRepoService('EntityRelation');
348
- const getRelationDefs = await entityRelationRepo.find({
349
- where: {
350
- enterprise_id: enterpriseId,
351
- source_entity_type: entityType,
352
- },
353
- });
354
-
355
- for (const [targetEntityType, rawEntityData] of Object.entries(
356
- mappedEntities,
357
- )) {
358
- const relationDef = getRelationDefs.find(
359
- (r) => r.target_entity_type === targetEntityType,
360
- );
361
- if (!relationDef) continue;
362
-
363
- const relationType = relationDef.relation_type;
364
- const entityArray = Array.isArray(rawEntityData)
365
- ? rawEntityData
366
- : [rawEntityData];
367
-
368
- // Delete previous relations and related entities
369
- // Create/update new entities & relations
370
- const updatedEntities: any[] = [];
371
-
372
- for (const item of entityArray) {
373
- let targetEntityId;
374
- let entityData;
375
-
376
- if (item.id) {
377
- // Update existing entity
378
- await this.updateEntity(
379
- targetEntityType,
380
- item.id,
381
- item,
382
- loggedInUser,
383
- Number(id), // pass main entity id as parent_id
384
- );
385
- targetEntityId = item.id;
386
- entityData = await this.getEntity(
387
- targetEntityType,
388
- targetEntityId,
389
- loggedInUser,
390
- );
391
- } else {
392
- // Create new entity
393
- const createdEntity = await this.createEntity(
394
- targetEntityType,
395
- item,
396
- loggedInUser,
397
- Number(id), // pass main entity id as parent_id
398
- );
399
- targetEntityId = createdEntity.insertId || createdEntity.id;
400
- entityData = await this.getEntity(
401
- targetEntityType,
402
- targetEntityId,
403
- loggedInUser,
404
- );
405
-
406
- // Insert relation as per new entity created
407
- const entityRelationDataRepo =
408
- this.reflectionHelper.getRepoService('EntityRelationData');
409
- await entityRelationDataRepo.save({
410
- organizationId: organizationId,
411
- enterprise_id: enterpriseId,
412
- source_entity_id: id,
413
- source_entity_type: entityType,
414
- target_entity_id: targetEntityId,
415
- target_entity_type: targetEntityType,
416
- relation_type: relationType,
417
- });
418
- }
419
-
420
- if (relationType === 'ONE_TO_MANY') {
421
- updatedEntities.push(entityData);
422
- } else if (
423
- relationType === 'ONE_TO_ONE' ||
424
- relationType === 'MANY_TO_ONE'
425
- ) {
426
- updatedEntities[0] = entityData; // single object
427
- }
428
- }
429
-
430
- // Assign to response mappedEntities
431
- updatedRelations[targetEntityType] =
432
- relationType === 'ONE_TO_MANY' ? updatedEntities : updatedEntities[0];
433
- }
434
- }
435
-
436
- return {
437
- mainEntity: {
438
- id,
439
- entityType,
440
- data: updatedMainEntity,
441
- },
442
- relatedEntities: updatedRelations,
443
- };
444
- }
445
-
446
- // -----------------------------
447
- async updateEntity(
448
- entityType: string,
449
- id: number | string,
450
- entityData: Record<string, any>,
451
- loggedInUser: any,
452
- mainID?: number,
453
- ): Promise<any> {
454
- const enterprise_id = loggedInUser.enterprise_id;
455
-
456
- const tableName = await this.getTableName(entityType, enterprise_id);
457
- const validAttributes = await this.getAttributeCodes(
458
- entityType,
459
- enterprise_id,
460
- );
461
-
462
- const updates: string[] = [];
463
- const values: any[] = [];
464
- let idx = 1;
465
-
466
- // Auto fields
467
- entityData.modified_date = new Date();
468
- if (loggedInUser) {
469
- entityData.modified_by = loggedInUser.id;
470
-
471
- if (!entityData.organization_id && entityData.entity_type !== 'ORG')
472
- entityData.organization_id = loggedInUser.organization_id;
473
-
474
- if (!entityData.enterprise_id)
475
- entityData.enterprise_id = loggedInUser.enterprise_id;
476
- }
477
-
478
- if (mainID) {
479
- entityData.parent_id = mainID;
480
- }
481
-
482
- // Add bypass columns if needed
483
- const bypassColumns = [
484
- 'created_date',
485
- 'created_by',
486
- 'modified_date',
487
- 'modified_by',
488
- 'organization_id',
489
- 'enterprise_id',
490
- 'level_type',
491
- 'level_id',
492
- 'status',
493
- 'entity_type',
494
- 'code',
495
- 'parent_id',
496
- ];
497
-
498
- for (const col of bypassColumns) {
499
- if (!validAttributes.some((attr) => attr.attribute_key === col)) {
500
- validAttributes.push({
501
- attribute_key: col,
502
- db_datatype: 'text',
503
- element_type: 'text',
504
- is_hidden: false,
505
- });
506
- }
507
- }
508
-
509
- // Build SET clause
510
- for (const key of Object.keys(entityData)) {
511
- if (validAttributes.some((attr) => attr.attribute_key === key)) {
512
- updates.push(`${key} = $${idx++}`);
513
- values.push(entityData[key]);
514
- }
515
- }
516
-
517
- if (updates.length === 0) {
518
- throw new Error('No valid attributes to update.');
519
- }
520
-
521
- // WHERE clause placeholder
522
- const idPlaceholder = `$${idx}`;
523
- values.push(id);
524
-
525
- const updateQuery = `
526
- UPDATE ${this.schema}.${tableName}
527
- SET ${updates.join(', ')}
528
- WHERE id = ${idPlaceholder}
529
- `;
530
-
531
- return await this.entityManager.query(updateQuery, values);
532
- }
533
-
534
- async getEntityByDataSource(
535
- entityType: string,
536
- id: number | string,
537
- loggedInUser: any,
538
- ): Promise<any> {
539
- const enterprise_id = loggedInUser.enterprise_id;
540
-
541
- const dataSource = await this.getEntitySourceTableName(
542
- entityType,
543
- enterprise_id,
544
- );
545
- const validAttributes = await this.getAttributeCodes(
546
- entityType,
547
- enterprise_id,
548
- false,
549
- );
550
-
551
- const columns = validAttributes
552
- .map((attr) => `${attr.attribute_key}`)
553
- .join(', ');
554
- const selectQuery = `SELECT ${columns}
555
- FROM ${this.schema}.${dataSource}
556
- WHERE id = $1`;
557
-
558
- const result = await this.entityManager.query(selectQuery, [id]);
559
- if (!result.length) return null;
560
-
561
- const row = result[0];
562
-
563
- // Convert boolean columns (1/0) into true/false
564
- for (const attr of validAttributes) {
565
- if (
566
- attr.db_datatype == 'boolean' &&
567
- row[attr.attribute_key] !== undefined
568
- ) {
569
- row[attr.attribute_key] = row[attr.attribute_key] == 1 ? true : false;
570
- } else if (
571
- attr.element_type == 'upload' &&
572
- row[attr.attribute_key] !== undefined
573
- ) {
574
- row[attr.attribute_key] =
575
- row[attr.attribute_key] != null
576
- ? await this.mediaDataService.getMediaDownloadUrl(
577
- Number(row[attr.attribute_key]),
578
- loggedInUser,
579
- )
580
- : null;
581
- }
582
- }
583
-
584
- return row;
585
- }
586
-
587
- // -----------------------------
588
- //TODO : make it normal getEntity function make another function if for resolve data
589
- async getEntity(
590
- entityType: string,
591
- id: number | string,
592
- loggedInUser: any,
593
- ): Promise<any> {
594
- const enterprise_id = loggedInUser.enterprise_id;
595
-
596
- const entityMaster =
597
- await this.entityMasterRepo.getEntityByMappedEntityType(
598
- entityType,
599
- enterprise_id,
600
- );
601
- if (!entityMaster) return null;
602
-
603
- const validAttributes = await this.getAttributeCodes(
604
- entityType,
605
- enterprise_id,
606
- );
607
-
608
- // const entityRepo = this.reflectionHelper.getRepoService(entityMaster?.entity_data_class);
609
-
610
- const columns = validAttributes.map((attr) => `t.${attr.attribute_key}`);
611
-
612
- // const result = await entityRepo.find({
613
- // where: {
614
- // id: id
615
- // },
616
- // select: columns
617
- // });
618
- const selectQuery = `SELECT ${columns}
619
- FROM ${this.schema}.${entityMaster.db_table_name} t
620
- WHERE id = $1`;
621
-
622
- const result = await this.entityManager.query(selectQuery, [id]);
623
- if (!result.length) return null;
624
-
625
- const row = result[0];
626
-
627
- // Convert boolean columns (1/0) into true/false
628
- for (const attr of validAttributes) {
629
- if (
630
- attr.db_datatype == 'boolean' &&
631
- row[attr.attribute_key] !== undefined
632
- ) {
633
- row[attr.attribute_key] = row[attr.attribute_key] == 1 ? true : false;
634
- } else if (
635
- attr.element_type == 'upload' &&
636
- row[attr.attribute_key] !== undefined
637
- ) {
638
- row[attr.attribute_key] =
639
- row[attr.attribute_key] != null
640
- ? await this.mediaDataService.getMediaDownloadUrl(
641
- Number(row[attr.attribute_key]),
642
- loggedInUser,
643
- )
644
- : null;
645
- }
646
- }
647
-
648
- return row;
649
- }
650
-
651
- private async getEntitySourceTableName(
652
- entityType: string,
653
- enterprise_id: string,
654
- ): Promise<string> {
655
- const result = await this.entityMasterRepo.getEntityByMappedEntityType(
656
- entityType,
657
- enterprise_id,
658
- );
659
-
660
- if (!result) {
661
- console.log(`Entity type '${entityType}' not found in frm_entity_master`);
662
- throw new BadRequestException();
663
- }
664
-
665
- return result.data_source;
666
- }
667
-
668
- // -----------------------------
669
- private async getTableName(
670
- entityType: string,
671
- enterprise_id: string,
672
- ): Promise<string> {
673
- let entityMaster = await this.entityMasterRepo.getEntityByMappedEntityType(
674
- entityType,
675
- enterprise_id,
676
- );
677
-
678
- if (!entityMaster) {
679
- console.log(`Entity type '${entityType}' not found in frm_entity_master`);
680
- throw new BadRequestException();
681
- }
682
-
683
- return entityMaster.db_table_name;
684
- }
685
-
686
- private async getAttributeCodes(
687
- entityType: string,
688
- enterprise_id: string,
689
- isHidden = true,
690
- ) {
691
- const attributeMasterRepo =
692
- this.reflectionHelper.getRepoService('AttributeMaster');
693
-
694
- const qb = attributeMasterRepo
695
- .createQueryBuilder('fea')
696
- .select('fea.attribute_key', 'attribute_key')
697
- .addSelect('MAX(fea.db_datatype)', 'db_datatype')
698
- .addSelect('MAX(fea.element_type)', 'element_type')
699
- .addSelect('bool_or(fea.is_hidden)', 'is_hidden')
700
- .where('fea.mapped_entity_type = :entityType', { entityType })
701
- .andWhere('fea.enterprise_id = :enterprise_id', { enterprise_id });
702
-
703
- if (isHidden) {
704
- qb.andWhere('(fea.is_hidden IS NULL OR fea.is_hidden = false)');
705
- }
706
-
707
- qb.groupBy('fea.attribute_key');
708
-
709
- const result = await qb.getRawMany();
710
-
711
- return result.map((row: any) => ({
712
- attribute_key: row.attribute_key,
713
- db_datatype: row.db_datatype,
714
- element_type: row.element_type,
715
- is_hidden: row.is_hidden != null ? row.is_hidden === true : undefined,
716
- }));
717
- }
718
-
719
- private async deleteEntity(
720
- entityType: string,
721
- id: number | string,
722
- loggedInUser: any,
723
- ): Promise<any> {
724
- const enterprise_id = loggedInUser.enterprise_id;
725
-
726
- const tableName = await this.getTableName(entityType, enterprise_id);
727
-
728
- const deleteQuery = `DELETE
729
- FROM ${this.schema}.${tableName}
730
- WHERE id = $1`;
731
- const result = await this.entityManager.query(deleteQuery, [id]);
732
- return result;
733
- }
734
-
735
- // -----------------------------
736
-
737
- async getEntitiesDropdownList(
738
- loggedInUser: any,
739
- appcode?: string,
740
- ): Promise<any> {
741
- const entityMasters =
742
- await this.entityMasterRepo.findByEnterpriseIdAndAppCode(
743
- loggedInUser.enterprise_id,
744
- appcode,
745
- );
746
-
747
- let dropdown = [] as any;
748
- entityMasters.map((entityMaster) =>
749
- dropdown.push({
750
- label: entityMaster.name,
751
- value: entityMaster.mapped_entity_type,
752
- }),
753
- );
754
-
755
- return dropdown;
756
- }
757
-
758
- async getCode(entityType: string, loggedInUser: any): Promise<string> {
759
- const enterprise_id = loggedInUser.enterprise_id;
760
-
761
- // 1. Get db_table_name from entity master
762
-
763
- const result = await this.entityMasterRepo.getEntityByMappedEntityType(
764
- entityType,
765
- enterprise_id,
766
- );
767
-
768
- if (!result) {
769
- throw new Error(
770
- `Entity type '${entityType}' not found in frm_entity_master for enterprise '${enterprise_id}'`,
771
- );
772
- }
773
-
774
- const tableName = result.db_table_name;
775
-
776
- // 2. Get current max sequence number from that table
777
- const seqResult = await this.entityManager.query(
778
- `SELECT MAX(id) AS max_seq_no
779
- FROM ${tableName}
780
- WHERE entity_type = $1`,
781
- [entityType],
782
- );
783
-
784
- let maxSeqNo = seqResult?.[0]?.max_seq_no
785
- ? Number(seqResult[0].max_seq_no)
786
- : 0;
787
-
788
- maxSeqNo += 1;
789
-
790
- // 3. Return generated code
791
- return `${entityType}${maxSeqNo}`;
792
- }
793
-
794
- async getResolvedEntity(
795
- id: number,
796
- entity: string,
797
- loggedInUser: UserData,
798
- ): Promise<any> {
799
- const leadData = await this.getEntityWithRelation(entity, id, loggedInUser);
800
-
801
- const { mappedEntities, ...data } = leadData as any;
802
-
803
- const resolvedData = await this.resolverService.getResolvedData(
804
- loggedInUser,
805
- data,
806
- entity,
807
- );
808
-
809
- if (mappedEntities) {
810
- resolvedData.mappedEntities = {};
811
- for (const [entityType, entities] of Object.entries(mappedEntities)) {
812
- if (Array.isArray(entities)) {
813
- resolvedData.mappedEntities[entityType] = [];
814
- for (const item of entities) {
815
- const resolvedItem = await this.resolverService.getResolvedData(
816
- loggedInUser,
817
- item,
818
- entityType,
819
- );
820
- resolvedData.mappedEntities[entityType].push(resolvedItem);
821
- }
822
- } else {
823
- resolvedData.mappedEntities[entityType] =
824
- await this.resolverService.getResolvedData(
825
- loggedInUser,
826
- entities,
827
- entityType,
828
- );
829
- }
830
- }
831
- }
832
-
833
- return resolvedData;
834
- }
835
- }
1
+ import { BadRequestException, Injectable } from '@nestjs/common';
2
+ import { STATUS_ACTIVE } from 'src/constant/global.constant';
3
+ import { EntityManager, In } from 'typeorm';
4
+ import { UserData } from 'src/module/auth/dto/user.dto';
5
+ import { MediaDataService } from './media-data.service';
6
+ import { EntityMasterRepository } from '../repository/entity-master.repository';
7
+ import { ConfigService } from '@nestjs/config';
8
+ import { EntityServiceImpl } from './entity-service-impl.service';
9
+ import { EAVService } from '../../eav/service/eav.service';
10
+ import { AttributeStorageType } from '../../../constant/attribute.constant';
11
+ import { StorageType } from '../../../constant/entity.constant';
12
+
13
+ @Injectable()
14
+ export class EntityDynamicService extends EntityServiceImpl {
15
+ constructor(
16
+ private readonly entityManager: EntityManager,
17
+ private readonly mediaDataService: MediaDataService,
18
+ private readonly entityMasterRepo: EntityMasterRepository,
19
+ private readonly configService: ConfigService,
20
+ private readonly eavService: EAVService,
21
+ ) {
22
+ super();
23
+ }
24
+
25
+ schema = this.configService.get('DB_SCHEMA');
26
+
27
+ // -----------------------------
28
+ async createEntityData(
29
+ entityType: string,
30
+ entityData: Record<string, any>,
31
+ loggedInUser: any,
32
+ mainID?: number,
33
+ ): Promise<any> {
34
+ const enterprise_id = loggedInUser.enterprise_id;
35
+ const entityMaster = await this.entityMasterRepo.getEntityByMappedEntityType(entityType, loggedInUser.enterprise_id);
36
+
37
+ if (!entityMaster) {
38
+ throw new BadRequestException(`Entity With ${entityType} entity type not found`);
39
+ }
40
+ let tableName: string;
41
+ if (StorageType.SELF === entityMaster.storage_type) {
42
+ tableName = entityMaster.db_table_name;
43
+ } else {
44
+ tableName = 'frm_entity_dynamic';
45
+ }
46
+
47
+ const validAttributes = await this.getAttributeCodes(
48
+ entityType,
49
+ enterprise_id,
50
+ );
51
+
52
+ // -------------------------------------------------------
53
+ // AUTO fields
54
+ // -------------------------------------------------------
55
+ entityData.created_date = new Date();
56
+
57
+ if (loggedInUser) {
58
+ entityData.created_by = loggedInUser.id;
59
+
60
+ if (!entityData.enterprise_id)
61
+ entityData.enterprise_id = loggedInUser.enterprise_id;
62
+
63
+ if (!entityData.level_type)
64
+ entityData.level_type = loggedInUser.level_type;
65
+
66
+ if (!entityData.level_id) entityData.level_id = loggedInUser.level_id;
67
+
68
+ if (!entityData.entity_type) entityData.entity_type = entityType;
69
+ }
70
+
71
+ // -------------------------------------------------------
72
+ // STATUS
73
+ // -------------------------------------------------------
74
+ const listMasterItemsRepo =
75
+ this.reflectionHelper.getRepoService('ListMasterItems');
76
+ const statusList = listMasterItemsRepo.find({
77
+ where: {
78
+ code: STATUS_ACTIVE,
79
+ enterprise_id: enterprise_id,
80
+ },
81
+ });
82
+
83
+ if (!entityData.status) entityData.status = statusList[0]?.id;
84
+
85
+ // -------------------------------------------------------
86
+ // AUTO-CODE GENERATION (POSTGRES SAFE)
87
+ // -------------------------------------------------------
88
+
89
+ const maxSeqResult = this.entityManager.query(
90
+ `SELECT MAX(id) as seq_no
91
+ FROM ${this.schema}.${tableName}`,
92
+ );
93
+
94
+ let maxSeq = Number(maxSeqResult[0]?.seq_no) || 0;
95
+ maxSeq++;
96
+ entityData.code = `${entityData.entity_type}${maxSeq}`;
97
+
98
+
99
+ // -------------------------------------------------------
100
+ // Parent ID
101
+ // -------------------------------------------------------
102
+ if (mainID) {
103
+ entityData.parent_id = mainID;
104
+ }
105
+
106
+ // -------------------------------------------------------
107
+ // BYPASS COLUMNS
108
+ // -------------------------------------------------------
109
+ const bypassColumns = [
110
+ 'created_date',
111
+ 'created_by',
112
+ 'enterprise_id',
113
+ 'level_type',
114
+ 'level_id',
115
+ 'status',
116
+ 'entity_type',
117
+ 'code',
118
+ 'parent_id',
119
+ ];
120
+
121
+ for (const col of bypassColumns) {
122
+ if (!validAttributes.some((a) => a.attribute_key === col)) {
123
+ validAttributes.push({
124
+ attribute_key: col,
125
+ is_hidden: false,
126
+ db_datatype: 'text',
127
+ element_type: 'text',
128
+ storage_type: AttributeStorageType.DB_COL,
129
+ });
130
+ }
131
+ }
132
+
133
+ // -------------------------------------------------------
134
+ // BUILD INSERT QUERY (POSTGRES FORMAT)
135
+ // -------------------------------------------------------
136
+ const columns: string[] = [];
137
+ const values: any[] = [];
138
+ let idx = 1;
139
+ const placeholders: string[] = [];
140
+ const eavAttributes: any[] = [];
141
+
142
+ for (const attr of validAttributes) {
143
+ if (attr.attribute_key === 'id' && !entityData.id) continue;
144
+
145
+ if (attr.storage_type.toLowerCase() === AttributeStorageType.EAV.toLowerCase()) {
146
+ if (entityData[attr.attribute_key] !== undefined) {
147
+ eavAttributes.push({
148
+ key: attr.attribute_key,
149
+ value: entityData[attr.attribute_key],
150
+ data_type: attr.db_datatype,
151
+ });
152
+ }
153
+ } else {
154
+ columns.push(attr.attribute_key);
155
+ values.push(entityData[attr.attribute_key] ?? null);
156
+ placeholders.push(`$${idx++}`);
157
+ }
158
+ }
159
+
160
+ const colList = columns.map((c) => `"${c}"`).join(', ');
161
+ const placeholderList = placeholders.join(', ');
162
+
163
+
164
+ const sql = `
165
+ INSERT INTO ${this.schema}.${tableName} (${colList})
166
+ VALUES (${placeholderList}) RETURNING *
167
+ `;
168
+
169
+ const result = await this.entityManager.query(sql, values);
170
+ const newId = result[0]?.id;
171
+
172
+ // Save EAV attributes
173
+ if (newId && eavAttributes.length > 0) {
174
+ for (const eavAttr of eavAttributes) {
175
+ if (this.eavService.isTypeSupported(eavAttr.data_type)) {
176
+ await this.eavService.create(
177
+ eavAttr.data_type,
178
+ {
179
+ entity_type: entityType,
180
+ entity_id: newId,
181
+ key: eavAttr.key,
182
+ value: eavAttr.value,
183
+ },
184
+ loggedInUser?.id,
185
+ );
186
+ }
187
+ }
188
+ }
189
+
190
+ return result[0];
191
+ }
192
+
193
+ // ----------------------------- get entity with relations
194
+
195
+ // ----------------------------- create entity with relations
196
+ async createEntity(
197
+ data: Record<string, any>,
198
+ loggedInUser: any,
199
+ ): Promise<any> {
200
+ const entityType = data.entity_type;
201
+ const enterpriseId = loggedInUser.enterprise_id;
202
+
203
+ const repo = this.reflectionHelper.getRepoService('EntityRelation');
204
+
205
+ const getRelation = await repo.find({
206
+ where: {
207
+ enterprise_id: enterpriseId,
208
+ source_entity_type: entityType,
209
+ },
210
+ });
211
+
212
+ const { mappedEntities, ...mainData } = data;
213
+
214
+ // create main entity
215
+ const createdEntityData = await this.createEntityData(
216
+ entityType,
217
+ mainData,
218
+ loggedInUser,
219
+ );
220
+ const mainID = createdEntityData.insertId || createdEntityData.id;
221
+
222
+ if (mappedEntities && getRelation.length > 0) {
223
+ for (const relation of getRelation) {
224
+ const targetEntityType = relation.target_entity_type;
225
+ const relationType = relation.relation_type;
226
+
227
+ if (!mappedEntities[targetEntityType]) continue;
228
+
229
+ // normalize: always array
230
+ const entityDataArray = Array.isArray(mappedEntities[targetEntityType])
231
+ ? mappedEntities[targetEntityType]
232
+ : [mappedEntities[targetEntityType]];
233
+
234
+ for (const item of entityDataArray) {
235
+ const itemWithRef = {
236
+ ...item,
237
+ entity_type: targetEntityType,
238
+ };
239
+
240
+ const createdRelatedEntity = await this.createEntityData(
241
+ targetEntityType,
242
+ itemWithRef,
243
+ loggedInUser,
244
+ mainID, // this will pass for parent_id
245
+ );
246
+
247
+ const relationRepo =
248
+ this.reflectionHelper.getRepoService('EntityRelationData');
249
+
250
+ await relationRepo.save({
251
+ enterprise_id: enterpriseId,
252
+ source_entity_id: mainID,
253
+ source_entity_type: entityType,
254
+ target_entity_id: createdRelatedEntity.id,
255
+ target_entity_type: targetEntityType,
256
+ relation_type: relationType,
257
+ });
258
+ }
259
+ }
260
+ }
261
+
262
+ return {
263
+ mainEntity: {
264
+ id: mainID,
265
+ entityType,
266
+ data: createdEntityData,
267
+ },
268
+ };
269
+ }
270
+
271
+ // ----------------------------- get entity with relations
272
+ async getEntityData(
273
+ entityType: string,
274
+ id: number | string,
275
+ loggedInUser: any,
276
+ resolved?:boolean
277
+ ): Promise<any> {
278
+ let mainEntity = await this.getEntityByDataSource(
279
+ entityType,
280
+ id,
281
+ loggedInUser,
282
+ );
283
+
284
+ if(resolved) {
285
+ mainEntity = await this.resolverService.getResolvedData(loggedInUser, mainEntity, entityType);
286
+ }
287
+
288
+ const relationRepo = this.reflectionHelper.getRepoService('EntityRelation');
289
+ const relatedEntityRepo =
290
+ this.reflectionHelper.getRepoService('EntityRelationData');
291
+
292
+ const relations = await relationRepo.find({
293
+ where: {
294
+ source_entity_type: entityType,
295
+ enterprise_id: loggedInUser.enterprise_id,
296
+ },
297
+ });
298
+
299
+ const targetTypes = relations.map((r) => r.target_entity_type);
300
+
301
+ if (targetTypes.length === 0) {
302
+ return {
303
+ entity_type: entityType,
304
+ ...mainEntity,
305
+ };
306
+ }
307
+
308
+ const relatedEntities = await relatedEntityRepo.find({
309
+ where: {
310
+ source_entity_id: id,
311
+ target_entity_type: In(targetTypes),
312
+ },
313
+ });
314
+
315
+ // Format response to match create entity structure
316
+ const response: any = {
317
+ entity_type: entityType,
318
+ ...mainEntity,
319
+ };
320
+
321
+ if (relatedEntities.length > 0) {
322
+ response.mappedEntities = await this.formatMappedEntities(
323
+ relatedEntities,
324
+ loggedInUser,
325
+ resolved
326
+ );
327
+ }
328
+
329
+ return response;
330
+ }
331
+
332
+ // ----------------------------- formatMappedEntities
333
+ async formatMappedEntities(
334
+ relatedEntities: any[],
335
+ loggedInUser: any,
336
+ resolved?:boolean
337
+ ): Promise<any> {
338
+ const mappedEntities: any = {};
339
+
340
+ for (const relation of relatedEntities) {
341
+ const targetEntityType = relation.target_entity_type;
342
+ const targetEntityId = relation.target_entity_id;
343
+
344
+ const entityData = await this.getEntityData(
345
+ targetEntityType,
346
+ targetEntityId,
347
+ loggedInUser,
348
+ resolved
349
+ );
350
+
351
+ if (!mappedEntities[targetEntityType]) {
352
+ mappedEntities[targetEntityType] = [];
353
+ }
354
+
355
+ mappedEntities[targetEntityType].push(entityData);
356
+ }
357
+
358
+ return mappedEntities;
359
+ }
360
+
361
+ // ----------------------------- update with relations
362
+
363
+ // ----------------------------- update entity with relations
364
+ async updateEntity(
365
+ data: Record<string, any>,
366
+ loggedInUser: any,
367
+ ): Promise<any> {
368
+ const entityType = data.entity_type;
369
+ const enterpriseId = loggedInUser.enterprise_id;
370
+ const { mappedEntities, ...mainData } = data;
371
+
372
+ // Update main entity
373
+ const updatedMainEntity = await this.updateEntityData(
374
+ entityType,
375
+ data.id,
376
+ mainData,
377
+ loggedInUser,
378
+ );
379
+
380
+ const updatedRelations: Record<string, any> = {};
381
+
382
+ if (mappedEntities) {
383
+ const entityRelationRepo =
384
+ this.reflectionHelper.getRepoService('EntityRelation');
385
+ const getRelationDefs = await entityRelationRepo.find({
386
+ where: {
387
+ enterprise_id: enterpriseId,
388
+ source_entity_type: entityType,
389
+ },
390
+ });
391
+
392
+ for (const [targetEntityType, rawEntityData] of Object.entries(
393
+ mappedEntities,
394
+ )) {
395
+ const relationDef = getRelationDefs.find(
396
+ (r) => r.target_entity_type === targetEntityType,
397
+ );
398
+ if (!relationDef) continue;
399
+
400
+ const relationType = relationDef.relation_type;
401
+ const entityArray = Array.isArray(rawEntityData)
402
+ ? rawEntityData
403
+ : [rawEntityData];
404
+
405
+ // Delete previous relations and related entities
406
+ // Create/update new entities & relations
407
+ const updatedEntities: any[] = [];
408
+
409
+ for (const item of entityArray) {
410
+ let targetEntityId;
411
+ let entityData;
412
+
413
+ if (item.id) {
414
+ // Update existing entity
415
+ await this.updateEntityData(
416
+ targetEntityType,
417
+ item.id,
418
+ item,
419
+ loggedInUser,
420
+ Number(data.id), // pass main entity id as parent_id
421
+ );
422
+ targetEntityId = item.id;
423
+ entityData = await this.getEntity(
424
+ targetEntityType,
425
+ targetEntityId,
426
+ loggedInUser,
427
+ );
428
+ } else {
429
+ // Create new entity
430
+ const createdEntity = await this.createEntityData(
431
+ targetEntityType,
432
+ item,
433
+ loggedInUser,
434
+ Number(data.id), // pass main entity id as parent_id
435
+ );
436
+ targetEntityId = createdEntity.insertId || createdEntity.id;
437
+ entityData = await this.getEntity(
438
+ targetEntityType,
439
+ targetEntityId,
440
+ loggedInUser,
441
+ );
442
+
443
+ // Insert relation as per new entity created
444
+ const entityRelationDataRepo =
445
+ this.reflectionHelper.getRepoService('EntityRelationData');
446
+ await entityRelationDataRepo.save({
447
+ enterprise_id: enterpriseId,
448
+ source_entity_id: data.id,
449
+ source_entity_type: entityType,
450
+ target_entity_id: targetEntityId,
451
+ target_entity_type: targetEntityType,
452
+ relation_type: relationType,
453
+ });
454
+ }
455
+
456
+ if (relationType === 'ONE_TO_MANY') {
457
+ updatedEntities.push(entityData);
458
+ } else if (
459
+ relationType === 'ONE_TO_ONE' ||
460
+ relationType === 'MANY_TO_ONE'
461
+ ) {
462
+ updatedEntities[0] = entityData; // single object
463
+ }
464
+ }
465
+
466
+ // Assign to response mappedEntities
467
+ updatedRelations[targetEntityType] =
468
+ relationType === 'ONE_TO_MANY' ? updatedEntities : updatedEntities[0];
469
+ }
470
+ }
471
+
472
+ return {
473
+ mainEntity: {
474
+ id: data.id,
475
+ entityType,
476
+ data: updatedMainEntity,
477
+ },
478
+ relatedEntities: updatedRelations,
479
+ };
480
+ }
481
+
482
+ // -----------------------------
483
+ async updateEntityData(
484
+ entityType: string,
485
+ id: number | string,
486
+ entityData: Record<string, any>,
487
+ loggedInUser: any,
488
+ mainID?: number,
489
+ ): Promise<any> {
490
+ const enterprise_id = loggedInUser.enterprise_id;
491
+
492
+ const tableName = await this.getTableName(entityType, enterprise_id);
493
+ const validAttributes = await this.getAttributeCodes(
494
+ entityType,
495
+ enterprise_id,
496
+ );
497
+
498
+ const updates: string[] = [];
499
+ const values: any[] = [];
500
+ let idx = 1;
501
+
502
+ // Auto fields
503
+ entityData.modified_date = new Date();
504
+ if (loggedInUser) {
505
+ entityData.modified_by = loggedInUser.id;
506
+
507
+ if (!entityData.enterprise_id)
508
+ entityData.enterprise_id = loggedInUser.enterprise_id;
509
+
510
+ if (!entityData.level_type)
511
+ entityData.level_type = loggedInUser.level_type;
512
+
513
+ if (!entityData.level_id) entityData.level_id = loggedInUser.level_id;
514
+
515
+ if (!entityData.entity_type) entityData.entity_type = entityType;
516
+ }
517
+
518
+ if (mainID) {
519
+ entityData.parent_id = mainID;
520
+ }
521
+
522
+ // Add bypass columns if needed
523
+ const bypassColumns = [
524
+ 'created_date',
525
+ 'created_by',
526
+ 'modified_date',
527
+ 'modified_by',
528
+ 'enterprise_id',
529
+ 'level_type',
530
+ 'level_id',
531
+ 'status',
532
+ 'entity_type',
533
+ 'code',
534
+ 'parent_id',
535
+ ];
536
+
537
+ for (const col of bypassColumns) {
538
+ if (!validAttributes.some((attr) => attr.attribute_key === col)) {
539
+ validAttributes.push({
540
+ attribute_key: col,
541
+ db_datatype: 'text',
542
+ element_type: 'text',
543
+ is_hidden: false,
544
+ storage_type: AttributeStorageType.DB_COL,
545
+ });
546
+ }
547
+ }
548
+
549
+ const eavAttributes: any[] = [];
550
+
551
+ // Build SET clause
552
+ for (const key of Object.keys(entityData)) {
553
+ const attr = validAttributes.find((attr) => attr.attribute_key === key);
554
+ if (attr) {
555
+ if (attr.storage_type.toLowerCase() === AttributeStorageType.EAV.toLowerCase()) {
556
+ eavAttributes.push({
557
+ key: attr.attribute_key,
558
+ value: entityData[key],
559
+ data_type: attr.db_datatype,
560
+ });
561
+ } else {
562
+ updates.push(`${key} = $${idx++}`);
563
+ values.push(entityData[key]);
564
+ }
565
+ }
566
+ }
567
+
568
+ if (updates.length === 0 && eavAttributes.length === 0) {
569
+ throw new Error('No valid attributes to update.');
570
+ }
571
+
572
+ let result;
573
+
574
+ if (updates.length > 0) {
575
+ // WHERE clause placeholder
576
+ const idPlaceholder = `$${idx}`;
577
+ values.push(id);
578
+
579
+ const updateQuery = `
580
+ UPDATE ${this.schema}.${tableName}
581
+ SET ${updates.join(', ')}
582
+ WHERE id = ${idPlaceholder}
583
+ `;
584
+
585
+ result = await this.entityManager.query(updateQuery, values);
586
+ }
587
+
588
+ // Process EAV Updates
589
+ if (eavAttributes.length > 0) {
590
+ for (const eavAttr of eavAttributes) {
591
+ if (this.eavService.isTypeSupported(eavAttr.data_type)) {
592
+ await this.eavService.upsert(
593
+ eavAttr.data_type,
594
+ {
595
+ entity_type: entityType,
596
+ entity_id: id,
597
+ key: eavAttr.key,
598
+ value: eavAttr.value,
599
+ },
600
+ loggedInUser?.id,
601
+ );
602
+ }
603
+ }
604
+ }
605
+
606
+ return result || { message: 'EAV updated' };
607
+ }
608
+
609
+ async getEntityByDataSource(
610
+ entityType: string,
611
+ id: number | string,
612
+ loggedInUser: any,
613
+ ): Promise<any> {
614
+ const enterprise_id = loggedInUser.enterprise_id;
615
+
616
+ const entityMaster = await this.entityMasterService.getEntityData(entityType, loggedInUser);
617
+
618
+ let dataSource: string;
619
+ if (StorageType.SELF === entityMaster.storage_type) {
620
+ dataSource = entityMaster.db_table_name;
621
+ } else {
622
+ dataSource = 'frm_entity_dynamic';
623
+ }
624
+
625
+ const validAttributes = await this.getAttributeCodes(
626
+ entityType,
627
+ enterprise_id,
628
+ false,
629
+ );
630
+
631
+ // Filter out EAV attributes from SQL query
632
+ const dbColumns = validAttributes.filter(attr => attr.storage_type !== AttributeStorageType.EAV);
633
+ const columns = dbColumns
634
+ .map((attr) => `"${attr.attribute_key}"`)
635
+ .join(', ');
636
+
637
+ // Add id if not present (required)
638
+ // Note: If columns is empty (only EAV attributes), we still need to select something.
639
+ let selectColumns = columns;
640
+ if (!columns) {
641
+ selectColumns = 'id';
642
+ } else if (!dbColumns.some(c => c.attribute_key === 'id')) {
643
+ selectColumns += ', id';
644
+ }
645
+
646
+ const selectQuery = `SELECT ${selectColumns}
647
+ FROM ${this.schema}.${dataSource}
648
+ WHERE id = $1`;
649
+
650
+ const result = await this.entityManager.query(selectQuery, [id]);
651
+ if (!result.length) return null;
652
+
653
+ const row = result[0];
654
+
655
+ // Fetch EAV attributes
656
+ const eavAttributes = validAttributes.filter(attr => attr.storage_type === AttributeStorageType.EAV);
657
+ if (eavAttributes.length > 0) {
658
+ for (const attr of eavAttributes) {
659
+ if (this.eavService.isTypeSupported(attr.db_datatype)) {
660
+ const eavData = await this.eavService.findOne(attr.db_datatype, {
661
+ entity_type: entityType,
662
+ entity_id: id,
663
+ key: attr.attribute_key,
664
+ });
665
+
666
+ if (eavData) {
667
+ row[attr.attribute_key] = eavData.value;
668
+ }
669
+ }
670
+ }
671
+ }
672
+
673
+ // Convert boolean columns (1/0) into true/false
674
+ for (const attr of validAttributes) {
675
+ if (
676
+ attr.db_datatype == 'boolean' &&
677
+ row[attr.attribute_key] !== undefined
678
+ ) {
679
+ row[attr.attribute_key] = row[attr.attribute_key] == 1 ? true : false;
680
+ } else if (
681
+ attr.element_type == 'upload' &&
682
+ row[attr.attribute_key] !== undefined
683
+ ) {
684
+ row[attr.attribute_key] =
685
+ row[attr.attribute_key] != null
686
+ ? await this.mediaDataService.getMediaDownloadUrl(
687
+ Number(row[attr.attribute_key]),
688
+ loggedInUser,
689
+ )
690
+ : null;
691
+ }
692
+ }
693
+
694
+ return row;
695
+ }
696
+
697
+ // -----------------------------
698
+ //TODO : make it normal getEntity function make another function if for resolve data
699
+ async getEntity(
700
+ entityType: string,
701
+ id: number | string,
702
+ loggedInUser: any,
703
+ ): Promise<any> {
704
+ const enterprise_id = loggedInUser.enterprise_id;
705
+
706
+ const entityMaster = await this.entityMasterRepo.getEntityByMappedEntityType(entityType, enterprise_id);
707
+ if (!entityMaster) return null;
708
+
709
+ const validAttributes = await this.getAttributeCodes(
710
+ entityType,
711
+ enterprise_id,
712
+ );
713
+
714
+ // const entityRepo = this.reflectionHelper.getRepoService(entityMaster?.entity_data_class);
715
+
716
+ // Filter out EAV attributes from SQL query
717
+ const dbColumns = validAttributes.filter(attr => attr.storage_type !== AttributeStorageType.EAV);
718
+ const columns = dbColumns.map(attr => `t.${attr.attribute_key}`);
719
+
720
+ // Add id if not present (required)
721
+ if (!columns.some(c => c.includes('.id'))) {
722
+ columns.push('t.id');
723
+ }
724
+
725
+ // const result = await entityRepo.find({
726
+ // where: {
727
+ // id: id
728
+ // },
729
+ // select: columns
730
+ // });
731
+ const selectQuery = `SELECT ${columns.join(', ')}
732
+ FROM ${this.schema}.${entityMaster.db_table_name} t
733
+ WHERE id = $1`;
734
+
735
+ const result = await this.entityManager.query(selectQuery, [id]);
736
+ if (!result.length) return null;
737
+
738
+ const row = result[0];
739
+
740
+ // Fetch EAV attributes
741
+ const eavAttributes = validAttributes.filter(attr => attr.storage_type === AttributeStorageType.EAV);
742
+ if (eavAttributes.length > 0) {
743
+ for (const attr of eavAttributes) {
744
+ if (this.eavService.isTypeSupported(attr.db_datatype)) {
745
+ const eavData = await this.eavService.findOne(attr.db_datatype, {
746
+ entity_type: entityType,
747
+ entity_id: id,
748
+ key: attr.attribute_key,
749
+ });
750
+
751
+ if (eavData) {
752
+ row[attr.attribute_key] = eavData.value;
753
+ }
754
+ }
755
+ }
756
+ }
757
+
758
+ // Convert boolean columns (1/0) into true/false
759
+ for (const attr of validAttributes) {
760
+ if (
761
+ attr.db_datatype == 'boolean' &&
762
+ row[attr.attribute_key] !== undefined
763
+ ) {
764
+ row[attr.attribute_key] = row[attr.attribute_key] == 1 ? true : false;
765
+ } else if (
766
+ attr.element_type == 'upload' &&
767
+ row[attr.attribute_key] !== undefined
768
+ ) {
769
+ row[attr.attribute_key] =
770
+ row[attr.attribute_key] != null
771
+ ? await this.mediaDataService.getMediaDownloadUrl(
772
+ Number(row[attr.attribute_key]),
773
+ loggedInUser,
774
+ )
775
+ : null;
776
+ }
777
+ }
778
+
779
+ return row;
780
+ }
781
+
782
+ private async getEntitySourceTableName(
783
+ entityType: string,
784
+ enterprise_id: string,
785
+ ): Promise<string> {
786
+ const result = await this.entityMasterRepo.getEntityByMappedEntityType(
787
+ entityType,
788
+ enterprise_id,
789
+ );
790
+
791
+ if (!result) {
792
+ console.log(`Entity type '${entityType}' not found in frm_entity_master`);
793
+ throw new BadRequestException();
794
+ }
795
+
796
+ return result.data_source;
797
+ }
798
+
799
+ // -----------------------------
800
+ private async getTableName(
801
+ entityType: string,
802
+ enterprise_id: string,
803
+ ): Promise<string> {
804
+ let entityMaster = await this.entityMasterRepo.getEntityByMappedEntityType(
805
+ entityType,
806
+ enterprise_id,
807
+ );
808
+
809
+ if (!entityMaster) {
810
+ console.log(`Entity type '${entityType}' not found in frm_entity_master`);
811
+ throw new BadRequestException();
812
+ }
813
+
814
+ if (entityMaster.storage_type === StorageType.SELF) {
815
+ return entityMaster.db_table_name;
816
+ } else {
817
+ return 'frm_entity_dynamic';
818
+ }
819
+ }
820
+
821
+ private async getAttributeCodes(
822
+ entityType: string,
823
+ enterprise_id: string,
824
+ isHidden = true,
825
+ ) {
826
+ const attributeMasterRepo =
827
+ this.reflectionHelper.getRepoService('AttributeMaster');
828
+
829
+ const qb = attributeMasterRepo
830
+ .createQueryBuilder('fea')
831
+ .select('fea.attribute_key', 'attribute_key')
832
+ .addSelect('MAX(fea.db_datatype)', 'db_datatype')
833
+ .addSelect('MAX(fea.element_type)', 'element_type')
834
+ .addSelect('MAX(fea.storage_type)', 'storage_type')
835
+ .addSelect('bool_or(fea.is_hidden)', 'is_hidden')
836
+ .where('fea.mapped_entity_type = :entityType', { entityType })
837
+ .andWhere('fea.enterprise_id = :enterprise_id', { enterprise_id });
838
+
839
+ if (isHidden) {
840
+ qb.andWhere('(fea.is_hidden IS NULL OR fea.is_hidden = false)');
841
+ }
842
+
843
+ qb.groupBy('fea.attribute_key');
844
+
845
+ const result = await qb.getRawMany();
846
+
847
+ return result.map((row: any) => ({
848
+ attribute_key: row.attribute_key,
849
+ db_datatype: row.db_datatype,
850
+ element_type: row.element_type,
851
+ storage_type: row.storage_type,
852
+ is_hidden: row.is_hidden != null ? row.is_hidden === true : undefined,
853
+ }));
854
+ }
855
+
856
+ async deleteEntity(
857
+ entityType: string,
858
+ id: number | string,
859
+ loggedInUser: any,
860
+ ): Promise<any> {
861
+ const enterprise_id = loggedInUser.enterprise_id;
862
+
863
+ const tableName = await this.getTableName(entityType, enterprise_id);
864
+
865
+ // Delete EAV records first
866
+ const validAttributes = await this.getAttributeCodes(entityType, enterprise_id, false);
867
+ const eavAttributes = validAttributes.filter(attr => attr.storage_type === AttributeStorageType.EAV);
868
+
869
+ if (eavAttributes.length > 0) {
870
+ // Group by data type to minimize calls
871
+ const dataTypes = [...new Set(eavAttributes.map(attr => attr.db_datatype))];
872
+
873
+ for (const dataType of dataTypes) {
874
+ if (this.eavService.isTypeSupported(dataType)) {
875
+ // We need to delete all attributes for this entity_id and data source
876
+ // Since delete accepts key, we iterate over keys or finding a way to delete all for entity
877
+ // The current EAV service delete method requires a key.
878
+ // Ideally EAV service should support delete by entity_id alone, but sticking to interface:
879
+ const attrsOfType = eavAttributes.filter(attr => attr.db_datatype === dataType);
880
+ for (const attr of attrsOfType) {
881
+ await this.eavService.delete(dataType, {
882
+ entity_type: entityType,
883
+ entity_id: id,
884
+ key: attr.attribute_key,
885
+ });
886
+ }
887
+ }
888
+ }
889
+ }
890
+
891
+ const deleteQuery = `DELETE
892
+ FROM ${this.schema}.${tableName}
893
+ WHERE id = $1`;
894
+ const result = await this.entityManager.query(deleteQuery, [id]);
895
+ return result;
896
+ }
897
+
898
+ // -----------------------------
899
+
900
+ async getEntitiesDropdownList(
901
+ loggedInUser: any,
902
+ appcode?: string,
903
+ ): Promise<any> {
904
+
905
+ const entityMasters = await this.entityMasterRepo.findByEnterpriseIdAndAppCode(loggedInUser.enterprise_id, appcode);
906
+
907
+ let dropdown = [] as any;
908
+ entityMasters.map(entityMaster => dropdown.push({
909
+ label: entityMaster.name,
910
+ value: entityMaster.mapped_entity_type,
911
+ }));
912
+
913
+ return dropdown;
914
+ }
915
+
916
+ async getCode(entityType: string, loggedInUser: any): Promise<string> {
917
+ const enterprise_id = loggedInUser.enterprise_id;
918
+
919
+ // 1. Get db_table_name from entity master
920
+
921
+ const result = await this.entityMasterRepo.getEntityByMappedEntityType(
922
+ entityType,
923
+ enterprise_id,
924
+ );
925
+
926
+ if (!result) {
927
+ throw new Error(
928
+ `Entity type '${entityType}' not found in frm_entity_master for enterprise '${enterprise_id}'`,
929
+ );
930
+ }
931
+
932
+ const tableName = result.db_table_name;
933
+
934
+ // 2. Get current max sequence number from that table
935
+ const seqResult = await this.entityManager.query(
936
+ `SELECT MAX(id) AS max_seq_no
937
+ FROM ${tableName}
938
+ WHERE entity_type = $1`,
939
+ [entityType],
940
+ );
941
+
942
+ let maxSeqNo = seqResult?.[0]?.max_seq_no
943
+ ? Number(seqResult[0].max_seq_no)
944
+ : 0;
945
+
946
+ maxSeqNo += 1;
947
+
948
+ // 3. Return generated code
949
+ return `${entityType}${maxSeqNo}`;
950
+ }
951
+
952
+ async getResolvedEntity(
953
+ id: number,
954
+ entity: string,
955
+ loggedInUser: UserData,
956
+ ): Promise<any> {
957
+ const leadData = await this.getEntityData(entity, id, loggedInUser);
958
+
959
+ const { mappedEntities, ...data } = leadData as any;
960
+
961
+ const resolvedData = await this.resolverService.getResolvedData(
962
+ loggedInUser,
963
+ data,
964
+ entity,
965
+ );
966
+
967
+ if (mappedEntities) {
968
+ resolvedData.mappedEntities = {};
969
+ for (const [entityType, entities] of Object.entries(mappedEntities)) {
970
+ if (Array.isArray(entities)) {
971
+ resolvedData.mappedEntities[entityType] = [];
972
+ for (const item of entities) {
973
+ const resolvedItem = await this.resolverService.getResolvedData(
974
+ loggedInUser,
975
+ item,
976
+ entityType,
977
+ );
978
+ resolvedData.mappedEntities[entityType].push(resolvedItem);
979
+ }
980
+ } else {
981
+ resolvedData.mappedEntities[entityType] =
982
+ await this.resolverService.getResolvedData(
983
+ loggedInUser,
984
+ entities,
985
+ entityType,
986
+ );
987
+ }
988
+ }
989
+ }
990
+
991
+ return resolvedData;
992
+ }
993
+ }