rez_core 5.0.53 → 5.0.54

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