rez_core 3.1.136 → 3.1.138

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