rez_core 3.1.155 → 3.1.157

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 (391) 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/module/auth/guards/role.guard.js +3 -3
  17. package/dist/module/auth/services/auth.service.js +2 -2
  18. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  19. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  20. package/dist/module/filter/service/filter.service.js +7 -7
  21. package/dist/module/ics/service/ics.service.d.ts +1 -1
  22. package/dist/module/ics/service/ics.service.js +2 -2
  23. package/dist/module/ics/service/ics.service.js.map +1 -1
  24. package/dist/module/integration/controller/wrapper.controller.d.ts +3 -3
  25. package/dist/module/integration/controller/wrapper.controller.js +4 -3
  26. package/dist/module/integration/controller/wrapper.controller.js.map +1 -1
  27. package/dist/module/integration/examples/usage.example.js +9 -9
  28. package/dist/module/integration/service/integration.service.js +1 -1
  29. package/dist/module/integration/service/wrapper.service.d.ts +3 -3
  30. package/dist/module/integration/service/wrapper.service.js +36 -59
  31. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  32. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  33. package/dist/module/listmaster/service/list-master.service.js +2 -2
  34. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  35. package/dist/module/mapper/service/mapper.service.js +2 -2
  36. package/dist/module/meta/service/entity-dynamic.service.js +18 -18
  37. package/dist/module/meta/service/entity-list.service.js +3 -3
  38. package/dist/module/meta/service/entity-master.service.js +3 -3
  39. package/dist/module/meta/service/entity-relation.service.js +11 -11
  40. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  41. package/dist/module/meta/service/resolver.service.js +3 -3
  42. package/dist/module/module/repository/menu.repository.js +12 -12
  43. package/dist/module/notification/service/notification.service.js +12 -12
  44. package/dist/module/user/controller/login.controller.js +18 -18
  45. package/dist/module/user/service/role.service.js +4 -4
  46. package/dist/module/user/service/user-session.service.js +2 -2
  47. package/dist/module/workflow/repository/action.repository.js +16 -16
  48. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  49. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  50. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  51. package/dist/module/workflow/repository/stage-movement.repository.js +11 -11
  52. package/dist/module/workflow/repository/stage.repository.js +8 -8
  53. package/dist/module/workflow/service/action-template-mapping.service.js +10 -10
  54. package/dist/module/workflow/service/action.service.js +7 -7
  55. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  56. package/dist/module/workflow/service/stage-group.service.js +5 -5
  57. package/dist/module/workflow/service/stage.service.js +2 -2
  58. package/dist/module/workflow/service/task.service.js +33 -33
  59. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  60. package/dist/module/workflow/service/workflow-meta.service.js +50 -50
  61. package/dist/module/workflow/service/workflow.service.js +2 -2
  62. package/dist/tsconfig.build.tsbuildinfo +1 -1
  63. package/dist/utils/service/reflection-helper.service.js +2 -2
  64. package/docs/modules/event-driven-integration-design.md +91 -91
  65. package/docs/modules/integration.md +250 -250
  66. package/eslint.config.mjs +34 -34
  67. package/nest-cli.json +14 -14
  68. package/package.json +118 -118
  69. package/server.log +850 -0
  70. package/src/app.controller.ts +12 -12
  71. package/src/app.module.ts +49 -49
  72. package/src/app.service.ts +8 -8
  73. package/src/config/config.module.ts +18 -18
  74. package/src/config/database.config.ts +23 -23
  75. package/src/constant/global.constant.ts +67 -67
  76. package/src/core.module.ts +81 -81
  77. package/src/decorators/roles.decorator.ts +7 -7
  78. package/src/dtos/response.dto.ts +6 -6
  79. package/src/dtos/response.ts +5 -5
  80. package/src/index.ts +1 -1
  81. package/src/module/auth/auth.module.ts +49 -49
  82. package/src/module/auth/controller/auth.controller.ts +28 -28
  83. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  84. package/src/module/auth/guards/jwt.guard.ts +22 -22
  85. package/src/module/auth/guards/role.guard.ts +68 -68
  86. package/src/module/auth/services/auth.service.ts +50 -50
  87. package/src/module/auth/services/jwt.service.ts +11 -11
  88. package/src/module/auth/strategies/google.strategy.ts +54 -54
  89. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  90. package/src/module/auth/strategies/local.strategy.ts +13 -13
  91. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  92. package/src/module/dashboard/dashboard.module.ts +21 -21
  93. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  94. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  95. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  96. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  97. package/src/module/dev/dev.module.ts +12 -12
  98. package/src/module/dev/service/dev.service.ts +7 -7
  99. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  100. package/src/module/enterprise/enterprise.module.ts +30 -30
  101. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  102. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  103. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  104. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  105. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  106. package/src/module/enterprise/repository/school.repository.ts +281 -281
  107. package/src/module/enterprise/service/brand.service.ts +5 -5
  108. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  109. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  110. package/src/module/enterprise/service/organization.service.ts +145 -145
  111. package/src/module/filter/controller/filter.controller.ts +84 -84
  112. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  113. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  114. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  115. package/src/module/filter/filter.module.ts +31 -31
  116. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  117. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  118. package/src/module/filter/service/filter.service.ts +841 -841
  119. package/src/module/filter/service/saved-filter.service.ts +170 -170
  120. package/src/module/ics/controller/ics.controller.ts +21 -21
  121. package/src/module/ics/dto/ics.dto.ts +55 -55
  122. package/src/module/ics/ics.module.ts +13 -13
  123. package/src/module/ics/service/ics.service.ts +57 -57
  124. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  125. package/src/module/integration/controller/integration.controller.ts +662 -662
  126. package/src/module/integration/controller/wrapper.controller.ts +37 -39
  127. package/src/module/integration/dto/create-config.dto.ts +526 -526
  128. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  129. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  130. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  131. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  132. package/src/module/integration/examples/usage.example.ts +338 -338
  133. package/src/module/integration/factories/base.factory.ts +7 -7
  134. package/src/module/integration/factories/email.factory.ts +49 -49
  135. package/src/module/integration/factories/integration.factory.ts +121 -121
  136. package/src/module/integration/factories/sms.factory.ts +51 -51
  137. package/src/module/integration/factories/telephone.factory.ts +41 -41
  138. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  139. package/src/module/integration/integration.module.ts +110 -110
  140. package/src/module/integration/service/calendar-event.service.ts +118 -118
  141. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  142. package/src/module/integration/service/integration-queue.service.ts +229 -229
  143. package/src/module/integration/service/integration.service.ts +2572 -2572
  144. package/src/module/integration/service/oauth.service.ts +224 -224
  145. package/src/module/integration/service/wrapper.service.ts +439 -513
  146. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  147. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  148. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  149. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  150. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  151. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  152. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  153. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  154. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  155. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  156. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  157. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  158. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  159. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  160. package/src/module/layout/controller/layout.controller.ts +47 -47
  161. package/src/module/layout/entity/header-items.entity.ts +28 -28
  162. package/src/module/layout/entity/header-section.entity.ts +19 -19
  163. package/src/module/layout/layout.module.ts +21 -21
  164. package/src/module/layout/repository/header-items.repository.ts +18 -18
  165. package/src/module/layout/repository/header-section.repository.ts +22 -22
  166. package/src/module/layout/service/header-section.service.ts +25 -25
  167. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  168. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  169. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  170. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  171. package/src/module/layout_preference/service/layout_preference.service.ts +172 -172
  172. package/src/module/lead/controller/lead.controller.ts +30 -30
  173. package/src/module/lead/lead.module.ts +14 -14
  174. package/src/module/lead/repository/lead.repository.ts +41 -41
  175. package/src/module/lead/service/lead.service.ts +54 -54
  176. package/src/module/listmaster/controller/list-master.controller.ts +143 -143
  177. package/src/module/listmaster/entity/list-master-items.entity.ts +41 -41
  178. package/src/module/listmaster/entity/list-master.entity.ts +32 -32
  179. package/src/module/listmaster/listmaster.module.ts +44 -44
  180. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  181. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  182. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  183. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  184. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  185. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  186. package/src/module/listmaster/service/list-master.service.ts +375 -375
  187. package/src/module/mapper/controller/field-mapper.controller.ts +69 -69
  188. package/src/module/mapper/controller/mapper.controller.ts +14 -14
  189. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  190. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  191. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  192. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  193. package/src/module/mapper/mapper.module.ts +34 -34
  194. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  195. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  196. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  197. package/src/module/mapper/service/field-mapper.service.ts +223 -223
  198. package/src/module/mapper/service/mapper.service.ts +72 -72
  199. package/src/module/master/controller/master.controller.ts +74 -74
  200. package/src/module/master/service/master.service.ts +483 -483
  201. package/src/module/meta/controller/app-master.controller.ts +38 -38
  202. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  203. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  204. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  205. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  206. package/src/module/meta/controller/entity.controller.ts +385 -385
  207. package/src/module/meta/controller/media.controller.ts +82 -82
  208. package/src/module/meta/controller/meta.controller.ts +96 -96
  209. package/src/module/meta/controller/view-master.controller.ts +86 -86
  210. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  211. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  212. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  213. package/src/module/meta/entity/app-master.entity.ts +34 -34
  214. package/src/module/meta/entity/attribute-master.entity.ts +87 -87
  215. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  216. package/src/module/meta/entity/entity-master.entity.ts +78 -78
  217. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  218. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  219. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  220. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  221. package/src/module/meta/entity/media-data.entity.ts +32 -32
  222. package/src/module/meta/entity/preference.entity.ts +62 -62
  223. package/src/module/meta/entity/view-master.entity.ts +41 -41
  224. package/src/module/meta/entity.module.ts +156 -156
  225. package/src/module/meta/repository/app-master.repository.ts +20 -20
  226. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  227. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  228. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  229. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  230. package/src/module/meta/repository/media-data.repository.ts +50 -50
  231. package/src/module/meta/repository/preference.repository.ts +20 -20
  232. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  233. package/src/module/meta/repository/view-master.repository.ts +42 -42
  234. package/src/module/meta/service/app-master.service.ts +37 -37
  235. package/src/module/meta/service/attribute-master.service.ts +117 -117
  236. package/src/module/meta/service/common.service.ts +9 -9
  237. package/src/module/meta/service/entity-dynamic.service.ts +762 -762
  238. package/src/module/meta/service/entity-list.service.ts +205 -205
  239. package/src/module/meta/service/entity-master.service.ts +164 -164
  240. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  241. package/src/module/meta/service/entity-relation.service.ts +69 -69
  242. package/src/module/meta/service/entity-service-impl.service.ts +524 -524
  243. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  244. package/src/module/meta/service/entity-table.service.ts +150 -150
  245. package/src/module/meta/service/entity-validation.service.ts +185 -185
  246. package/src/module/meta/service/entity.service.ts +67 -67
  247. package/src/module/meta/service/field-group.service.ts +103 -103
  248. package/src/module/meta/service/media-data.service.ts +140 -140
  249. package/src/module/meta/service/populate-meta.service.ts +173 -173
  250. package/src/module/meta/service/preference.service.ts +16 -16
  251. package/src/module/meta/service/resolver.service.ts +274 -274
  252. package/src/module/meta/service/section-master.service.ts +104 -104
  253. package/src/module/meta/service/update-form-json.service.ts +22 -22
  254. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  255. package/src/module/meta/service/view-master.service.ts +111 -111
  256. package/src/module/module/controller/menu.controller.ts +15 -15
  257. package/src/module/module/controller/module-access.controller.ts +132 -132
  258. package/src/module/module/entity/menu.entity.ts +43 -43
  259. package/src/module/module/entity/module-access.entity.ts +25 -25
  260. package/src/module/module/entity/module-action.entity.ts +17 -17
  261. package/src/module/module/entity/module.entity.ts +52 -52
  262. package/src/module/module/module.module.ts +42 -42
  263. package/src/module/module/repository/menu.repository.ts +184 -184
  264. package/src/module/module/repository/module-access.repository.ts +331 -331
  265. package/src/module/module/service/menu.service.ts +82 -82
  266. package/src/module/module/service/module-access.service.ts +209 -209
  267. package/src/module/notification/controller/notification.controller.ts +58 -58
  268. package/src/module/notification/controller/otp.controller.ts +117 -117
  269. package/src/module/notification/entity/notification.entity.ts +23 -23
  270. package/src/module/notification/entity/otp.entity.ts +28 -28
  271. package/src/module/notification/firebase-admin.config.ts +22 -22
  272. package/src/module/notification/notification.module.ts +69 -69
  273. package/src/module/notification/repository/otp.repository.ts +27 -27
  274. package/src/module/notification/service/email.service.ts +127 -127
  275. package/src/module/notification/service/notification.service.ts +138 -138
  276. package/src/module/notification/service/otp.service.ts +121 -121
  277. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  278. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  279. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  280. package/src/module/third-party-module/third-party.module.ts +12 -12
  281. package/src/module/user/controller/login.controller.ts +197 -197
  282. package/src/module/user/controller/user.controller.ts +40 -40
  283. package/src/module/user/dto/create-user.dto.ts +62 -62
  284. package/src/module/user/dto/update-user.dto.ts +4 -4
  285. package/src/module/user/entity/role.entity.ts +33 -33
  286. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  287. package/src/module/user/entity/user-session.entity.ts +61 -61
  288. package/src/module/user/entity/user.entity.ts +68 -68
  289. package/src/module/user/repository/role.repository.ts +96 -96
  290. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  291. package/src/module/user/repository/user.repository.ts +50 -50
  292. package/src/module/user/repository/userSession.repository.ts +33 -33
  293. package/src/module/user/service/login.service.ts +280 -280
  294. package/src/module/user/service/role.service.ts +189 -189
  295. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  296. package/src/module/user/service/user-session.service.ts +168 -168
  297. package/src/module/user/service/user.service.ts +353 -353
  298. package/src/module/user/user.module.ts +65 -65
  299. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  300. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  301. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  302. package/src/module/workflow/controller/action.controller.ts +95 -95
  303. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  304. package/src/module/workflow/controller/comm-template.controller.ts +34 -34
  305. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  306. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  307. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  308. package/src/module/workflow/controller/stage.controller.ts +50 -50
  309. package/src/module/workflow/controller/task.controller.ts +77 -77
  310. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  311. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  312. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  313. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  314. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  315. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  316. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  317. package/src/module/workflow/entity/action.entity.ts +50 -50
  318. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  319. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  320. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  321. package/src/module/workflow/entity/form.entity.ts +25 -25
  322. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  323. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  324. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  325. package/src/module/workflow/entity/stage.entity.ts +20 -20
  326. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  327. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  328. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  329. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  330. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  331. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  332. package/src/module/workflow/repository/action-data.repository.ts +219 -219
  333. package/src/module/workflow/repository/action.repository.ts +277 -277
  334. package/src/module/workflow/repository/activity-log.repository.ts +121 -121
  335. package/src/module/workflow/repository/comm-template.repository.ts +142 -142
  336. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  337. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  338. package/src/module/workflow/repository/stage-movement.repository.ts +227 -227
  339. package/src/module/workflow/repository/stage.repository.ts +172 -172
  340. package/src/module/workflow/repository/task.repository.ts +113 -113
  341. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  342. package/src/module/workflow/service/action-category.service.ts +33 -33
  343. package/src/module/workflow/service/action-data.service.ts +62 -62
  344. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  345. package/src/module/workflow/service/action-template-mapping.service.ts +55 -55
  346. package/src/module/workflow/service/action.service.ts +263 -263
  347. package/src/module/workflow/service/activity-log.service.ts +107 -107
  348. package/src/module/workflow/service/comm-template.service.ts +121 -121
  349. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  350. package/src/module/workflow/service/form-master.service.ts +35 -35
  351. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  352. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  353. package/src/module/workflow/service/stage-group.service.ts +300 -300
  354. package/src/module/workflow/service/stage.service.ts +199 -199
  355. package/src/module/workflow/service/task.service.ts +504 -504
  356. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  357. package/src/module/workflow/service/workflow-meta.service.ts +581 -581
  358. package/src/module/workflow/service/workflow.service.ts +205 -205
  359. package/src/module/workflow/workflow.module.ts +172 -172
  360. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  361. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  362. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  363. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  364. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  365. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  366. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  367. package/src/module/workflow-automation/service/workflow-automation.service.ts +345 -345
  368. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  369. package/src/resources/dev.properties.yaml +30 -30
  370. package/src/resources/local.properties.yaml +27 -27
  371. package/src/resources/properties.module.ts +12 -12
  372. package/src/resources/properties.yaml.ts +11 -11
  373. package/src/resources/uat.properties.yaml +15 -15
  374. package/src/utils/dto/excel-data.dto.ts +14 -14
  375. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  376. package/src/utils/service/base64util.service.ts +18 -18
  377. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  378. package/src/utils/service/codeGenerator.service.ts +22 -22
  379. package/src/utils/service/dateUtil.service.ts +17 -17
  380. package/src/utils/service/encryptUtil.service.ts +97 -97
  381. package/src/utils/service/excel-helper.service.ts +72 -72
  382. package/src/utils/service/excelUtil.service.ts +15 -15
  383. package/src/utils/service/file-util.service.ts +11 -11
  384. package/src/utils/service/json-util.service.ts +23 -23
  385. package/src/utils/service/loggingUtil.service.ts +34 -34
  386. package/src/utils/service/reflection-helper.service.ts +62 -62
  387. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  388. package/src/utils/utils.module.ts +25 -25
  389. package/tsconfig.build.json +4 -4
  390. package/tsconfig.json +24 -24
  391. package/.vscode/extensions.json +0 -5
