rez_core 3.1.158 → 3.1.160

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