rez_core 3.1.120 → 3.1.121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/.prettierrc +3 -3
  2. package/.vscode/extensions.json +5 -0
  3. package/README.md +99 -99
  4. package/dist/module/auth/guards/role.guard.js +3 -3
  5. package/dist/module/auth/services/auth.service.js +2 -2
  6. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  7. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  8. package/dist/module/filter/service/filter.service.js +7 -7
  9. package/dist/module/integration/examples/usage.example.js +9 -9
  10. package/dist/module/integration/service/integration.service.js +1 -1
  11. package/dist/module/integration/service/wrapper.service.js +17 -17
  12. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  13. package/dist/module/listmaster/service/list-master.service.js +2 -2
  14. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  15. package/dist/module/mapper/service/mapper.service.js +2 -2
  16. package/dist/module/meta/service/entity-dynamic.service.js +18 -18
  17. package/dist/module/meta/service/entity-list.service.js +3 -3
  18. package/dist/module/meta/service/entity-master.service.js +3 -3
  19. package/dist/module/meta/service/entity-relation.service.js +11 -11
  20. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  21. package/dist/module/meta/service/resolver.service.js +3 -3
  22. package/dist/module/meta/service/view-master.service.js +1 -1
  23. package/dist/module/meta/service/view-master.service.js.map +1 -1
  24. package/dist/module/module/repository/menu.repository.js +12 -12
  25. package/dist/module/notification/service/notification.service.js +12 -12
  26. package/dist/module/user/controller/login.controller.js +18 -18
  27. package/dist/module/user/service/role.service.js +4 -4
  28. package/dist/module/user/service/user-session.service.js +2 -2
  29. package/dist/module/workflow/repository/action.repository.js +16 -16
  30. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  31. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  32. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  33. package/dist/module/workflow/repository/stage-movement.repository.js +11 -11
  34. package/dist/module/workflow/repository/stage.repository.js +8 -8
  35. package/dist/module/workflow/service/action-template-mapping.service.js +10 -10
  36. package/dist/module/workflow/service/action.service.js +7 -7
  37. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  38. package/dist/module/workflow/service/stage-group.service.js +5 -5
  39. package/dist/module/workflow/service/stage.service.js +2 -2
  40. package/dist/module/workflow/service/task.service.js +33 -33
  41. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  42. package/dist/module/workflow/service/workflow-meta.service.js +50 -50
  43. package/dist/module/workflow/service/workflow.service.js +2 -2
  44. package/dist/tsconfig.build.tsbuildinfo +1 -1
  45. package/dist/utils/service/reflection-helper.service.js +2 -2
  46. package/docs/modules/event-driven-integration-design.md +91 -91
  47. package/docs/modules/integration.md +250 -250
  48. package/eslint.config.mjs +34 -34
  49. package/nest-cli.json +14 -14
  50. package/package.json +118 -118
  51. package/src/app.controller.ts +12 -12
  52. package/src/app.module.ts +49 -49
  53. package/src/app.service.ts +8 -8
  54. package/src/config/config.module.ts +18 -18
  55. package/src/config/database.config.ts +23 -23
  56. package/src/constant/global.constant.ts +67 -67
  57. package/src/core.module.ts +81 -81
  58. package/src/decorators/roles.decorator.ts +7 -7
  59. package/src/dtos/response.dto.ts +6 -6
  60. package/src/dtos/response.ts +5 -5
  61. package/src/index.ts +1 -1
  62. package/src/module/auth/auth.module.ts +49 -49
  63. package/src/module/auth/controller/auth.controller.ts +28 -28
  64. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  65. package/src/module/auth/guards/jwt.guard.ts +22 -22
  66. package/src/module/auth/guards/role.guard.ts +68 -68
  67. package/src/module/auth/services/auth.service.ts +50 -50
  68. package/src/module/auth/services/jwt.service.ts +11 -11
  69. package/src/module/auth/strategies/google.strategy.ts +54 -54
  70. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  71. package/src/module/auth/strategies/local.strategy.ts +13 -13
  72. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  73. package/src/module/dashboard/dashboard.module.ts +21 -21
  74. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  75. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  76. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  77. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  78. package/src/module/dev/dev.module.ts +12 -12
  79. package/src/module/dev/service/dev.service.ts +7 -7
  80. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  81. package/src/module/enterprise/enterprise.module.ts +30 -30
  82. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  83. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  84. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  85. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  86. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  87. package/src/module/enterprise/repository/school.repository.ts +282 -282
  88. package/src/module/enterprise/service/brand.service.ts +5 -5
  89. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  90. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  91. package/src/module/enterprise/service/organization.service.ts +145 -145
  92. package/src/module/filter/controller/filter.controller.ts +84 -84
  93. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  94. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  95. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  96. package/src/module/filter/filter.module.ts +31 -31
  97. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  98. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  99. package/src/module/filter/service/filter.service.ts +841 -841
  100. package/src/module/filter/service/saved-filter.service.ts +170 -170
  101. package/src/module/ics/controller/ics.controller.ts +21 -21
  102. package/src/module/ics/dto/ics.dto.ts +55 -55
  103. package/src/module/ics/ics.module.ts +13 -13
  104. package/src/module/ics/service/ics.service.ts +60 -60
  105. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  106. package/src/module/integration/controller/integration.controller.ts +662 -662
  107. package/src/module/integration/controller/wrapper.controller.ts +39 -39
  108. package/src/module/integration/dto/create-config.dto.ts +526 -526
  109. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  110. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  111. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  112. package/src/module/integration/entity/user-integration.entity.ts +70 -70
  113. package/src/module/integration/examples/usage.example.ts +338 -338
  114. package/src/module/integration/factories/base.factory.ts +7 -7
  115. package/src/module/integration/factories/email.factory.ts +49 -49
  116. package/src/module/integration/factories/integration.factory.ts +121 -121
  117. package/src/module/integration/factories/sms.factory.ts +51 -51
  118. package/src/module/integration/factories/telephone.factory.ts +41 -41
  119. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  120. package/src/module/integration/integration.module.ts +110 -110
  121. package/src/module/integration/service/calendar-event.service.ts +118 -118
  122. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  123. package/src/module/integration/service/integration-queue.service.ts +229 -229
  124. package/src/module/integration/service/integration.service.ts +2557 -2557
  125. package/src/module/integration/service/oauth.service.ts +224 -224
  126. package/src/module/integration/service/wrapper.service.ts +373 -373
  127. package/src/module/integration/strategies/email/gmail-api.strategy.ts +288 -288
  128. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  129. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  130. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +262 -262
  131. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  132. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  133. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  134. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  135. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  136. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  137. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  138. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +371 -371
  139. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  140. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  141. package/src/module/layout/controller/layout.controller.ts +47 -47
  142. package/src/module/layout/entity/header-items.entity.ts +28 -28
  143. package/src/module/layout/entity/header-section.entity.ts +19 -19
  144. package/src/module/layout/layout.module.ts +21 -21
  145. package/src/module/layout/repository/header-items.repository.ts +18 -18
  146. package/src/module/layout/repository/header-section.repository.ts +22 -22
  147. package/src/module/layout/service/header-section.service.ts +25 -25
  148. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  149. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  150. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  151. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  152. package/src/module/layout_preference/service/layout_preference.service.ts +140 -140
  153. package/src/module/lead/controller/lead.controller.ts +30 -30
  154. package/src/module/lead/lead.module.ts +14 -14
  155. package/src/module/lead/repository/lead.repository.ts +41 -41
  156. package/src/module/lead/service/lead.service.ts +54 -54
  157. package/src/module/listmaster/controller/list-master.controller.ts +143 -143
  158. package/src/module/listmaster/entity/list-master-items.entity.ts +41 -41
  159. package/src/module/listmaster/entity/list-master.entity.ts +32 -32
  160. package/src/module/listmaster/listmaster.module.ts +30 -30
  161. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  162. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  163. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  164. package/src/module/listmaster/service/list-master.service.ts +360 -360
  165. package/src/module/mapper/controller/field-mapper.controller.ts +69 -69
  166. package/src/module/mapper/controller/mapper.controller.ts +14 -14
  167. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  168. package/src/module/mapper/entity/field-lovs.entity.ts +20 -20
  169. package/src/module/mapper/entity/field-mapper.entity.ts +37 -37
  170. package/src/module/mapper/entity/mapper.entity.ts +17 -17
  171. package/src/module/mapper/mapper.module.ts +34 -34
  172. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  173. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  174. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  175. package/src/module/mapper/service/field-mapper.service.ts +223 -223
  176. package/src/module/mapper/service/mapper.service.ts +72 -72
  177. package/src/module/master/controller/master.controller.ts +74 -74
  178. package/src/module/master/service/master.service.ts +486 -486
  179. package/src/module/meta/controller/app-master.controller.ts +38 -38
  180. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  181. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  182. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  183. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  184. package/src/module/meta/controller/entity.controller.ts +385 -385
  185. package/src/module/meta/controller/media.controller.ts +82 -82
  186. package/src/module/meta/controller/meta.controller.ts +96 -96
  187. package/src/module/meta/controller/view-master.controller.ts +86 -86
  188. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  189. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  190. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  191. package/src/module/meta/entity/app-master.entity.ts +34 -34
  192. package/src/module/meta/entity/attribute-master.entity.ts +87 -87
  193. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  194. package/src/module/meta/entity/entity-master.entity.ts +78 -78
  195. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  196. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  197. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  198. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  199. package/src/module/meta/entity/media-data.entity.ts +32 -32
  200. package/src/module/meta/entity/preference.entity.ts +62 -62
  201. package/src/module/meta/entity/view-master.entity.ts +41 -41
  202. package/src/module/meta/entity.module.ts +156 -156
  203. package/src/module/meta/repository/app-master.repository.ts +20 -20
  204. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  205. package/src/module/meta/repository/entity-master.repository.ts +61 -61
  206. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  207. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  208. package/src/module/meta/repository/media-data.repository.ts +50 -50
  209. package/src/module/meta/repository/preference.repository.ts +20 -20
  210. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  211. package/src/module/meta/repository/view-master.repository.ts +42 -42
  212. package/src/module/meta/service/app-master.service.ts +37 -37
  213. package/src/module/meta/service/attribute-master.service.ts +117 -117
  214. package/src/module/meta/service/common.service.ts +9 -9
  215. package/src/module/meta/service/entity-dynamic.service.ts +762 -762
  216. package/src/module/meta/service/entity-list.service.ts +205 -205
  217. package/src/module/meta/service/entity-master.service.ts +164 -164
  218. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  219. package/src/module/meta/service/entity-relation.service.ts +69 -69
  220. package/src/module/meta/service/entity-service-impl.service.ts +524 -524
  221. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  222. package/src/module/meta/service/entity-table.service.ts +150 -150
  223. package/src/module/meta/service/entity-validation.service.ts +185 -185
  224. package/src/module/meta/service/entity.service.ts +67 -67
  225. package/src/module/meta/service/field-group.service.ts +103 -103
  226. package/src/module/meta/service/media-data.service.ts +140 -140
  227. package/src/module/meta/service/populate-meta.service.ts +153 -153
  228. package/src/module/meta/service/preference.service.ts +16 -16
  229. package/src/module/meta/service/resolver.service.ts +256 -256
  230. package/src/module/meta/service/section-master.service.ts +104 -104
  231. package/src/module/meta/service/update-form-json.service.ts +22 -22
  232. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  233. package/src/module/meta/service/view-master.service.ts +111 -110
  234. package/src/module/module/controller/menu.controller.ts +15 -15
  235. package/src/module/module/controller/module-access.controller.ts +132 -132
  236. package/src/module/module/entity/menu.entity.ts +43 -43
  237. package/src/module/module/entity/module-access.entity.ts +25 -25
  238. package/src/module/module/entity/module-action.entity.ts +17 -17
  239. package/src/module/module/entity/module.entity.ts +52 -52
  240. package/src/module/module/module.module.ts +42 -42
  241. package/src/module/module/repository/menu.repository.ts +184 -184
  242. package/src/module/module/repository/module-access.repository.ts +326 -326
  243. package/src/module/module/service/menu.service.ts +82 -82
  244. package/src/module/module/service/module-access.service.ts +209 -209
  245. package/src/module/notification/controller/notification.controller.ts +58 -58
  246. package/src/module/notification/controller/otp.controller.ts +117 -117
  247. package/src/module/notification/entity/notification.entity.ts +23 -23
  248. package/src/module/notification/entity/otp.entity.ts +28 -28
  249. package/src/module/notification/firebase-admin.config.ts +22 -22
  250. package/src/module/notification/notification.module.ts +69 -69
  251. package/src/module/notification/repository/otp.repository.ts +27 -27
  252. package/src/module/notification/service/email.service.ts +127 -127
  253. package/src/module/notification/service/notification.service.ts +138 -138
  254. package/src/module/notification/service/otp.service.ts +121 -121
  255. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  256. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  257. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  258. package/src/module/third-party-module/third-party.module.ts +12 -12
  259. package/src/module/user/controller/login.controller.ts +197 -197
  260. package/src/module/user/controller/user.controller.ts +40 -40
  261. package/src/module/user/dto/create-user.dto.ts +62 -62
  262. package/src/module/user/dto/update-user.dto.ts +4 -4
  263. package/src/module/user/entity/role.entity.ts +33 -33
  264. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  265. package/src/module/user/entity/user-session.entity.ts +61 -61
  266. package/src/module/user/entity/user.entity.ts +68 -68
  267. package/src/module/user/repository/role.repository.ts +96 -96
  268. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  269. package/src/module/user/repository/user.repository.ts +50 -50
  270. package/src/module/user/repository/userSession.repository.ts +33 -33
  271. package/src/module/user/service/login.service.ts +280 -280
  272. package/src/module/user/service/role.service.ts +189 -189
  273. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  274. package/src/module/user/service/user-session.service.ts +168 -168
  275. package/src/module/user/service/user.service.ts +353 -353
  276. package/src/module/user/user.module.ts +65 -65
  277. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  278. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  279. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  280. package/src/module/workflow/controller/action.controller.ts +95 -95
  281. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  282. package/src/module/workflow/controller/comm-template.controller.ts +34 -34
  283. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  284. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  285. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  286. package/src/module/workflow/controller/stage.controller.ts +47 -47
  287. package/src/module/workflow/controller/task.controller.ts +77 -77
  288. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  289. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  290. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  291. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  292. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  293. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  294. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  295. package/src/module/workflow/entity/action.entity.ts +50 -50
  296. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  297. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  298. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  299. package/src/module/workflow/entity/form-master.entity.ts +27 -27
  300. package/src/module/workflow/entity/form.entity.ts +25 -25
  301. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  302. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  303. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  304. package/src/module/workflow/entity/stage.entity.ts +20 -20
  305. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  306. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  307. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  308. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  309. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  310. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  311. package/src/module/workflow/repository/action-data.repository.ts +219 -219
  312. package/src/module/workflow/repository/action.repository.ts +277 -277
  313. package/src/module/workflow/repository/activity-log.repository.ts +121 -121
  314. package/src/module/workflow/repository/comm-template.repository.ts +142 -142
  315. package/src/module/workflow/repository/form-master.repository.ts +61 -61
  316. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  317. package/src/module/workflow/repository/stage-movement.repository.ts +227 -227
  318. package/src/module/workflow/repository/stage.repository.ts +118 -118
  319. package/src/module/workflow/repository/task.repository.ts +113 -113
  320. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  321. package/src/module/workflow/service/action-category.service.ts +33 -33
  322. package/src/module/workflow/service/action-data.service.ts +62 -62
  323. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  324. package/src/module/workflow/service/action-template-mapping.service.ts +55 -55
  325. package/src/module/workflow/service/action.service.ts +247 -247
  326. package/src/module/workflow/service/activity-log.service.ts +107 -107
  327. package/src/module/workflow/service/comm-template.service.ts +121 -121
  328. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  329. package/src/module/workflow/service/form-master.service.ts +35 -35
  330. package/src/module/workflow/service/populate-workflow.service.ts +326 -326
  331. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  332. package/src/module/workflow/service/stage-group.service.ts +300 -300
  333. package/src/module/workflow/service/stage.service.ts +140 -140
  334. package/src/module/workflow/service/task.service.ts +504 -504
  335. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  336. package/src/module/workflow/service/workflow-meta.service.ts +564 -564
  337. package/src/module/workflow/service/workflow.service.ts +205 -205
  338. package/src/module/workflow/workflow.module.ts +176 -176
  339. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  340. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  341. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  342. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  343. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  344. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  345. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  346. package/src/module/workflow-automation/service/workflow-automation.service.ts +343 -343
  347. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  348. package/src/resources/dev.properties.yaml +30 -30
  349. package/src/resources/local.properties.yaml +23 -23
  350. package/src/resources/properties.module.ts +12 -12
  351. package/src/resources/properties.yaml.ts +11 -11
  352. package/src/resources/uat.properties.yaml +15 -15
  353. package/src/utils/dto/excel-data.dto.ts +14 -14
  354. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  355. package/src/utils/service/base64util.service.ts +18 -18
  356. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  357. package/src/utils/service/codeGenerator.service.ts +22 -22
  358. package/src/utils/service/dateUtil.service.ts +17 -17
  359. package/src/utils/service/encryptUtil.service.ts +97 -97
  360. package/src/utils/service/excel-helper.service.ts +72 -72
  361. package/src/utils/service/excelUtil.service.ts +15 -15
  362. package/src/utils/service/file-util.service.ts +11 -11
  363. package/src/utils/service/json-util.service.ts +23 -23
  364. package/src/utils/service/loggingUtil.service.ts +34 -34
  365. package/src/utils/service/reflection-helper.service.ts +62 -62
  366. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  367. package/src/utils/utils.module.ts +25 -25
  368. package/tsconfig.build.json +4 -4
  369. package/tsconfig.json +24 -24
  370. package/.claude/settings.local.json +0 -26
  371. package/.idea/250218_nodejs_core.iml +0 -9
  372. package/.idea/codeStyles/Project.xml +0 -59
  373. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  374. package/.idea/copilot.data.migration.agent.xml +0 -6
  375. package/.idea/copilot.data.migration.ask.xml +0 -6
  376. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  377. package/.idea/copilot.data.migration.edit.xml +0 -6
  378. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  379. package/.idea/misc.xml +0 -6
  380. package/.idea/modules.xml +0 -8
  381. package/.idea/prettier.xml +0 -6
  382. package/.idea/vcs.xml +0 -6
  383. package/server.log +0 -850
