rez_core 5.0.88 → 5.0.90

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 (459) hide show
  1. package/.claude/settings.local.json +26 -0
  2. package/.idea/250218_nodejs_core.iml +9 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/copilot.data.migration.agent.xml +6 -0
  6. package/.idea/copilot.data.migration.ask.xml +6 -0
  7. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  8. package/.idea/copilot.data.migration.edit.xml +6 -0
  9. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.prettierrc +3 -3
  15. package/README.md +99 -99
  16. package/dist/module/auth/guards/role.guard.js +3 -3
  17. package/dist/module/filter/service/filter.service.js +20 -20
  18. package/dist/module/integration/examples/usage.example.js +9 -9
  19. package/dist/module/meta/repository/attribute-master.repository.js +8 -8
  20. package/dist/module/meta/repository/entity-master.repository.js +2 -2
  21. package/dist/module/meta/service/entity-dynamic.service.js +21 -21
  22. package/dist/module/meta/service/entity-list.service.js +3 -3
  23. package/dist/module/meta/service/entity-relation.service.d.ts +1 -3
  24. package/dist/module/meta/service/entity-relation.service.js +22 -31
  25. package/dist/module/meta/service/entity-relation.service.js.map +1 -1
  26. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  27. package/dist/module/meta/service/media-data.service.js +6 -6
  28. package/dist/module/meta/service/resolver.service.js +15 -15
  29. package/dist/module/module/repository/menu.repository.js +5 -5
  30. package/dist/module/module/repository/menu.repository.js.map +1 -1
  31. package/dist/module/module/service/module-access.service.d.ts +3 -1
  32. package/dist/module/module/service/module-access.service.js +11 -4
  33. package/dist/module/module/service/module-access.service.js.map +1 -1
  34. package/dist/module/notification/controller/notification.controller.d.ts +1 -1
  35. package/dist/module/notification/service/notification.service.d.ts +6 -4
  36. package/dist/module/notification/service/notification.service.js +28 -26
  37. package/dist/module/notification/service/notification.service.js.map +1 -1
  38. package/dist/module/user/controller/login.controller.js +18 -18
  39. package/dist/module/workflow/controller/action.controller.d.ts +5 -2
  40. package/dist/module/workflow/controller/form-master.controller.d.ts +4 -1
  41. package/dist/module/workflow/repository/action-data.repository.d.ts +2 -3
  42. package/dist/module/workflow/repository/action-data.repository.js +29 -18
  43. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  44. package/dist/module/workflow/repository/action.repository.d.ts +6 -7
  45. package/dist/module/workflow/repository/action.repository.js +55 -63
  46. package/dist/module/workflow/repository/action.repository.js.map +1 -1
  47. package/dist/module/workflow/repository/comm-template.repository.d.ts +2 -3
  48. package/dist/module/workflow/repository/comm-template.repository.js +15 -9
  49. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -1
  50. package/dist/module/workflow/repository/form-master.repository.d.ts +7 -4
  51. package/dist/module/workflow/repository/form-master.repository.js +14 -11
  52. package/dist/module/workflow/repository/form-master.repository.js.map +1 -1
  53. package/dist/module/workflow/repository/stage-group.repository.d.ts +4 -5
  54. package/dist/module/workflow/repository/stage-group.repository.js +34 -35
  55. package/dist/module/workflow/repository/stage-group.repository.js.map +1 -1
  56. package/dist/module/workflow/repository/stage-movement.repository.d.ts +6 -3
  57. package/dist/module/workflow/repository/stage-movement.repository.js +30 -17
  58. package/dist/module/workflow/repository/stage-movement.repository.js.map +1 -1
  59. package/dist/module/workflow/repository/stage.repository.js +8 -8
  60. package/dist/module/workflow/service/action-template-mapping.service.js +4 -4
  61. package/dist/module/workflow/service/action.service.d.ts +13 -5
  62. package/dist/module/workflow/service/action.service.js +71 -20
  63. package/dist/module/workflow/service/action.service.js.map +1 -1
  64. package/dist/module/workflow/service/entity-modification.service.d.ts +3 -3
  65. package/dist/module/workflow/service/entity-modification.service.js +5 -5
  66. package/dist/module/workflow/service/entity-modification.service.js.map +1 -1
  67. package/dist/module/workflow/service/form-master.service.d.ts +4 -1
  68. package/dist/module/workflow/service/stage-group.service.d.ts +2 -7
  69. package/dist/module/workflow/service/stage-group.service.js +19 -17
  70. package/dist/module/workflow/service/stage-group.service.js.map +1 -1
  71. package/dist/module/workflow/service/stage.service.d.ts +2 -3
  72. package/dist/module/workflow/service/stage.service.js +24 -11
  73. package/dist/module/workflow/service/stage.service.js.map +1 -1
  74. package/dist/module/workflow/service/task.service.d.ts +2 -5
  75. package/dist/module/workflow/service/task.service.js +49 -50
  76. package/dist/module/workflow/service/task.service.js.map +1 -1
  77. package/dist/module/workflow/service/workflow-list-master.service.d.ts +1 -3
  78. package/dist/module/workflow/service/workflow-list-master.service.js +38 -26
  79. package/dist/module/workflow/service/workflow-list-master.service.js.map +1 -1
  80. package/dist/module/workflow/service/workflow-meta.service.d.ts +6 -3
  81. package/dist/module/workflow/service/workflow-meta.service.js +78 -50
  82. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  83. package/dist/module/workflow/service/workflow.service.d.ts +1 -3
  84. package/dist/module/workflow/service/workflow.service.js +10 -6
  85. package/dist/module/workflow/service/workflow.service.js.map +1 -1
  86. package/dist/module/workflow-automation/service/schedule-handler.service.js +9 -9
  87. package/dist/module/workflow-schedule/processors/schedule.processor.d.ts +4 -2
  88. package/dist/module/workflow-schedule/processors/schedule.processor.js +51 -38
  89. package/dist/module/workflow-schedule/processors/schedule.processor.js.map +1 -1
  90. package/dist/module/workflow-schedule/service/workflow-schedule.service.d.ts +2 -3
  91. package/dist/module/workflow-schedule/service/workflow-schedule.service.js +15 -14
  92. package/dist/module/workflow-schedule/service/workflow-schedule.service.js.map +1 -1
  93. package/dist/tsconfig.build.tsbuildinfo +1 -1
  94. package/dist/utils/service/reflection-helper.service.js +2 -2
  95. package/docs/modules/event-driven-integration-design.md +91 -91
  96. package/docs/modules/integration.md +250 -250
  97. package/eslint.config.mjs +34 -34
  98. package/nest-cli.json +14 -14
  99. package/package.json +125 -125
  100. package/server.log +850 -0
  101. package/src/app.controller.ts +12 -12
  102. package/src/app.module.ts +66 -66
  103. package/src/app.service.ts +8 -8
  104. package/src/config/bull.config.ts +69 -69
  105. package/src/config/config.module.ts +17 -17
  106. package/src/config/database.config.ts +48 -48
  107. package/src/constant/global.constant.ts +67 -67
  108. package/src/core.module.ts +91 -91
  109. package/src/decorators/roles.decorator.ts +7 -7
  110. package/src/dtos/response.dto.ts +6 -6
  111. package/src/dtos/response.ts +5 -5
  112. package/src/index.ts +1 -1
  113. package/src/module/auth/auth.module.ts +49 -49
  114. package/src/module/auth/controller/auth.controller.ts +28 -28
  115. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  116. package/src/module/auth/guards/jwt.guard.ts +22 -22
  117. package/src/module/auth/guards/role.guard.ts +68 -68
  118. package/src/module/auth/services/auth.service.ts +56 -56
  119. package/src/module/auth/services/jwt.service.ts +11 -11
  120. package/src/module/auth/strategies/google.strategy.ts +54 -54
  121. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  122. package/src/module/auth/strategies/local.strategy.ts +13 -13
  123. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  124. package/src/module/dashboard/dashboard.module.ts +21 -21
  125. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  126. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  127. package/src/module/dashboard/repository/dashboard.repository.ts +51 -51
  128. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  129. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  130. package/src/module/enterprise/enterprise.module.ts +30 -30
  131. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  132. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  133. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  134. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  135. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  136. package/src/module/enterprise/repository/school.repository.ts +272 -272
  137. package/src/module/enterprise/service/brand.service.ts +5 -5
  138. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  139. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  140. package/src/module/enterprise/service/organization.service.ts +145 -145
  141. package/src/module/entity_json/controller/entity_json.controller.ts +47 -47
  142. package/src/module/entity_json/entity/entityJson.entity.ts +39 -39
  143. package/src/module/entity_json/entity_json.module.ts +18 -18
  144. package/src/module/entity_json/service/entityJson.repository.ts +37 -37
  145. package/src/module/entity_json/service/entity_json.service.ts +234 -234
  146. package/src/module/filter/controller/filter.controller.ts +84 -84
  147. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  148. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  149. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  150. package/src/module/filter/filter.module.ts +33 -33
  151. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  152. package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
  153. package/src/module/filter/service/filter-evaluator.service.ts +82 -82
  154. package/src/module/filter/service/filter.service.ts +1304 -1304
  155. package/src/module/filter/service/saved-filter.service.ts +170 -170
  156. package/src/module/ics/controller/ics.controller.ts +21 -21
  157. package/src/module/ics/dto/ics.dto.ts +55 -55
  158. package/src/module/ics/ics.module.ts +13 -13
  159. package/src/module/ics/service/ics.service.ts +57 -57
  160. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  161. package/src/module/integration/controller/integration.controller.ts +662 -662
  162. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  163. package/src/module/integration/dto/create-config.dto.ts +526 -526
  164. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  165. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  166. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  167. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  168. package/src/module/integration/examples/usage.example.ts +338 -338
  169. package/src/module/integration/factories/base.factory.ts +7 -7
  170. package/src/module/integration/factories/email.factory.ts +49 -49
  171. package/src/module/integration/factories/integration.factory.ts +121 -121
  172. package/src/module/integration/factories/sms.factory.ts +51 -51
  173. package/src/module/integration/factories/telephone.factory.ts +41 -41
  174. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  175. package/src/module/integration/integration.module.ts +110 -110
  176. package/src/module/integration/service/calendar-event.service.ts +118 -118
  177. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  178. package/src/module/integration/service/integration-queue.service.ts +229 -229
  179. package/src/module/integration/service/integration.service.ts +2634 -2634
  180. package/src/module/integration/service/oauth.service.ts +224 -224
  181. package/src/module/integration/service/wrapper.service.ts +716 -716
  182. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  183. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  184. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  185. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  186. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  187. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  188. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  189. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  190. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  191. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  192. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  193. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  194. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  195. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  196. package/src/module/layout/controller/layout.controller.ts +47 -47
  197. package/src/module/layout/entity/header-items.entity.ts +28 -28
  198. package/src/module/layout/entity/header-section.entity.ts +19 -19
  199. package/src/module/layout/layout.module.ts +21 -21
  200. package/src/module/layout/repository/header-items.repository.ts +18 -18
  201. package/src/module/layout/repository/header-section.repository.ts +22 -22
  202. package/src/module/layout/service/header-section.service.ts +25 -25
  203. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  204. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  205. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  206. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  207. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  208. package/src/module/lead/controller/lead.controller.ts +30 -30
  209. package/src/module/lead/lead.module.ts +14 -14
  210. package/src/module/lead/repository/lead.repository.ts +41 -41
  211. package/src/module/lead/service/lead.service.ts +54 -54
  212. package/src/module/linked_attributes/controller/linked_attributes.controller.ts +37 -37
  213. package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
  214. package/src/module/linked_attributes/linked_attributes.module.ts +16 -16
  215. package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
  216. package/src/module/linked_attributes/service/linked_attributes.service.ts +75 -75
  217. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  218. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  219. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  220. package/src/module/listmaster/listmaster.module.ts +46 -46
  221. package/src/module/listmaster/repository/list-master-items.repository.ts +173 -173
  222. package/src/module/listmaster/repository/list-master.repository.ts +56 -56
  223. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  224. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  225. package/src/module/listmaster/service/list-master-item.service.ts +281 -281
  226. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  227. package/src/module/listmaster/service/list-master.service.ts +535 -535
  228. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  229. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  230. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  231. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  232. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  233. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  234. package/src/module/mapper/mapper.module.ts +35 -35
  235. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  236. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  237. package/src/module/mapper/repository/mapper.repository.ts +32 -32
  238. package/src/module/mapper/service/field-mapper.service.ts +269 -269
  239. package/src/module/mapper/service/mapper.service.ts +81 -81
  240. package/src/module/master/controller/master.controller.ts +74 -74
  241. package/src/module/master/service/master.service.ts +483 -483
  242. package/src/module/meta/controller/app-master.controller.ts +38 -38
  243. package/src/module/meta/controller/attribute-master.controller.ts +84 -84
  244. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  245. package/src/module/meta/controller/entity-master.controller.ts +41 -41
  246. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  247. package/src/module/meta/controller/entity.controller.ts +392 -392
  248. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  249. package/src/module/meta/controller/media.controller.ts +107 -107
  250. package/src/module/meta/controller/meta.controller.ts +96 -96
  251. package/src/module/meta/controller/view-master.controller.ts +86 -86
  252. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  253. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  254. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  255. package/src/module/meta/entity/app-master.entity.ts +34 -34
  256. package/src/module/meta/entity/attribute-master.entity.ts +92 -92
  257. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  258. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  259. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  260. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  261. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  262. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  263. package/src/module/meta/entity/media-data.entity.ts +32 -32
  264. package/src/module/meta/entity/preference.entity.ts +62 -62
  265. package/src/module/meta/entity/view-master.entity.ts +41 -41
  266. package/src/module/meta/entity.module.ts +166 -166
  267. package/src/module/meta/repository/app-master.repository.ts +20 -20
  268. package/src/module/meta/repository/attribute-master.repository.ts +156 -156
  269. package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
  270. package/src/module/meta/repository/entity-master.repository.ts +109 -109
  271. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  272. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  273. package/src/module/meta/repository/media-data.repository.ts +50 -50
  274. package/src/module/meta/repository/preference.repository.ts +20 -20
  275. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  276. package/src/module/meta/repository/view-master.repository.ts +42 -42
  277. package/src/module/meta/service/app-master.service.ts +37 -37
  278. package/src/module/meta/service/attribute-master.service.ts +130 -130
  279. package/src/module/meta/service/common.service.ts +9 -9
  280. package/src/module/meta/service/entity-attribute-update.service.ts +28 -28
  281. package/src/module/meta/service/entity-dynamic.service.ts +813 -813
  282. package/src/module/meta/service/entity-list.service.ts +205 -205
  283. package/src/module/meta/service/entity-master.service.ts +171 -171
  284. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  285. package/src/module/meta/service/entity-relation.service.ts +69 -87
  286. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  287. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  288. package/src/module/meta/service/entity-table.service.ts +150 -150
  289. package/src/module/meta/service/entity-validation.service.ts +187 -187
  290. package/src/module/meta/service/entity.service.ts +67 -67
  291. package/src/module/meta/service/field-group.service.ts +103 -103
  292. package/src/module/meta/service/media-data.service.ts +510 -510
  293. package/src/module/meta/service/populate-meta.service.ts +222 -222
  294. package/src/module/meta/service/preference.service.ts +16 -16
  295. package/src/module/meta/service/resolver.service.ts +292 -292
  296. package/src/module/meta/service/section-master.service.ts +104 -104
  297. package/src/module/meta/service/update-form-json.service.ts +22 -22
  298. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  299. package/src/module/meta/service/view-master.service.ts +127 -127
  300. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  301. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  302. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  303. package/src/module/module/controller/menu.controller.ts +15 -15
  304. package/src/module/module/controller/module-access.controller.ts +134 -134
  305. package/src/module/module/entity/menu.entity.ts +43 -43
  306. package/src/module/module/entity/module-access.entity.ts +25 -25
  307. package/src/module/module/entity/module-action.entity.ts +17 -17
  308. package/src/module/module/entity/module.entity.ts +52 -52
  309. package/src/module/module/module.module.ts +42 -42
  310. package/src/module/module/repository/menu.repository.ts +184 -184
  311. package/src/module/module/repository/module-access.repository.ts +344 -344
  312. package/src/module/module/service/menu.service.ts +82 -82
  313. package/src/module/module/service/module-access.service.ts +199 -195
  314. package/src/module/notification/controller/notification.controller.ts +58 -58
  315. package/src/module/notification/controller/otp.controller.ts +117 -117
  316. package/src/module/notification/entity/notification.entity.ts +26 -26
  317. package/src/module/notification/entity/otp.entity.ts +28 -28
  318. package/src/module/notification/firebase-admin.config.ts +22 -22
  319. package/src/module/notification/notification.module.ts +69 -69
  320. package/src/module/notification/repository/otp.repository.ts +27 -27
  321. package/src/module/notification/service/email.service.ts +127 -127
  322. package/src/module/notification/service/notification.service.ts +164 -160
  323. package/src/module/notification/service/otp.service.ts +133 -133
  324. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  325. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  326. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  327. package/src/module/third-party-module/third-party.module.ts +12 -12
  328. package/src/module/user/controller/login.controller.ts +198 -198
  329. package/src/module/user/controller/user.controller.ts +40 -40
  330. package/src/module/user/dto/create-user.dto.ts +62 -62
  331. package/src/module/user/dto/update-user.dto.ts +4 -4
  332. package/src/module/user/entity/role.entity.ts +33 -33
  333. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  334. package/src/module/user/entity/user-session.entity.ts +73 -73
  335. package/src/module/user/entity/user.entity.ts +59 -59
  336. package/src/module/user/repository/role.repository.ts +96 -96
  337. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  338. package/src/module/user/repository/user.repository.ts +50 -50
  339. package/src/module/user/repository/userSession.repository.ts +33 -33
  340. package/src/module/user/service/login.service.ts +326 -326
  341. package/src/module/user/service/role.service.ts +197 -197
  342. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  343. package/src/module/user/service/user-session.service.ts +177 -177
  344. package/src/module/user/service/user.service.ts +368 -368
  345. package/src/module/user/user.module.ts +65 -65
  346. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  347. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  348. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  349. package/src/module/workflow/controller/action.controller.ts +111 -111
  350. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  351. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  352. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  353. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  354. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  355. package/src/module/workflow/controller/stage.controller.ts +50 -50
  356. package/src/module/workflow/controller/task.controller.ts +77 -77
  357. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  358. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  359. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  360. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  361. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  362. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  363. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  364. package/src/module/workflow/entity/action.entity.ts +53 -53
  365. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  366. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  367. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  368. package/src/module/workflow/entity/form.entity.ts +25 -25
  369. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  370. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  371. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  372. package/src/module/workflow/entity/stage.entity.ts +20 -20
  373. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  374. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  375. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  376. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  377. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  378. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  379. package/src/module/workflow/repository/action-data.repository.ts +344 -339
  380. package/src/module/workflow/repository/action.repository.ts +338 -341
  381. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  382. package/src/module/workflow/repository/comm-template.repository.ts +157 -151
  383. package/src/module/workflow/repository/form-master.repository.ts +50 -59
  384. package/src/module/workflow/repository/stage-group.repository.ts +186 -197
  385. package/src/module/workflow/repository/stage-movement.repository.ts +256 -253
  386. package/src/module/workflow/repository/stage.repository.ts +160 -160
  387. package/src/module/workflow/repository/task.repository.ts +151 -151
  388. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  389. package/src/module/workflow/service/action-category.service.ts +33 -33
  390. package/src/module/workflow/service/action-data.service.ts +62 -62
  391. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  392. package/src/module/workflow/service/action-template-mapping.service.ts +131 -131
  393. package/src/module/workflow/service/action.service.ts +306 -279
  394. package/src/module/workflow/service/activity-log.service.ts +107 -107
  395. package/src/module/workflow/service/comm-template.service.ts +180 -180
  396. package/src/module/workflow/service/entity-modification.service.ts +61 -61
  397. package/src/module/workflow/service/form-master.service.ts +35 -35
  398. package/src/module/workflow/service/populate-workflow.service.ts +320 -320
  399. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  400. package/src/module/workflow/service/stage-group.service.ts +344 -342
  401. package/src/module/workflow/service/stage.service.ts +207 -199
  402. package/src/module/workflow/service/task.service.ts +546 -549
  403. package/src/module/workflow/service/workflow-list-master.service.ts +68 -60
  404. package/src/module/workflow/service/workflow-meta.service.ts +639 -635
  405. package/src/module/workflow/service/workflow.service.ts +213 -209
  406. package/src/module/workflow/workflow.module.ts +180 -180
  407. package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
  408. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
  409. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  410. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +40 -40
  411. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  412. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  413. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  414. package/src/module/workflow-automation/service/schedule-handler.service.ts +168 -168
  415. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
  416. package/src/module/workflow-automation/service/workflow-automation.service.ts +515 -515
  417. package/src/module/workflow-automation/workflow-automation.module.ts +54 -54
  418. package/src/module/workflow-schedule/INSTALLATION.md +244 -244
  419. package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
  420. package/src/module/workflow-schedule/README.md +422 -422
  421. package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
  422. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +255 -255
  423. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
  424. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
  425. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
  426. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
  427. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
  428. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
  429. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
  430. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
  431. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +53 -53
  432. package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
  433. package/src/module/workflow-schedule/processors/schedule.processor.ts +620 -584
  434. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +598 -600
  435. package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
  436. package/src/resources/dev.properties.yaml +31 -31
  437. package/src/resources/local.properties.yaml +27 -27
  438. package/src/resources/properties.module.ts +12 -12
  439. package/src/resources/properties.yaml.ts +11 -11
  440. package/src/resources/uat.properties.yaml +31 -31
  441. package/src/table.config.ts +133 -133
  442. package/src/utils/dto/excel-data.dto.ts +14 -14
  443. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  444. package/src/utils/service/base64util.service.ts +18 -18
  445. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  446. package/src/utils/service/codeGenerator.service.ts +22 -22
  447. package/src/utils/service/dateUtil.service.ts +17 -17
  448. package/src/utils/service/encryptUtil.service.ts +97 -97
  449. package/src/utils/service/excel-helper.service.ts +72 -72
  450. package/src/utils/service/excelUtil.service.ts +15 -15
  451. package/src/utils/service/file-util.service.ts +11 -11
  452. package/src/utils/service/json-util.service.ts +23 -23
  453. package/src/utils/service/loggingUtil.service.ts +88 -88
  454. package/src/utils/service/reflection-helper.service.ts +62 -62
  455. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  456. package/src/utils/utils.module.ts +27 -27
  457. package/tsconfig.build.json +4 -4
  458. package/tsconfig.json +24 -24
  459. package/.vscode/extensions.json +0 -5