@@ -1,375 +1,375 @@
1
- import {
2
- BadRequestException,
3
- forwardRef,
4
- Inject,
5
- Injectable,
6
- NotFoundException,
7
- } from '@nestjs/common';
8
- import { ListMasterItemsRepository } from '../repository/list-master-items.repository';
9
- import { ListMasterRepository } from '../repository/list-master.repository';
10
- import { ApiRegistryService } from '../../third-party-module/service/api-registry.service';
11
- import { firstValueFrom } from 'rxjs';
12
- import { HttpService } from '@nestjs/axios';
13
- import { EntityManager } from 'typeorm';
14
- import { EntityMasterService } from 'src/module/meta/service/entity-master.service';
15
- import { UserData } from 'src/module/user/entity/user.entity';
16
- import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
17
- import { STATUS_ACTIVE, STATUS_INACTIVE } from 'src/constant/global.constant';
18
- import { ListMasterExtension } from './list-master-extension.interface';
19
- import { ListMasterEngine } from './list-master-engine';
20
-
21
- @Injectable()
22
- export class ListMasterService {
23
- constructor(
24
- private readonly entityManager: EntityManager,
25
- @Inject(forwardRef(() => EntityServiceImpl))
26
- private readonly entityServiceImpl: EntityServiceImpl,
27
- @Inject(forwardRef(() => EntityMasterService))
28
- private readonly entityMasterService: EntityMasterService,
29
- private readonly listMasterRepo: ListMasterRepository,
30
- private readonly listItemsRepo: ListMasterItemsRepository,
31
- private readonly apiRegistryService: ApiRegistryService,
32
- private readonly httpService: HttpService,
33
- private readonly listMasterEngine: ListMasterEngine,
34
- ) {}
35
-
36
- private readonly skipLevelFilterEntities = ['BRN'];
37
-
38
- async getResolvedListCode(
39
- code: string,
40
- organization_id: number,
41
- ): Promise<any> {
42
- if (!code) return code;
43
-
44
- // Check if it's a valid list type
45
- const listMaster = await this.listItemsRepo.findItemByCode(
46
- code,
47
- organization_id,
48
- );
49
- if (listMaster) {
50
- return listMaster;
51
- }
52
- }
53
-
54
- async getDropdownOptions(
55
- type: string,
56
- params: Record<string, string>,
57
- inactiveIdsArray?: number[],
58
- loggedInUser?,
59
- ) {
60
- const config = await this.listMasterRepo.findByType(
61
- type,
62
- loggedInUser?.organization_id,
63
- );
64
-
65
- if (!config) throw new NotFoundException(`Type ${type} not found`);
66
-
67
- // Check if a dynamic extension exists for this type
68
- try {
69
- const extensionResult = await this.listMasterEngine.execute(type, {
70
- params,
71
- inactiveIdsArray,
72
- loggedInUser,
73
- config,
74
- });
75
-
76
- if (extensionResult !== undefined) return extensionResult;
77
- } catch (err) {
78
- console.warn(`No extension found for type ${type}, falling back to default logic`);
79
- }
80
-
81
- // Fallback to old logic if no extension exists
82
- switch (config.source) {
83
- case 'entity':
84
- return this.fetchFromEntity(type, params, inactiveIdsArray, loggedInUser);
85
-
86
- case 'master':
87
- return this.listItemsRepo.findItemsByType(
88
- type,
89
- config.sort_by,
90
- inactiveIdsArray,
91
- loggedInUser?.organization_id,
92
- params,
93
- );
94
-
95
- case 'operator':
96
- return this.listItemsRepo.findOperatorsByType(
97
- type,
98
- loggedInUser?.organization_id,
99
- );
100
-
101
- case 'custom':
102
- return this.fetchFromExternalSource(config.custom_source_id, params);
103
-
104
- default:
105
- throw new BadRequestException(`Unknown source: ${config.source}`);
106
- }
107
- }
108
-
109
-
110
- private async fetchFromEntity(
111
- sourceList: string,
112
- params: Record<string, any>,
113
- inactiveIdsArray?: number[],
114
- loggedInUser?: UserData,
115
- ) {
116
- console.log(
117
- sourceList,
118
- 'sourceList',
119
- params,
120
- 'params',
121
- inactiveIdsArray,
122
- 'inactiveIdsArray',
123
- loggedInUser,
124
- 'loggedInUser',
125
- );
126
- let result: { label: string; value: number }[] = [];
127
- if (!sourceList) return result;
128
-
129
- const entityMaster = await this.entityMasterService.getEntityData(
130
- sourceList,
131
- loggedInUser,
132
- );
133
- const tableName = entityMaster.data_source;
134
-
135
- const applyCommonFilters = (qb: any, status?: number) => {
136
- if (status) {
137
- const isView = tableName.endsWith('_vw'); // auto-detect view
138
- const statusColumn = isView ? 'status_id' : 'status';
139
- qb.andWhere(`${tableName}.${statusColumn} = :status`, { status });
140
- }
141
-
142
- if (loggedInUser?.level_type && loggedInUser?.level_id) {
143
- // Skip level filter for certain entities
144
- if (!this.skipLevelFilterEntities.includes(sourceList)) {
145
- qb.andWhere(
146
- `${tableName}.level_type = :levelType AND ${tableName}.level_id = :levelId AND ${tableName}.organization_id = :organization_id`,
147
- {
148
- levelType: loggedInUser.level_type,
149
- levelId: loggedInUser.level_id,
150
- organization_id: loggedInUser.organization_id,
151
- },
152
- );
153
- } else {
154
- // IN the case of BRN, we don't filter by level
155
- qb.andWhere(
156
- `${tableName}.parent_id = :organization_id
157
- AND ${tableName}.type = 'BRN'
158
- `,
159
- {
160
- organization_id: loggedInUser.organization_id,
161
- },
162
- );
163
- }
164
- }
165
-
166
- if (loggedInUser?.appcode && sourceList === 'ROL') {
167
- if (!this.skipLevelFilterEntities.includes(sourceList)) {
168
- qb.andWhere(`${tableName}.appcode = :appcode`, {
169
- appcode: loggedInUser.appcode,
170
- });
171
- }
172
- }
173
-
174
- for (const key in params) {
175
- qb.andWhere(`${tableName}.${key} = :${key}`, {
176
- [key]: params[key],
177
- });
178
- }
179
-
180
- return qb;
181
- };
182
-
183
- const resolveStatus = await this.getResolvedListCode(
184
- STATUS_ACTIVE,
185
- loggedInUser?.organization_id || 0,
186
- );
187
-
188
- // Fetpords
189
- const activeQuery = applyCommonFilters(
190
- this.entityManager
191
- .createQueryBuilder()
192
- .select('*')
193
- .from(tableName, tableName),
194
- resolveStatus.id,
195
- );
196
-
197
- const activeResults = await activeQuery.getRawMany();
198
- const activeIds = new Set(activeResults.map((r) => r.id));
199
-
200
- // Add active entries first
201
- activeResults.forEach((r) => {
202
- result.push({ label: r.name, value: r.id });
203
- });
204
-
205
- const resolveInactiveStatus = await this.getResolvedListCode(
206
- STATUS_INACTIVE,
207
- loggedInUser?.organization_id || 0,
208
- );
209
-
210
- // Fetch inactive records (with same filters but without status condition)
211
- if (inactiveIdsArray?.length) {
212
- const inactiveQuery = applyCommonFilters(
213
- this.entityManager
214
- .createQueryBuilder()
215
- .select('*')
216
- .from(tableName, tableName),
217
- resolveInactiveStatus.id,
218
- );
219
-
220
- inactiveQuery.andWhere(`${tableName}.id IN (:...ids)`, {
221
- ids: inactiveIdsArray,
222
- });
223
-
224
- const inactiveResults = await inactiveQuery.getRawMany();
225
-
226
- // Add only those inactive records not already present in active
227
- inactiveResults.forEach((item) => {
228
- if (!activeIds.has(item.id)) {
229
- result.push({
230
- label: `${item.name} [INACTIVE]`,
231
- value: item.id,
232
- });
233
- }
234
- });
235
- }
236
-
237
- return result;
238
- }
239
-
240
- private async fetchFromExternalSource(
241
- customSourceId: number,
242
- params?: Record<string, string>,
243
- ) {
244
- const apiRegistry = await this.apiRegistryService.findById(customSourceId);
245
- if (!apiRegistry) return [];
246
-
247
- const url = `${apiRegistry.base_url}${apiRegistry.endpoint.replace(/{{(.*?)}}/g, (_, key) => params?.[key.trim()] || '')}`;
248
- const payload = this.injectDynamicParams(
249
- apiRegistry.request_payload_schema,
250
- params,
251
- );
252
-
253
- const response = await firstValueFrom(
254
- this.httpService.request({
255
- url,
256
- method: apiRegistry.http_method || 'POST',
257
- data: payload,
258
- headers: apiRegistry.headers ? apiRegistry.headers : undefined,
259
- }),
260
- );
261
-
262
- const data = this.extractByPath(
263
- response.data,
264
- apiRegistry.response_data_path,
265
- );
266
-
267
- if (!Array.isArray(data)) {
268
- return [{ label: data, value: data }];
269
- }
270
-
271
- if (typeof data[0] === 'string') {
272
- return data.map((item: string) => ({ label: item, value: item }));
273
- }
274
-
275
- return data.map((item: any) => ({
276
- label: item[apiRegistry?.label],
277
- value: item[apiRegistry?.value],
278
- }));
279
- }
280
-
281
- private injectDynamicParams(
282
- payload: any,
283
- params?: Record<string, string>,
284
- ): any {
285
- if (params) {
286
- const stringified = JSON.stringify(payload);
287
- const replaced = stringified.replace(
288
- /{{(.*?)}}/g,
289
- (_, key) => params[key.trim()] || '',
290
- );
291
- return JSON.parse(replaced);
292
- }
293
- }
294
-
295
- private extractByPath(obj: any, path: string): any {
296
- if (!path || !obj) return obj;
297
-
298
- return path.split('.').reduce((acc, key) => {
299
- if (acc == null) return undefined;
300
-
301
- // Try to convert to number if it's a numeric string (for array indexes)
302
- const index = Number(key);
303
- if (!isNaN(index) && Array.isArray(acc)) {
304
- return acc[index];
305
- }
306
-
307
- return acc[key];
308
- }, obj);
309
- }
310
-
311
- // createEntity method
312
- async createEntity(entityData: any, loggedInUser: UserData): Promise<any> {
313
- // Trim and validate name and code
314
- const name = entityData.name?.trim();
315
- // const code = entityData.code?.trim();
316
-
317
- if (!name) {
318
- throw new BadRequestException('Name is required and cannot be empty');
319
- }
320
-
321
- entityData.name = name;
322
- entityData.is_factory = entityData.is_factory || 0;
323
- entityData.source = entityData.source || 'master';
324
- entityData.status = entityData.status || 'ACTIVE';
325
- entityData.type = entityData.code;
326
- entityData.sort_by = entityData.sort_by || 'asc';
327
- entityData.organization_id = loggedInUser.organization_id;
328
-
329
- // Check for duplicate name
330
- const nameExists = await this.listMasterRepo.findOneByCondition({
331
- name,
332
- organization_id: loggedInUser.organization_id,
333
- });
334
-
335
- if (nameExists) {
336
- throw new BadRequestException(
337
- 'A List Master with the same name already exists',
338
- );
339
- }
340
-
341
- const createdListMaster = await this.entityServiceImpl.createEntity(
342
- entityData,
343
- loggedInUser,
344
- );
345
-
346
- if (!createdListMaster) {
347
- throw new BadRequestException('Failed to create entity');
348
- }
349
-
350
- return createdListMaster;
351
- }
352
-
353
- async updateEntity(entityData: any, loggedInUser: UserData): Promise<any> {
354
- return await this.entityServiceImpl.updateEntity(entityData, loggedInUser);
355
- }
356
-
357
- async getEntityData(
358
- entity_type: string,
359
- id: number,
360
- loggedInUser,
361
- ): Promise<any> {
362
- return await this.entityServiceImpl.getEntityData(
363
- entity_type,
364
- id,
365
- loggedInUser,
366
- );
367
- }
368
-
369
- async getAllListMasterByOrganization(
370
- organizationId: number,
371
- search?: string,
372
- ): Promise<any[]> {
373
- return await this.listMasterRepo.findAllItems(organizationId, search);
374
- }
375
- }
1
+ import {
2
+ BadRequestException,
3
+ forwardRef,
4
+ Inject,
5
+ Injectable,
6
+ NotFoundException,
7
+ } from '@nestjs/common';
8
+ import { ListMasterItemsRepository } from '../repository/list-master-items.repository';
9
+ import { ListMasterRepository } from '../repository/list-master.repository';
10
+ import { ApiRegistryService } from '../../third-party-module/service/api-registry.service';
11
+ import { firstValueFrom } from 'rxjs';
12
+ import { HttpService } from '@nestjs/axios';
13
+ import { EntityManager } from 'typeorm';
14
+ import { EntityMasterService } from 'src/module/meta/service/entity-master.service';
15
+ import { UserData } from 'src/module/user/entity/user.entity';
16
+ import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
17
+ import { STATUS_ACTIVE, STATUS_INACTIVE } from 'src/constant/global.constant';
18
+ import { ListMasterExtension } from './list-master-extension.interface';
19
+ import { ListMasterEngine } from './list-master-engine';
20
+
21
+ @Injectable()
22
+ export class ListMasterService {
23
+ constructor(
24
+ private readonly entityManager: EntityManager,
25
+ @Inject(forwardRef(() => EntityServiceImpl))
26
+ private readonly entityServiceImpl: EntityServiceImpl,
27
+ @Inject(forwardRef(() => EntityMasterService))
28
+ private readonly entityMasterService: EntityMasterService,
29
+ private readonly listMasterRepo: ListMasterRepository,
30
+ private readonly listItemsRepo: ListMasterItemsRepository,
31
+ private readonly apiRegistryService: ApiRegistryService,
32
+ private readonly httpService: HttpService,
33
+ private readonly listMasterEngine: ListMasterEngine,
34
+ ) {}
35
+
36
+ private readonly skipLevelFilterEntities = ['BRN'];
37
+
38
+ async getResolvedListCode(
39
+ code: string,
40
+ organization_id: number,
41
+ ): Promise<any> {
42
+ if (!code) return code;
43
+
44
+ // Check if it's a valid list type
45
+ const listMaster = await this.listItemsRepo.findItemByCode(
46
+ code,
47
+ organization_id,
48
+ );
49
+ if (listMaster) {
50
+ return listMaster;
51
+ }
52
+ }
53
+
54
+ async getDropdownOptions(
55
+ type: string,
56
+ params: Record<string, string>,
57
+ inactiveIdsArray?: number[],
58
+ loggedInUser?,
59
+ ) {
60
+ const config = await this.listMasterRepo.findByType(
61
+ type,
62
+ loggedInUser?.organization_id,
63
+ );
64
+
65
+ if (!config) throw new NotFoundException(`Type ${type} not found`);
66
+
67
+ // Check if a dynamic extension exists for this type
68
+ try {
69
+ const extensionResult = await this.listMasterEngine.execute(type, {
70
+ params,
71
+ inactiveIdsArray,
72
+ loggedInUser,
73
+ config,
74
+ });
75
+
76
+ if (extensionResult !== undefined) return extensionResult;
77
+ } catch (err) {
78
+ console.warn(`No extension found for type ${type}, falling back to default logic`);
79
+ }
80
+
81
+ // Fallback to old logic if no extension exists
82
+ switch (config.source) {
83
+ case 'entity':
84
+ return this.fetchFromEntity(type, params, inactiveIdsArray, loggedInUser);
85
+
86
+ case 'master':
87
+ return this.listItemsRepo.findItemsByType(
88
+ type,
89
+ config.sort_by,
90
+ inactiveIdsArray,
91
+ loggedInUser?.organization_id,
92
+ params,
93
+ );
94
+
95
+ case 'operator':
96
+ return this.listItemsRepo.findOperatorsByType(
97
+ type,
98
+ loggedInUser?.organization_id,
99
+ );
100
+
101
+ case 'custom':
102
+ return this.fetchFromExternalSource(config.custom_source_id, params);
103
+
104
+ default:
105
+ throw new BadRequestException(`Unknown source: ${config.source}`);
106
+ }
107
+ }
108
+
109
+
110
+ private async fetchFromEntity(
111
+ sourceList: string,
112
+ params: Record<string, any>,
113
+ inactiveIdsArray?: number[],
114
+ loggedInUser?: UserData,
115
+ ) {
116
+ console.log(
117
+ sourceList,
118
+ 'sourceList',
119
+ params,
120
+ 'params',
121
+ inactiveIdsArray,
122
+ 'inactiveIdsArray',
123
+ loggedInUser,
124
+ 'loggedInUser',
125
+ );
126
+ let result: { label: string; value: number }[] = [];
127
+ if (!sourceList) return result;
128
+
129
+ const entityMaster = await this.entityMasterService.getEntityData(
130
+ sourceList,
131
+ loggedInUser,
132
+ );
133
+ const tableName = entityMaster.data_source;
134
+
135
+ const applyCommonFilters = (qb: any, status?: number) => {
136
+ if (status) {
137
+ const isView = tableName.endsWith('_vw'); // auto-detect view
138
+ const statusColumn = isView ? 'status_id' : 'status';
139
+ qb.andWhere(`${tableName}.${statusColumn} = :status`, { status });
140
+ }
141
+
142
+ if (loggedInUser?.level_type && loggedInUser?.level_id) {
143
+ // Skip level filter for certain entities
144
+ if (!this.skipLevelFilterEntities.includes(sourceList)) {
145
+ qb.andWhere(
146
+ `${tableName}.level_type = :levelType AND ${tableName}.level_id = :levelId AND ${tableName}.organization_id = :organization_id`,
147
+ {
148
+ levelType: loggedInUser.level_type,
149
+ levelId: loggedInUser.level_id,
150
+ organization_id: loggedInUser.organization_id,
151
+ },
152
+ );
153
+ } else {
154
+ // IN the case of BRN, we don't filter by level
155
+ qb.andWhere(
156
+ `${tableName}.parent_id = :organization_id
157
+ AND ${tableName}.type = 'BRN'
158
+ `,
159
+ {
160
+ organization_id: loggedInUser.organization_id,
161
+ },
162
+ );
163
+ }
164
+ }
165
+
166
+ if (loggedInUser?.appcode && sourceList === 'ROL') {
167
+ if (!this.skipLevelFilterEntities.includes(sourceList)) {
168
+ qb.andWhere(`${tableName}.appcode = :appcode`, {
169
+ appcode: loggedInUser.appcode,
170
+ });
171
+ }
172
+ }
173
+
174
+ for (const key in params) {
175
+ qb.andWhere(`${tableName}.${key} = :${key}`, {
176
+ [key]: params[key],
177
+ });
178
+ }
179
+
180
+ return qb;
181
+ };
182
+
183
+ const resolveStatus = await this.getResolvedListCode(
184
+ STATUS_ACTIVE,
185
+ loggedInUser?.organization_id || 0,
186
+ );
187
+
188
+ // Fetpords
189
+ const activeQuery = applyCommonFilters(
190
+ this.entityManager
191
+ .createQueryBuilder()
192
+ .select('*')
193
+ .from(tableName, tableName),
194
+ resolveStatus.id,
195
+ );
196
+
197
+ const activeResults = await activeQuery.getRawMany();
198
+ const activeIds = new Set(activeResults.map((r) => r.id));
199
+
200
+ // Add active entries first
201
+ activeResults.forEach((r) => {
202
+ result.push({ label: r.name, value: r.id });
203
+ });
204
+
205
+ const resolveInactiveStatus = await this.getResolvedListCode(
206
+ STATUS_INACTIVE,
207
+ loggedInUser?.organization_id || 0,
208
+ );
209
+
210
+ // Fetch inactive records (with same filters but without status condition)
211
+ if (inactiveIdsArray?.length) {
212
+ const inactiveQuery = applyCommonFilters(
213
+ this.entityManager
214
+ .createQueryBuilder()
215
+ .select('*')
216
+ .from(tableName, tableName),
217
+ resolveInactiveStatus.id,
218
+ );
219
+
220
+ inactiveQuery.andWhere(`${tableName}.id IN (:...ids)`, {
221
+ ids: inactiveIdsArray,
222
+ });
223
+
224
+ const inactiveResults = await inactiveQuery.getRawMany();
225
+
226
+ // Add only those inactive records not already present in active
227
+ inactiveResults.forEach((item) => {
228
+ if (!activeIds.has(item.id)) {
229
+ result.push({
230
+ label: `${item.name} [INACTIVE]`,
231
+ value: item.id,
232
+ });
233
+ }
234
+ });
235
+ }
236
+
237
+ return result;
238
+ }
239
+
240
+ private async fetchFromExternalSource(
241
+ customSourceId: number,
242
+ params?: Record<string, string>,
243
+ ) {
244
+ const apiRegistry = await this.apiRegistryService.findById(customSourceId);
245
+ if (!apiRegistry) return [];
246
+
247
+ const url = `${apiRegistry.base_url}${apiRegistry.endpoint.replace(/{{(.*?)}}/g, (_, key) => params?.[key.trim()] || '')}`;
248
+ const payload = this.injectDynamicParams(
249
+ apiRegistry.request_payload_schema,
250
+ params,
251
+ );
252
+
253
+ const response = await firstValueFrom(
254
+ this.httpService.request({
255
+ url,
256
+ method: apiRegistry.http_method || 'POST',
257
+ data: payload,
258
+ headers: apiRegistry.headers ? apiRegistry.headers : undefined,
259
+ }),
260
+ );
261
+
262
+ const data = this.extractByPath(
263
+ response.data,
264
+ apiRegistry.response_data_path,
265
+ );
266
+
267
+ if (!Array.isArray(data)) {
268
+ return [{ label: data, value: data }];
269
+ }
270
+
271
+ if (typeof data[0] === 'string') {
272
+ return data.map((item: string) => ({ label: item, value: item }));
273
+ }
274
+
275
+ return data.map((item: any) => ({
276
+ label: item[apiRegistry?.label],
277
+ value: item[apiRegistry?.value],
278
+ }));
279
+ }
280
+
281
+ private injectDynamicParams(
282
+ payload: any,
283
+ params?: Record<string, string>,
284
+ ): any {
285
+ if (params) {
286
+ const stringified = JSON.stringify(payload);
287
+ const replaced = stringified.replace(
288
+ /{{(.*?)}}/g,
289
+ (_, key) => params[key.trim()] || '',
290
+ );
291
+ return JSON.parse(replaced);
292
+ }
293
+ }
294
+
295
+ private extractByPath(obj: any, path: string): any {
296
+ if (!path || !obj) return obj;
297
+
298
+ return path.split('.').reduce((acc, key) => {
299
+ if (acc == null) return undefined;
300
+
301
+ // Try to convert to number if it's a numeric string (for array indexes)
302
+ const index = Number(key);
303
+ if (!isNaN(index) && Array.isArray(acc)) {
304
+ return acc[index];
305
+ }
306
+
307
+ return acc[key];
308
+ }, obj);
309
+ }
310
+
311
+ // createEntity method
312
+ async createEntity(entityData: any, loggedInUser: UserData): Promise<any> {
313
+ // Trim and validate name and code
314
+ const name = entityData.name?.trim();
315
+ // const code = entityData.code?.trim();
316
+
317
+ if (!name) {
318
+ throw new BadRequestException('Name is required and cannot be empty');
319
+ }
320
+
321
+ entityData.name = name;
322
+ entityData.is_factory = entityData.is_factory || 0;
323
+ entityData.source = entityData.source || 'master';
324
+ entityData.status = entityData.status || 'ACTIVE';
325
+ entityData.type = entityData.code;
326
+ entityData.sort_by = entityData.sort_by || 'asc';
327
+ entityData.organization_id = loggedInUser.organization_id;
328
+
329
+ // Check for duplicate name
330
+ const nameExists = await this.listMasterRepo.findOneByCondition({
331
+ name,
332
+ organization_id: loggedInUser.organization_id,
333
+ });
334
+
335
+ if (nameExists) {
336
+ throw new BadRequestException(
337
+ 'A List Master with the same name already exists',
338
+ );
339
+ }
340
+
341
+ const createdListMaster = await this.entityServiceImpl.createEntity(
342
+ entityData,
343
+ loggedInUser,
344
+ );
345
+
346
+ if (!createdListMaster) {
347
+ throw new BadRequestException('Failed to create entity');
348
+ }
349
+
350
+ return createdListMaster;
351
+ }
352
+
353
+ async updateEntity(entityData: any, loggedInUser: UserData): Promise<any> {
354
+ return await this.entityServiceImpl.updateEntity(entityData, loggedInUser);
355
+ }
356
+
357
+ async getEntityData(
358
+ entity_type: string,
359
+ id: number,
360
+ loggedInUser,
361
+ ): Promise<any> {
362
+ return await this.entityServiceImpl.getEntityData(
363
+ entity_type,
364
+ id,
365
+ loggedInUser,
366
+ );
367
+ }
368
+
369
+ async getAllListMasterByOrganization(
370
+ organizationId: number,
371
+ search?: string,
372
+ ): Promise<any[]> {
373
+ return await this.listMasterRepo.findAllItems(organizationId, search);
374
+ }
375
+ }