@@ -1,343 +1,343 @@
1
- import { Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';
2
- import { InjectRepository } from '@nestjs/typeorm';
3
- import { DataSource, Repository } from 'typeorm';
4
- import { WorkflowAutomation } from '../entity/workflow-automation.entity';
5
- import { WorkflowAutomationActionEntity } from '../entity/workflow-automation-action.entity';
6
- import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
7
- import { UserData } from 'src/module/user/entity/user.entity';
8
- import { SavedFilterService } from 'src/module/filter/service/saved-filter.service';
9
- import { ENTITYTYPE_SAVEDFILTERMASTER } from 'src/constant/global.constant';
10
- import { app } from 'firebase-admin';
11
-
12
- @Injectable()
13
- export class WorkflowAutomationService extends EntityServiceImpl {
14
- private readonly logger = new Logger(WorkflowAutomationService.name);
15
- constructor(
16
- @InjectRepository(WorkflowAutomation)
17
- private readonly wfRepo: Repository<WorkflowAutomation>,
18
- @InjectRepository(WorkflowAutomationActionEntity)
19
- private readonly actionRepo: Repository<WorkflowAutomationActionEntity>,
20
- @Inject('SavedFilterService')
21
- private readonly savedFilterService: SavedFilterService,
22
- private readonly dataSource: DataSource,
23
- ) {
24
- super();
25
- }
26
-
27
- async createRule(
28
- data: Partial<WorkflowAutomation>,
29
- ): Promise<WorkflowAutomation> {
30
- const rule = this.wfRepo.create(data);
31
- return this.wfRepo.save(rule);
32
- }
33
-
34
- async updateRule(
35
- id: number,
36
- data: Partial<WorkflowAutomation>,
37
- ): Promise<WorkflowAutomation | null> {
38
- await this.wfRepo.update(id, data);
39
- return this.wfRepo.findOneBy({ id });
40
- }
41
-
42
- async deleteRule(id: number): Promise<void> {
43
- await this.wfRepo.delete(id);
44
- }
45
-
46
- async getRule(id: number): Promise<WorkflowAutomation | null> {
47
- return this.wfRepo.findOneBy({ id });
48
- }
49
-
50
- async getActiveRules(
51
- entityType: string,
52
- event: string,
53
- loggedInUser: UserData,
54
- ): Promise<WorkflowAutomation[]> {
55
- return this.wfRepo.find({
56
- where: {
57
- applicable_entity_type: entityType,
58
- trigger_event: event,
59
- organization_id: loggedInUser.organization_id,
60
- },
61
- });
62
- }
63
-
64
- async getActionsForRule(
65
- workflow_automation_id: number,
66
- ): Promise<WorkflowAutomationActionEntity[]> {
67
- return this.actionRepo.find({
68
- where: { workflow_automation_id },
69
- });
70
- }
71
-
72
- async updateEntity(entityData: any, loggedInUser: UserData) {
73
- this.logger.debug(
74
- `Updating WorkflowAutomation with data: ${JSON.stringify(entityData)}`,
75
- );
76
-
77
- const { event, filter, action, ...workflowData } = entityData;
78
-
79
- // 1. Update core workflow columns first
80
- this.logger.log(`Updating core workflow fields for workflow...`);
81
- let workflow = await super.updateEntity(workflowData, loggedInUser);
82
- this.logger.debug(`Workflow updated (id=${workflow.id})`);
83
-
84
- // 2. EVENT FILTER
85
- if (event?.triggerType) {
86
- this.logger.log(`Processing EVENT filter for workflow ${workflow.id}`);
87
-
88
- if (event.triggerType === 'on_event') {
89
- const eventFilterMaster = {
90
- entity_type: 'SFM',
91
- name: `Event_Filter_${workflow.id}`,
92
- filterDetails: event?.eventFilterJson ?? [],
93
- filter_scope: 'RULE',
94
- organization_id: loggedInUser.organization_id,
95
- enterprise_id: loggedInUser.enterprise_id,
96
- };
97
-
98
- if (workflow.condition_filter_code) {
99
- this.logger.debug(
100
- `Existing event filter found: ${workflow.condition_filter_code}`,
101
- );
102
- const existing = await this.savedFilterService.getEntityDataByCode(
103
- ENTITYTYPE_SAVEDFILTERMASTER,
104
- workflow.condition_filter_code,
105
- loggedInUser,
106
- );
107
-
108
- if (existing) {
109
- eventFilterMaster['id'] = existing.id;
110
- const updatedEvent = await this.savedFilterService.updateEntity(
111
- eventFilterMaster as any,
112
- loggedInUser,
113
- );
114
- workflow.condition_filter_code = updatedEvent.code;
115
- this.logger.log(
116
- `Updated existing event filter: ${updatedEvent.code}`,
117
- );
118
- }
119
- } else {
120
- const savedEvent = await this.savedFilterService.createEntity(
121
- eventFilterMaster,
122
- loggedInUser,
123
- );
124
- workflow.condition_filter_code = savedEvent.code;
125
- this.logger.log(`Created new event filter: ${savedEvent.code}`);
126
- }
127
-
128
- workflow.trigger_event = event?.event ?? null;
129
- }
130
-
131
- if (event.triggerType === 'on_schedule') {
132
- // just store JSON directly into schedule column
133
- workflow.schedule = event?.scheduleJson ?? null;
134
- this.logger.log(
135
- `Stored schedule JSON for workflow ${workflow.id}: ${JSON.stringify(
136
- workflow.schedule,
137
- )}`,
138
- );
139
- }
140
-
141
- workflow.trigger_type = event.triggerType;
142
- }
143
-
144
- // 3. CRITERIA FILTER
145
- if (filter) {
146
- this.logger.log(`Processing CRITERIA filter for workflow ${workflow.id}`);
147
-
148
- // const criteriaFilterMaster = {
149
- // entity_type: 'SFM',
150
- // name: `Criteria_Filter_${workflow.id}`,
151
- // filterDetails: criteria?.criteriaFilterJson ?? [],
152
- // filter_scope: 'RULE',
153
- // organization_id: loggedInUser.organization_id,
154
- // enterprise_id: loggedInUser.enterprise_id,
155
- // };
156
-
157
- // if (workflow.criteria_filter_code) {
158
- // this.logger.debug(
159
- // `Existing criteria filter found: ${workflow.criteria_filter_code}`,
160
- // );
161
- // const existing = await this.savedFilterService.getEntityDataByCode(
162
- // ENTITYTYPE_SAVEDFILTERMASTER,
163
- // workflow.criteria_filter_code,
164
- // loggedInUser,
165
- // );
166
-
167
- // if (existing) {
168
- // criteriaFilterMaster['id'] = existing.id;
169
- // const updatedCriteria = await this.savedFilterService.updateEntity(
170
- // criteriaFilterMaster as any,
171
- // loggedInUser,
172
- // );
173
- // workflow.criteria_filter_code = updatedCriteria.code;
174
- // this.logger.log(
175
- // `Updated existing criteria filter: ${updatedCriteria.code}`,
176
- // );
177
- // }
178
- // } else {
179
- // const savedCriteria = await this.savedFilterService.createEntity(
180
- // criteriaFilterMaster,
181
- // loggedInUser,
182
- // );
183
- // workflow.criteria_filter_code = savedCriteria.code;
184
- // this.logger.log(`Created new criteria filter: ${savedCriteria.code}`);
185
- // }
186
-
187
- workflow.criteria_filter_code = filter.filter_code ?? null;
188
- }
189
-
190
- // 4. ACTIONS
191
- if (Array.isArray(action) && action.length) {
192
- this.logger.log(
193
- `Processing ${action.length} actions for workflow ${workflow.id}`,
194
- );
195
-
196
- const existingActions = await this.dataSource
197
- .getRepository(WorkflowAutomationActionEntity)
198
- .find({
199
- where: { workflow_automation_id: workflow.id },
200
- });
201
-
202
- const existingMap = new Map(
203
- existingActions.map((a) => [a.action_category_id, a]),
204
- );
205
-
206
- // 2. Upsert actions
207
- for (const a of action) {
208
- if (!a?.actionCategory) {
209
- this.logger.warn(
210
- `Skipping action without category: ${JSON.stringify(a)}`,
211
- );
212
- continue;
213
- }
214
-
215
- const existing = existingMap.get(a.actionCategory);
216
-
217
- if (existing) {
218
- // update
219
- existing.payload = a.actionPayload ?? {};
220
- existing.actionCategoryName =
221
- a.actionCategoryName ?? existing.actionCategoryName;
222
- await this.dataSource
223
- .getRepository(WorkflowAutomationActionEntity)
224
- .save(existing);
225
- this.logger.log(`Updated action: ${a.actionCategory}`);
226
- } else {
227
- // insert
228
- const actionEntity = new WorkflowAutomationActionEntity();
229
- actionEntity.entity_type = 'WFAA';
230
- actionEntity.workflow_automation_id = workflow.id;
231
- actionEntity.action_category_id = a.actionCategory;
232
- actionEntity.actionCategoryName = a.actionCategoryName;
233
- actionEntity.payload = a.actionPayload ?? {};
234
-
235
- await this.dataSource
236
- .getRepository(WorkflowAutomationActionEntity)
237
- .save(actionEntity);
238
- this.logger.log(`Created new action: ${a.actionCategory}`);
239
- }
240
- }
241
- const incomingCategories = action.map((a) => a.actionCategory);
242
- const toDelete = existingActions.filter(
243
- (a) => !incomingCategories.includes(a.action_category_id),
244
- );
245
-
246
- if (toDelete.length) {
247
- await this.dataSource
248
- .getRepository(WorkflowAutomationActionEntity)
249
- .remove(toDelete);
250
- this.logger.log(
251
- `Deleted ${toDelete.length} actions not present in request.`,
252
- );
253
- }
254
- }
255
-
256
- // 5. Save workflow again with updated codes
257
- workflow = await super.updateEntity(workflow, loggedInUser);
258
- this.logger.debug(`Final workflow updated (id=${workflow.id})`);
259
-
260
- return workflow;
261
- }
262
-
263
- async getEntityData(entity_type: string, id: number, loggedInUser: UserData) {
264
- this.logger.log(`Fetching WorkflowAutomation by id=${id}`);
265
-
266
- // 1. Get workflow automation entity
267
- const workflowAutomation = await this.dataSource
268
- .getRepository(WorkflowAutomation)
269
- .findOne({
270
- where: { id },
271
- });
272
-
273
- if (!workflowAutomation) {
274
- throw new NotFoundException(`WorkflowAutomation not found with id=${id}`);
275
- }
276
-
277
- // 2. EVENT FILTER
278
- let event: any = null;
279
-
280
- if (workflowAutomation.trigger_type === 'on_event') {
281
- if (workflowAutomation.condition_filter_code) {
282
- const eventFilterMaster: any =
283
- await this.savedFilterService.getEntityDataByCode(
284
- ENTITYTYPE_SAVEDFILTERMASTER,
285
- workflowAutomation.condition_filter_code,
286
- loggedInUser,
287
- );
288
-
289
- if (eventFilterMaster) {
290
- // 🔑 fetch filter details using mapped_filter_code
291
- const eventFilterDetails =
292
- await this.savedFilterService.getDetailsByCode(
293
- eventFilterMaster.code,
294
- );
295
-
296
- event = {
297
- eventFilterJson: eventFilterDetails ?? [],
298
- triggerType: workflowAutomation.trigger_type,
299
- event: workflowAutomation.trigger_event,
300
- };
301
- }
302
- }
303
- }
304
-
305
- if (workflowAutomation.trigger_type === 'on_schedule') {
306
- event = {
307
- triggerType: workflowAutomation.trigger_type,
308
- scheduleJson: workflowAutomation.schedule,
309
- };
310
- }
311
-
312
- // 3. CRITERIA FILTER
313
- let filter: any = null;
314
-
315
- filter = {
316
- filter_code: workflowAutomation.criteria_filter_code,
317
- };
318
-
319
- // 4. ACTIONS
320
- const actions = await this.dataSource
321
- .getRepository(WorkflowAutomationActionEntity)
322
- .find({
323
- where: { workflow_automation_id: workflowAutomation.id },
324
- });
325
-
326
- const action = actions.map((a) => ({
327
- actionCategory: a.action_category_id,
328
- actionCategoryName: a.actionCategoryName,
329
- actionPayload: a.payload,
330
- }));
331
-
332
- // 5. Final response
333
- const response = {
334
- ...workflowAutomation,
335
- event,
336
- filter,
337
- action,
338
- };
339
-
340
- this.logger.debug(`Fetched WorkflowAutomation (id=${id}) with relations`);
341
- return response;
342
- }
343
- }
1
+ import { Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';
2
+ import { InjectRepository } from '@nestjs/typeorm';
3
+ import { DataSource, Repository } from 'typeorm';
4
+ import { WorkflowAutomation } from '../entity/workflow-automation.entity';
5
+ import { WorkflowAutomationActionEntity } from '../entity/workflow-automation-action.entity';
6
+ import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
7
+ import { UserData } from 'src/module/user/entity/user.entity';
8
+ import { SavedFilterService } from 'src/module/filter/service/saved-filter.service';
9
+ import { ENTITYTYPE_SAVEDFILTERMASTER } from 'src/constant/global.constant';
10
+ import { app } from 'firebase-admin';
11
+
12
+ @Injectable()
13
+ export class WorkflowAutomationService extends EntityServiceImpl {
14
+ private readonly logger = new Logger(WorkflowAutomationService.name);
15
+ constructor(
16
+ @InjectRepository(WorkflowAutomation)
17
+ private readonly wfRepo: Repository<WorkflowAutomation>,
18
+ @InjectRepository(WorkflowAutomationActionEntity)
19
+ private readonly actionRepo: Repository<WorkflowAutomationActionEntity>,
20
+ @Inject('SavedFilterService')
21
+ private readonly savedFilterService: SavedFilterService,
22
+ private readonly dataSource: DataSource,
23
+ ) {
24
+ super();
25
+ }
26
+
27
+ async createRule(
28
+ data: Partial<WorkflowAutomation>,
29
+ ): Promise<WorkflowAutomation> {
30
+ const rule = this.wfRepo.create(data);
31
+ return this.wfRepo.save(rule);
32
+ }
33
+
34
+ async updateRule(
35
+ id: number,
36
+ data: Partial<WorkflowAutomation>,
37
+ ): Promise<WorkflowAutomation | null> {
38
+ await this.wfRepo.update(id, data);
39
+ return this.wfRepo.findOneBy({ id });
40
+ }
41
+
42
+ async deleteRule(id: number): Promise<void> {
43
+ await this.wfRepo.delete(id);
44
+ }
45
+
46
+ async getRule(id: number): Promise<WorkflowAutomation | null> {
47
+ return this.wfRepo.findOneBy({ id });
48
+ }
49
+
50
+ async getActiveRules(
51
+ entityType: string,
52
+ event: string,
53
+ loggedInUser: UserData,
54
+ ): Promise<WorkflowAutomation[]> {
55
+ return this.wfRepo.find({
56
+ where: {
57
+ applicable_entity_type: entityType,
58
+ trigger_event: event,
59
+ organization_id: loggedInUser.organization_id,
60
+ },
61
+ });
62
+ }
63
+
64
+ async getActionsForRule(
65
+ workflow_automation_id: number,
66
+ ): Promise<WorkflowAutomationActionEntity[]> {
67
+ return this.actionRepo.find({
68
+ where: { workflow_automation_id },
69
+ });
70
+ }
71
+
72
+ async updateEntity(entityData: any, loggedInUser: UserData) {
73
+ this.logger.debug(
74
+ `Updating WorkflowAutomation with data: ${JSON.stringify(entityData)}`,
75
+ );
76
+
77
+ const { event, filter, action, ...workflowData } = entityData;
78
+
79
+ // 1. Update core workflow columns first
80
+ this.logger.log(`Updating core workflow fields for workflow...`);
81
+ let workflow = await super.updateEntity(workflowData, loggedInUser);
82
+ this.logger.debug(`Workflow updated (id=${workflow.id})`);
83
+
84
+ // 2. EVENT FILTER
85
+ if (event?.triggerType) {
86
+ this.logger.log(`Processing EVENT filter for workflow ${workflow.id}`);
87
+
88
+ if (event.triggerType === 'on_event') {
89
+ const eventFilterMaster = {
90
+ entity_type: 'SFM',
91
+ name: `Event_Filter_${workflow.id}`,
92
+ filterDetails: event?.eventFilterJson ?? [],
93
+ filter_scope: 'RULE',
94
+ organization_id: loggedInUser.organization_id,
95
+ enterprise_id: loggedInUser.enterprise_id,
96
+ };
97
+
98
+ if (workflow.condition_filter_code) {
99
+ this.logger.debug(
100
+ `Existing event filter found: ${workflow.condition_filter_code}`,
101
+ );
102
+ const existing = await this.savedFilterService.getEntityDataByCode(
103
+ ENTITYTYPE_SAVEDFILTERMASTER,
104
+ workflow.condition_filter_code,
105
+ loggedInUser,
106
+ );
107
+
108
+ if (existing) {
109
+ eventFilterMaster['id'] = existing.id;
110
+ const updatedEvent = await this.savedFilterService.updateEntity(
111
+ eventFilterMaster as any,
112
+ loggedInUser,
113
+ );
114
+ workflow.condition_filter_code = updatedEvent.code;
115
+ this.logger.log(
116
+ `Updated existing event filter: ${updatedEvent.code}`,
117
+ );
118
+ }
119
+ } else {
120
+ const savedEvent = await this.savedFilterService.createEntity(
121
+ eventFilterMaster,
122
+ loggedInUser,
123
+ );
124
+ workflow.condition_filter_code = savedEvent.code;
125
+ this.logger.log(`Created new event filter: ${savedEvent.code}`);
126
+ }
127
+
128
+ workflow.trigger_event = event?.event ?? null;
129
+ }
130
+
131
+ if (event.triggerType === 'on_schedule') {
132
+ // just store JSON directly into schedule column
133
+ workflow.schedule = event?.scheduleJson ?? null;
134
+ this.logger.log(
135
+ `Stored schedule JSON for workflow ${workflow.id}: ${JSON.stringify(
136
+ workflow.schedule,
137
+ )}`,
138
+ );
139
+ }
140
+
141
+ workflow.trigger_type = event.triggerType;
142
+ }
143
+
144
+ // 3. CRITERIA FILTER
145
+ if (filter) {
146
+ this.logger.log(`Processing CRITERIA filter for workflow ${workflow.id}`);
147
+
148
+ // const criteriaFilterMaster = {
149
+ // entity_type: 'SFM',
150
+ // name: `Criteria_Filter_${workflow.id}`,
151
+ // filterDetails: criteria?.criteriaFilterJson ?? [],
152
+ // filter_scope: 'RULE',
153
+ // organization_id: loggedInUser.organization_id,
154
+ // enterprise_id: loggedInUser.enterprise_id,
155
+ // };
156
+
157
+ // if (workflow.criteria_filter_code) {
158
+ // this.logger.debug(
159
+ // `Existing criteria filter found: ${workflow.criteria_filter_code}`,
160
+ // );
161
+ // const existing = await this.savedFilterService.getEntityDataByCode(
162
+ // ENTITYTYPE_SAVEDFILTERMASTER,
163
+ // workflow.criteria_filter_code,
164
+ // loggedInUser,
165
+ // );
166
+
167
+ // if (existing) {
168
+ // criteriaFilterMaster['id'] = existing.id;
169
+ // const updatedCriteria = await this.savedFilterService.updateEntity(
170
+ // criteriaFilterMaster as any,
171
+ // loggedInUser,
172
+ // );
173
+ // workflow.criteria_filter_code = updatedCriteria.code;
174
+ // this.logger.log(
175
+ // `Updated existing criteria filter: ${updatedCriteria.code}`,
176
+ // );
177
+ // }
178
+ // } else {
179
+ // const savedCriteria = await this.savedFilterService.createEntity(
180
+ // criteriaFilterMaster,
181
+ // loggedInUser,
182
+ // );
183
+ // workflow.criteria_filter_code = savedCriteria.code;
184
+ // this.logger.log(`Created new criteria filter: ${savedCriteria.code}`);
185
+ // }
186
+
187
+ workflow.criteria_filter_code = filter.filter_code ?? null;
188
+ }
189
+
190
+ // 4. ACTIONS
191
+ if (Array.isArray(action) && action.length) {
192
+ this.logger.log(
193
+ `Processing ${action.length} actions for workflow ${workflow.id}`,
194
+ );
195
+
196
+ const existingActions = await this.dataSource
197
+ .getRepository(WorkflowAutomationActionEntity)
198
+ .find({
199
+ where: { workflow_automation_id: workflow.id },
200
+ });
201
+
202
+ const existingMap = new Map(
203
+ existingActions.map((a) => [a.action_category_id, a]),
204
+ );
205
+
206
+ // 2. Upsert actions
207
+ for (const a of action) {
208
+ if (!a?.actionCategory) {
209
+ this.logger.warn(
210
+ `Skipping action without category: ${JSON.stringify(a)}`,
211
+ );
212
+ continue;
213
+ }
214
+
215
+ const existing = existingMap.get(a.actionCategory);
216
+
217
+ if (existing) {
218
+ // update
219
+ existing.payload = a.actionPayload ?? {};
220
+ existing.actionCategoryName =
221
+ a.actionCategoryName ?? existing.actionCategoryName;
222
+ await this.dataSource
223
+ .getRepository(WorkflowAutomationActionEntity)
224
+ .save(existing);
225
+ this.logger.log(`Updated action: ${a.actionCategory}`);
226
+ } else {
227
+ // insert
228
+ const actionEntity = new WorkflowAutomationActionEntity();
229
+ actionEntity.entity_type = 'WFAA';
230
+ actionEntity.workflow_automation_id = workflow.id;
231
+ actionEntity.action_category_id = a.actionCategory;
232
+ actionEntity.actionCategoryName = a.actionCategoryName;
233
+ actionEntity.payload = a.actionPayload ?? {};
234
+
235
+ await this.dataSource
236
+ .getRepository(WorkflowAutomationActionEntity)
237
+ .save(actionEntity);
238
+ this.logger.log(`Created new action: ${a.actionCategory}`);
239
+ }
240
+ }
241
+ const incomingCategories = action.map((a) => a.actionCategory);
242
+ const toDelete = existingActions.filter(
243
+ (a) => !incomingCategories.includes(a.action_category_id),
244
+ );
245
+
246
+ if (toDelete.length) {
247
+ await this.dataSource
248
+ .getRepository(WorkflowAutomationActionEntity)
249
+ .remove(toDelete);
250
+ this.logger.log(
251
+ `Deleted ${toDelete.length} actions not present in request.`,
252
+ );
253
+ }
254
+ }
255
+
256
+ // 5. Save workflow again with updated codes
257
+ workflow = await super.updateEntity(workflow, loggedInUser);
258
+ this.logger.debug(`Final workflow updated (id=${workflow.id})`);
259
+
260
+ return workflow;
261
+ }
262
+
263
+ async getEntityData(entity_type: string, id: number, loggedInUser: UserData) {
264
+ this.logger.log(`Fetching WorkflowAutomation by id=${id}`);
265
+
266
+ // 1. Get workflow automation entity
267
+ const workflowAutomation = await this.dataSource
268
+ .getRepository(WorkflowAutomation)
269
+ .findOne({
270
+ where: { id },
271
+ });
272
+
273
+ if (!workflowAutomation) {
274
+ throw new NotFoundException(`WorkflowAutomation not found with id=${id}`);
275
+ }
276
+
277
+ // 2. EVENT FILTER
278
+ let event: any = null;
279
+
280
+ if (workflowAutomation.trigger_type === 'on_event') {
281
+ if (workflowAutomation.condition_filter_code) {
282
+ const eventFilterMaster: any =
283
+ await this.savedFilterService.getEntityDataByCode(
284
+ ENTITYTYPE_SAVEDFILTERMASTER,
285
+ workflowAutomation.condition_filter_code,
286
+ loggedInUser,
287
+ );
288
+
289
+ if (eventFilterMaster) {
290
+ // 🔑 fetch filter details using mapped_filter_code
291
+ const eventFilterDetails =
292
+ await this.savedFilterService.getDetailsByCode(
293
+ eventFilterMaster.code,
294
+ );
295
+
296
+ event = {
297
+ eventFilterJson: eventFilterDetails ?? [],
298
+ triggerType: workflowAutomation.trigger_type,
299
+ event: workflowAutomation.trigger_event,
300
+ };
301
+ }
302
+ }
303
+ }
304
+
305
+ if (workflowAutomation.trigger_type === 'on_schedule') {
306
+ event = {
307
+ triggerType: workflowAutomation.trigger_type,
308
+ scheduleJson: workflowAutomation.schedule,
309
+ };
310
+ }
311
+
312
+ // 3. CRITERIA FILTER
313
+ let filter: any = null;
314
+
315
+ filter = {
316
+ filter_code: workflowAutomation.criteria_filter_code,
317
+ };
318
+
319
+ // 4. ACTIONS
320
+ const actions = await this.dataSource
321
+ .getRepository(WorkflowAutomationActionEntity)
322
+ .find({
323
+ where: { workflow_automation_id: workflowAutomation.id },
324
+ });
325
+
326
+ const action = actions.map((a) => ({
327
+ actionCategory: a.action_category_id,
328
+ actionCategoryName: a.actionCategoryName,
329
+ actionPayload: a.payload,
330
+ }));
331
+
332
+ // 5. Final response
333
+ const response = {
334
+ ...workflowAutomation,
335
+ event,
336
+ filter,
337
+ action,
338
+ };
339
+
340
+ this.logger.debug(`Fetched WorkflowAutomation (id=${id}) with relations`);
341
+ return response;
342
+ }
343
+ }