rez_core 5.0.62 → 5.0.63

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