@@ -1,341 +1,338 @@
1
- import {
2
- BadRequestException,
3
- Inject,
4
- Injectable,
5
- NotFoundException,
6
- } from '@nestjs/common';
7
- import { InjectRepository } from '@nestjs/typeorm';
8
- import { DataSource, In, Repository } from 'typeorm';
9
- import { ActionEntity } from '../entity/action.entity';
10
- import { UserData } from 'src/module/user/entity/user.entity';
11
- import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
12
-
13
- @Injectable()
14
- export class ActionRepository {
15
- constructor(
16
- @InjectRepository(ActionEntity)
17
- private readonly actionRepository: Repository<ActionEntity>,
18
- private readonly dataSource: DataSource,
19
- private readonly reflectionHelper: ReflectionHelper,
20
- ) {
21
- }
22
-
23
- async getReasonCode(loggedInUser: UserData): Promise<any> {
24
- const { organization_id } = loggedInUser;
25
- const result = await this.dataSource.query(
26
- `
27
- SELECT name, type
28
- FROM frm_list_master
29
- WHERE organization_id = $1
30
- AND source = 'master'
31
- `,
32
- [organization_id],
33
- );
34
-
35
- const formatted = result.map((item: any) => ({
36
- label: item.name,
37
- value: item.type,
38
- }));
39
-
40
- return formatted;
41
- }
42
-
43
- async defaultReasonCode(list_type: string, loggedInUser: UserData) {
44
- const { organization_id } = loggedInUser;
45
- if (!list_type) {
46
- throw new BadRequestException('list_type is required');
47
- }
48
- const result = await this.dataSource.query(
49
- `
50
- SELECT name, id
51
- FROM frm_list_master_items
52
- WHERE listtype = $1
53
- AND organization_id = $2
54
- `,
55
- [list_type, organization_id],
56
- );
57
-
58
- // Format as array of key-value pairs
59
- return result.map((row: any) => ({
60
- label: row.name,
61
- value: row.id,
62
- }));
63
- }
64
-
65
- async getActions(loggedInUser: UserData, stage_id: number) {
66
- const { organization_id } = loggedInUser;
67
-
68
- const workflowStageActionRepo = this.reflectionHelper.getRepoService('StageActionMapping');
69
-
70
- // Step 1: Get all action_ids for the provided stage_id
71
- const stageActions = await workflowStageActionRepo.find({
72
- where: {
73
- stage_id: stage_id,
74
- },
75
- });
76
- if (!stageActions?.length) return [];
77
-
78
- const actionIds = stageActions.map((sa) => sa.action_id);
79
- const mappingIds = stageActions.map((sa) => sa.id);
80
-
81
- // Step 2: Get template codes with mapping IDs
82
- const workflowActionTemplateMappingRepo = this.reflectionHelper.getRepoService('ActionTemplateMapping');
83
-
84
- const templateMappings = await workflowActionTemplateMappingRepo.find({
85
- where: {
86
- stg_act_mapping_id: In(mappingIds),
87
- },
88
- });
89
-
90
- const templateCodes = templateMappings.map((tm) => tm.template_code);
91
-
92
- // Step 3: Fetch template names from frm_wf_comm_template
93
- const templateCodeToName: Record<string, string> = {};
94
-
95
- const workflowCommTemplateRepo = this.reflectionHelper.getRepoService('CommTemplate');
96
-
97
- if (templateCodes.length > 0) {
98
- const templates = await workflowCommTemplateRepo.find({
99
- where: {
100
- code: In(templateCodes),
101
- organization_id: organization_id,
102
- },
103
- });
104
-
105
- templates.forEach((tpl) => {
106
- templateCodeToName[tpl.code] = tpl.name;
107
- });
108
- }
109
-
110
- // Step 4: Build map of mapping_id → template names
111
- const mappingIdToTemplates: Record<number, string[]> = {};
112
-
113
- for (const tm of templateMappings) {
114
- const mappingId = tm.stg_act_mapping_id;
115
- const name = templateCodeToName[tm.template_code];
116
- if (name) {
117
- if (!mappingIdToTemplates[mappingId]) {
118
- mappingIdToTemplates[mappingId] = [];
119
- }
120
- mappingIdToTemplates[mappingId].push(name);
121
- }
122
- }
123
-
124
- // Step 5: Build action_id → template names using mappingIdToTemplates + stageActions
125
- const actionIdToTemplates: Record<number, string[]> = {};
126
-
127
- for (const sa of stageActions) {
128
- const mappingId = sa.id;
129
- const templates = mappingIdToTemplates[mappingId];
130
- if (templates?.length) {
131
- if (!actionIdToTemplates[sa.action_id]) {
132
- actionIdToTemplates[sa.action_id] = [];
133
- }
134
- actionIdToTemplates[sa.action_id].push(...templates);
135
- }
136
- }
137
-
138
- // Step 6: Fetch action details
139
- const workflowActionRepo = this.reflectionHelper.getRepoService('ActionEntity');
140
-
141
- const actionResults = await workflowActionRepo
142
- .createQueryBuilder()
143
- .select([
144
- 'DISTINCT ON (a.id) a.*',
145
- 'ac.name AS action_category',
146
- 'ac.modalname AS modalname',
147
- 'ar.name AS action_requirement',
148
- ])
149
- .from('frm_wf_action', 'a')
150
- .leftJoin('frm_wf_action_category', 'ac', 'ac.id::text = a.action_category')
151
- .leftJoin(
152
- 'frm_list_master_items',
153
- 'ar',
154
- `ar.id::text = a.action_requirement
155
- AND ar.listtype = 'ACRQ'
156
- AND ar.organization_id = :orgId`,
157
- { orgId: organization_id },
158
- )
159
- .where('a.organization_id = :orgId', { orgId: organization_id })
160
- .andWhere('a.id::text IN (:...actionIds)', { actionIds })
161
- .getRawMany();
162
-
163
- // Step 7: Enrich result with template field
164
- const enrichedResult = actionResults.map((row) => {
165
- const actionId = Number(row.id); // Ensure numeric ID match
166
- const templates = actionIdToTemplates[actionId] || [];
167
- const uniqueTemplates = [...new Set(templates)]; // remove duplicates
168
-
169
- return {
170
- ...row,
171
- template: uniqueTemplates.join(', '),
172
- };
173
- });
174
-
175
- return enrichedResult;
176
- }
177
-
178
- async getDependentActions(
179
- loggedInUser: UserData,
180
- stage_id: number,
181
- action_id?: number,
182
- ) {
183
- // Step 1: Get all action_ids for the provided stage_id
184
- let stageActionMappingRepo = this.reflectionHelper.getRepoService('StageActionMapping');
185
-
186
- const stageActions = await stageActionMappingRepo.find({
187
- where: {
188
- stage_id: stage_id,
189
- },
190
- });
191
-
192
- if (!stageActions?.length) return [];
193
-
194
- const actionIds = stageActions.map((sa) => sa.action_id);
195
-
196
- // Step 2: Fetch action details except the provided action_id incase it is provided
197
- const filteredActionIds = action_id
198
- ? actionIds.filter((id) => id != action_id)
199
- : actionIds;
200
-
201
- let actionResults;
202
-
203
- if (filteredActionIds.length === 0) {
204
- return [];
205
- }
206
-
207
- const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
208
- actionResults = await actionRepo.find({
209
- where: {
210
- id: In(actionIds)
211
- }
212
- });
213
-
214
- // Step 3: Format result
215
- const enrichedResult = actionResults.map((row) => ({
216
- value: row.action_id,
217
- label: row.action_name,
218
- }));
219
-
220
- return enrichedResult;
221
- }
222
-
223
- async getAction(
224
- organization_id: number,
225
- stage_id: number,
226
- mapped_entity_id: number,
227
- mapped_entity_type: string,
228
- ) {
229
- // Step 1: Get all action mappings for the stage
230
-
231
- const stageActionMappingRepo =
232
- this.reflectionHelper.getRepoService('StageActionMapping');
233
- const stageActions = await stageActionMappingRepo.find({
234
- where: {
235
- stage_id: stage_id,
236
- },
237
- });
238
-
239
- if (!stageActions?.length) {
240
- return [
241
- {
242
- value: '0',
243
- label: 'Generic',
244
- },
245
- ];
246
- }
247
-
248
- const actionIds = stageActions.map((sa) => sa.action_id);
249
-
250
- // Step 2: Fetch all actions with category details
251
- const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
252
-
253
- const actions = await actionRepo
254
- .createQueryBuilder("a")
255
- .select([
256
- "a.id AS action_id",
257
- "a.name AS action_name",
258
- "a.reason_code AS action_reason_code",
259
- "a.default_reason_code AS default_reason_code",
260
- "a.default_value AS default_value",
261
- "a.mode AS mode",
262
- "a.action_category AS action_category_id",
263
- "ac.reason_code AS category_reason_code",
264
- "ac.modalname AS modalname",
265
- "ac.logo AS logo",
266
- "ac.name AS action_category_name",
267
- "a.dependent_action_id AS dependent_action_id",
268
- ])
269
- .leftJoin(
270
- "frm_wf_action_category",
271
- "ac",
272
- "ac.id = a.action_category::bigint"
273
- )
274
- .where("a.organization_id = :orgId", { orgId: organization_id })
275
- .andWhere("a.id IN (:...actionIds)", { actionIds })
276
- .orderBy("a.sequence", "ASC")
277
- .getRawMany();
278
-
279
- // Step 3: Fetch action_data
280
- const actionDataRepo = this.reflectionHelper.getRepoService('ActionDataEntity');
281
-
282
- const actionData = await actionDataRepo
283
- .createQueryBuilder("ad")
284
- .select([
285
- "ad.action_id AS action_id",
286
- "ad.is_current AS is_current",
287
- "ad.is_mandatory AS is_mandatory",
288
- "ad.is_done AS is_done",
289
- ])
290
- .where("ad.stage_id = :stageId", { stageId: stage_id })
291
- .andWhere("ad.action_id IN (:...actionIds)", { actionIds })
292
- .andWhere("ad.mapped_entity_id = :mapped_entity_id", { mapped_entity_id })
293
- .andWhere("ad.mapped_entity_type = :mapped_entity_type", {
294
- mapped_entity_type,
295
- })
296
- .getRawMany();
297
-
298
- const actionIdToData = actionData.reduce((acc, row) => {
299
- acc[row.action_id] = {
300
- is_current: row.is_current === 'Y',
301
- is_mandatory: row.is_mandatory === 1,
302
- is_done: row.is_done === 1,
303
- };
304
- return acc;
305
- }, {});
306
-
307
- // Step 5: Enrich actions
308
- const enrichedResult = actions.map((row) => {
309
- const data = actionIdToData[row.action_id];
310
-
311
- const reason_code =
312
- row.action_reason_code && row.action_reason_code.trim()
313
- ? row.action_reason_code
314
- : row.category_reason_code;
315
-
316
- return {
317
- value: row.action_id,
318
- dependent_action_id: row.dependent_action_id,
319
- label: row.action_name,
320
- modalname: row.modalname,
321
- logo: row.logo,
322
- mode: row.mode,
323
- name: row.action_category_name,
324
- reason_code,
325
- default_reason_code: row.default_reason_code,
326
- is_default: row.default_value === 1,
327
- is_current: data?.is_current ?? false,
328
- is_done: data?.is_done ?? false,
329
- is_mandatory: data?.is_mandatory ?? false,
330
- };
331
- });
332
-
333
- // Step 6: Add fallback option
334
- enrichedResult.push({
335
- value: '0',
336
- label: 'Generic',
337
- } as any);
338
-
339
- return enrichedResult;
340
- }
341
- }
1
+ import { BadRequestException, Injectable } from '@nestjs/common';
2
+ import { In } from 'typeorm';
3
+ import { UserData } from 'src/module/user/entity/user.entity';
4
+ import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
5
+
6
+ @Injectable()
7
+ export class ActionRepository {
8
+ constructor(private readonly reflectionHelper: ReflectionHelper) {}
9
+
10
+ async getReasonCode(loggedInUser: UserData): Promise<any> {
11
+ const { organization_id } = loggedInUser;
12
+ const listMasterItemsRepo =
13
+ this.reflectionHelper.getRepoService('ListMasterItems');
14
+ const result = await listMasterItemsRepo.find({
15
+ where: {
16
+ organization_id,
17
+ source: 'master',
18
+ },
19
+ });
20
+
21
+ const formatted = result.map((item: any) => ({
22
+ label: item.name,
23
+ value: item.type,
24
+ }));
25
+
26
+ return formatted;
27
+ }
28
+
29
+ async defaultReasonCode(list_type: string, loggedInUser: UserData) {
30
+ const { organization_id } = loggedInUser;
31
+ if (!list_type) {
32
+ throw new BadRequestException('list_type is required');
33
+ }
34
+
35
+ const listMasterItemsRepo =
36
+ this.reflectionHelper.getRepoService('ListMasterItems');
37
+
38
+ const result = await listMasterItemsRepo.find({
39
+ where: {
40
+ listtype: list_type,
41
+ organization_id,
42
+ },
43
+ });
44
+
45
+ // Format as array of key-value pairs
46
+ return result.map((row: any) => ({
47
+ label: row.name,
48
+ value: row.id,
49
+ }));
50
+ }
51
+
52
+ async getActions(loggedInUser: UserData, stage_id: number) {
53
+ const { organization_id } = loggedInUser;
54
+
55
+ const workflowStageActionRepo =
56
+ this.reflectionHelper.getRepoService('StageActionMapping');
57
+
58
+ // Step 1: Get all action_ids for the provided stage_id
59
+ const stageActions = await workflowStageActionRepo.find({
60
+ where: {
61
+ stage_id: stage_id,
62
+ },
63
+ });
64
+ if (!stageActions?.length) return [];
65
+
66
+ const actionIds = stageActions.map((sa) => sa.action_id);
67
+ const mappingIds = stageActions.map((sa) => sa.id);
68
+
69
+ // Step 2: Get template codes with mapping IDs
70
+ const workflowActionTemplateMappingRepo =
71
+ this.reflectionHelper.getRepoService('ActionTemplateMapping');
72
+
73
+ const templateMappings = await workflowActionTemplateMappingRepo.find({
74
+ where: {
75
+ stg_act_mapping_id: In(mappingIds),
76
+ },
77
+ });
78
+
79
+ const templateCodes = templateMappings.map((tm) => tm.template_code);
80
+
81
+ // Step 3: Fetch template names from frm_wf_comm_template
82
+ const templateCodeToName: Record<string, string> = {};
83
+
84
+ const workflowCommTemplateRepo =
85
+ this.reflectionHelper.getRepoService('CommTemplate');
86
+
87
+ if (templateCodes.length > 0) {
88
+ const templates = await workflowCommTemplateRepo.find({
89
+ where: {
90
+ code: In(templateCodes),
91
+ organization_id: organization_id,
92
+ },
93
+ });
94
+
95
+ templates.forEach((tpl) => {
96
+ templateCodeToName[tpl.code] = tpl.name;
97
+ });
98
+ }
99
+
100
+ // Step 4: Build map of mapping_id → template names
101
+ const mappingIdToTemplates: Record<number, string[]> = {};
102
+
103
+ for (const tm of templateMappings) {
104
+ const mappingId = tm.stg_act_mapping_id;
105
+ const name = templateCodeToName[tm.template_code];
106
+ if (name) {
107
+ if (!mappingIdToTemplates[mappingId]) {
108
+ mappingIdToTemplates[mappingId] = [];
109
+ }
110
+ mappingIdToTemplates[mappingId].push(name);
111
+ }
112
+ }
113
+
114
+ // Step 5: Build action_id → template names using mappingIdToTemplates + stageActions
115
+ const actionIdToTemplates: Record<number, string[]> = {};
116
+
117
+ for (const sa of stageActions) {
118
+ const mappingId = sa.id;
119
+ const templates = mappingIdToTemplates[mappingId];
120
+ if (templates?.length) {
121
+ if (!actionIdToTemplates[sa.action_id]) {
122
+ actionIdToTemplates[sa.action_id] = [];
123
+ }
124
+ actionIdToTemplates[sa.action_id].push(...templates);
125
+ }
126
+ }
127
+
128
+ // Step 6: Fetch action details
129
+ const workflowActionRepo =
130
+ this.reflectionHelper.getRepoService('ActionEntity');
131
+
132
+ const actionResults = await workflowActionRepo
133
+ .createQueryBuilder()
134
+ .select([
135
+ 'DISTINCT ON (a.id) a.*',
136
+ 'ac.name AS action_category',
137
+ 'ac.modalname AS modalname',
138
+ 'ar.name AS action_requirement',
139
+ ])
140
+ .from('frm_wf_action', 'a')
141
+ .leftJoin(
142
+ 'frm_wf_action_category',
143
+ 'ac',
144
+ 'ac.id::text = a.action_category',
145
+ )
146
+ .leftJoin(
147
+ 'frm_list_master_items',
148
+ 'ar',
149
+ `ar.id::text = a.action_requirement
150
+ AND ar.listtype = 'ACRQ'
151
+ AND ar.organization_id = :orgId`,
152
+ { orgId: organization_id },
153
+ )
154
+ .where('a.organization_id = :orgId', { orgId: organization_id })
155
+ .andWhere('a.id::text IN (:...actionIds)', { actionIds })
156
+ .getRawMany();
157
+
158
+ // Step 7: Enrich result with template field
159
+ const enrichedResult = actionResults.map((row) => {
160
+ const actionId = Number(row.id); // Ensure numeric ID match
161
+ const templates = actionIdToTemplates[actionId] || [];
162
+ const uniqueTemplates = [...new Set(templates)]; // remove duplicates
163
+
164
+ return {
165
+ ...row,
166
+ template: uniqueTemplates.join(', '),
167
+ };
168
+ });
169
+
170
+ return enrichedResult;
171
+ }
172
+
173
+ async getDependentActions(
174
+ loggedInUser: UserData,
175
+ stage_id: number,
176
+ action_id?: number,
177
+ ) {
178
+ // Step 1: Get all action_ids for the provided stage_id
179
+ let stageActionMappingRepo =
180
+ this.reflectionHelper.getRepoService('StageActionMapping');
181
+
182
+ const stageActions = await stageActionMappingRepo.find({
183
+ where: {
184
+ stage_id: stage_id,
185
+ },
186
+ });
187
+
188
+ if (!stageActions?.length) return [];
189
+
190
+ const actionIds = stageActions.map((sa) => sa.action_id);
191
+
192
+ // Step 2: Fetch action details except the provided action_id incase it is provided
193
+ const filteredActionIds = action_id
194
+ ? actionIds.filter((id) => id != action_id)
195
+ : actionIds;
196
+
197
+ let actionResults;
198
+
199
+ if (filteredActionIds.length === 0) {
200
+ return [];
201
+ }
202
+
203
+ const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
204
+ actionResults = await actionRepo.find({
205
+ where: {
206
+ id: In(actionIds),
207
+ },
208
+ });
209
+
210
+ // Step 3: Format result
211
+ const enrichedResult = actionResults.map((row) => ({
212
+ value: row.action_id,
213
+ label: row.action_name,
214
+ }));
215
+
216
+ return enrichedResult;
217
+ }
218
+
219
+ async getAction(
220
+ organization_id: number,
221
+ stage_id: number,
222
+ mapped_entity_id: number,
223
+ mapped_entity_type: string,
224
+ ) {
225
+ // Step 1: Get all action mappings for the stage
226
+
227
+ const stageActionMappingRepo =
228
+ this.reflectionHelper.getRepoService('StageActionMapping');
229
+ const stageActions = await stageActionMappingRepo.find({
230
+ where: {
231
+ stage_id: stage_id,
232
+ },
233
+ });
234
+
235
+ if (!stageActions?.length) {
236
+ return [
237
+ {
238
+ value: '0',
239
+ label: 'Generic',
240
+ },
241
+ ];
242
+ }
243
+
244
+ const actionIds = stageActions.map((sa) => sa.action_id);
245
+
246
+ // Step 2: Fetch all actions with category details
247
+ const actionRepo = this.reflectionHelper.getRepoService('ActionEntity');
248
+
249
+ const actions = await actionRepo
250
+ .createQueryBuilder('a')
251
+ .select([
252
+ 'a.id AS action_id',
253
+ 'a.name AS action_name',
254
+ 'a.reason_code AS action_reason_code',
255
+ 'a.default_reason_code AS default_reason_code',
256
+ 'a.default_value AS default_value',
257
+ 'a.mode AS mode',
258
+ 'a.action_category AS action_category_id',
259
+ 'ac.reason_code AS category_reason_code',
260
+ 'ac.modalname AS modalname',
261
+ 'ac.logo AS logo',
262
+ 'ac.name AS action_category_name',
263
+ 'a.dependent_action_id AS dependent_action_id',
264
+ ])
265
+ .leftJoin(
266
+ 'frm_wf_action_category',
267
+ 'ac',
268
+ 'ac.id = a.action_category::bigint',
269
+ )
270
+ .where('a.organization_id = :orgId', { orgId: organization_id })
271
+ .andWhere('a.id IN (:...actionIds)', { actionIds })
272
+ .orderBy('a.sequence', 'ASC')
273
+ .getRawMany();
274
+
275
+ // Step 3: Fetch action_data
276
+ const actionDataRepo =
277
+ this.reflectionHelper.getRepoService('ActionDataEntity');
278
+
279
+ const actionData = await actionDataRepo
280
+ .createQueryBuilder('ad')
281
+ .select([
282
+ 'ad.action_id AS action_id',
283
+ 'ad.is_current AS is_current',
284
+ 'ad.is_mandatory AS is_mandatory',
285
+ 'ad.is_done AS is_done',
286
+ ])
287
+ .where('ad.stage_id = :stageId', { stageId: stage_id })
288
+ .andWhere('ad.action_id IN (:...actionIds)', { actionIds })
289
+ .andWhere('ad.mapped_entity_id = :mapped_entity_id', { mapped_entity_id })
290
+ .andWhere('ad.mapped_entity_type = :mapped_entity_type', {
291
+ mapped_entity_type,
292
+ })
293
+ .getRawMany();
294
+
295
+ const actionIdToData = actionData.reduce((acc, row) => {
296
+ acc[row.action_id] = {
297
+ is_current: row.is_current === 'Y',
298
+ is_mandatory: row.is_mandatory,
299
+ is_done: row.is_done,
300
+ };
301
+ return acc;
302
+ }, {});
303
+
304
+ // Step 5: Enrich actions
305
+ const enrichedResult = actions.map((row) => {
306
+ const data = actionIdToData[row.action_id];
307
+
308
+ const reason_code =
309
+ row.action_reason_code && row.action_reason_code.trim()
310
+ ? row.action_reason_code
311
+ : row.category_reason_code;
312
+
313
+ return {
314
+ value: row.action_id,
315
+ dependent_action_id: row.dependent_action_id,
316
+ label: row.action_name,
317
+ modalname: row.modalname,
318
+ logo: row.logo,
319
+ mode: row.mode,
320
+ name: row.action_category_name,
321
+ reason_code,
322
+ default_reason_code: row.default_reason_code,
323
+ is_default: row.default_value,
324
+ is_current: data?.is_current,
325
+ is_done: data?.is_done,
326
+ is_mandatory: data?.is_mandatory,
327
+ };
328
+ });
329
+
330
+ // Step 6: Add fallback option
331
+ enrichedResult.push({
332
+ value: '0',
333
+ label: 'Generic',
334
+ } as any);
335
+
336
+ return enrichedResult;
337
+ }
338
+ }