rez_core 5.0.31 → 5.0.33

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