rez_core 4.0.126 → 4.0.128

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 (411) hide show
  1. package/.prettierrc +3 -3
  2. package/.vscode/extensions.json +5 -0
  3. package/README.md +99 -99
  4. package/dist/config/config.module.js +2 -2
  5. package/dist/config/config.module.js.map +1 -1
  6. package/dist/config/database.config.d.ts +1 -1
  7. package/dist/config/database.config.js +12 -15
  8. package/dist/config/database.config.js.map +1 -1
  9. package/dist/module/auth/guards/role.guard.js +3 -3
  10. package/dist/module/auth/services/auth.service.js +2 -2
  11. package/dist/module/enterprise/entity/organization.entity.js +1 -1
  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 +22 -22
  15. package/dist/module/integration/entity/integration-config.entity.js +3 -3
  16. package/dist/module/integration/entity/integration-config.entity.js.map +1 -1
  17. package/dist/module/integration/entity/user-integration.entity.js +3 -3
  18. package/dist/module/integration/entity/user-integration.entity.js.map +1 -1
  19. package/dist/module/integration/examples/usage.example.js +9 -9
  20. package/dist/module/integration/service/integration.service.js +1 -1
  21. package/dist/module/integration/service/wrapper.service.js +25 -25
  22. package/dist/module/listmaster/entity/list-master.entity.js +4 -4
  23. package/dist/module/listmaster/entity/list-master.entity.js.map +1 -1
  24. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  25. package/dist/module/mapper/entity/field-mapper.entity.js +1 -1
  26. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  27. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  28. package/dist/module/mapper/service/mapper.service.js +2 -2
  29. package/dist/module/meta/entity/entity-master.entity.js +1 -1
  30. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  31. package/dist/module/meta/service/attribute-master.service.js +1 -1
  32. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  33. package/dist/module/meta/service/entity-dynamic.service.js +9 -9
  34. package/dist/module/meta/service/entity-list.service.js +3 -3
  35. package/dist/module/meta/service/entity-master.service.js +3 -3
  36. package/dist/module/meta/service/entity-relation.service.js +11 -11
  37. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  38. package/dist/module/meta/service/resolver.service.js +5 -5
  39. package/dist/module/meta/service/resolver.service.js.map +1 -1
  40. package/dist/module/module/repository/menu.repository.js +12 -12
  41. package/dist/module/notification/service/notification.service.js +9 -9
  42. package/dist/module/user/controller/login.controller.js +18 -18
  43. package/dist/module/user/entity/user-role-mapping.entity.js +1 -1
  44. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  45. package/dist/module/user/service/role.service.js +4 -4
  46. package/dist/module/user/service/user-session.service.js +2 -2
  47. package/dist/module/workflow/entity/comm-template.entity.js +1 -1
  48. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  49. package/dist/module/workflow/repository/action.repository.js +20 -20
  50. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  51. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  52. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  53. package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
  54. package/dist/module/workflow/repository/stage.repository.js +8 -8
  55. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  56. package/dist/module/workflow/service/action.service.js +7 -7
  57. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  58. package/dist/module/workflow/service/stage-group.service.js +2 -2
  59. package/dist/module/workflow/service/stage.service.js +2 -2
  60. package/dist/module/workflow/service/task.service.js +28 -28
  61. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  62. package/dist/module/workflow/service/workflow-meta.service.js +41 -39
  63. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  64. package/dist/module/workflow/service/workflow.service.js +2 -2
  65. package/dist/tsconfig.build.tsbuildinfo +1 -1
  66. package/dist/utils/service/reflection-helper.service.js +2 -2
  67. package/docs/modules/event-driven-integration-design.md +91 -91
  68. package/docs/modules/integration.md +250 -250
  69. package/eslint.config.mjs +34 -34
  70. package/nest-cli.json +14 -14
  71. package/package.json +119 -120
  72. package/src/app.controller.ts +12 -12
  73. package/src/app.module.ts +52 -52
  74. package/src/app.service.ts +8 -8
  75. package/src/config/config.module.ts +18 -17
  76. package/src/config/database.config.ts +23 -47
  77. package/src/constant/global.constant.ts +67 -67
  78. package/src/core.module.ts +81 -81
  79. package/src/decorators/roles.decorator.ts +7 -7
  80. package/src/dtos/response.dto.ts +6 -6
  81. package/src/dtos/response.ts +5 -5
  82. package/src/index.ts +1 -1
  83. package/src/module/auth/auth.module.ts +49 -49
  84. package/src/module/auth/controller/auth.controller.ts +28 -28
  85. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  86. package/src/module/auth/guards/jwt.guard.ts +22 -22
  87. package/src/module/auth/guards/role.guard.ts +68 -68
  88. package/src/module/auth/services/auth.service.ts +50 -50
  89. package/src/module/auth/services/jwt.service.ts +11 -11
  90. package/src/module/auth/strategies/google.strategy.ts +54 -54
  91. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  92. package/src/module/auth/strategies/local.strategy.ts +13 -13
  93. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  94. package/src/module/dashboard/dashboard.module.ts +21 -21
  95. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  96. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  97. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  98. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  99. package/src/module/dev/dev.module.ts +12 -12
  100. package/src/module/dev/service/dev.service.ts +7 -7
  101. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  102. package/src/module/enterprise/enterprise.module.ts +30 -30
  103. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  104. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  105. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  106. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  107. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  108. package/src/module/enterprise/repository/school.repository.ts +278 -278
  109. package/src/module/enterprise/service/brand.service.ts +5 -5
  110. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  111. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  112. package/src/module/enterprise/service/organization.service.ts +145 -145
  113. package/src/module/filter/controller/filter.controller.ts +84 -84
  114. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  115. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  116. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  117. package/src/module/filter/filter.module.ts +31 -31
  118. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  119. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  120. package/src/module/filter/service/filter.service.ts +1005 -1005
  121. package/src/module/filter/service/saved-filter.service.ts +170 -170
  122. package/src/module/ics/controller/ics.controller.ts +21 -21
  123. package/src/module/ics/dto/ics.dto.ts +55 -55
  124. package/src/module/ics/ics.module.ts +13 -13
  125. package/src/module/ics/service/ics.service.ts +57 -57
  126. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  127. package/src/module/integration/controller/integration.controller.ts +662 -662
  128. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  129. package/src/module/integration/dto/create-config.dto.ts +526 -526
  130. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  131. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  132. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  133. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  134. package/src/module/integration/examples/usage.example.ts +338 -338
  135. package/src/module/integration/factories/base.factory.ts +7 -7
  136. package/src/module/integration/factories/email.factory.ts +49 -49
  137. package/src/module/integration/factories/integration.factory.ts +121 -121
  138. package/src/module/integration/factories/sms.factory.ts +51 -51
  139. package/src/module/integration/factories/telephone.factory.ts +41 -41
  140. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  141. package/src/module/integration/integration.module.ts +110 -110
  142. package/src/module/integration/service/calendar-event.service.ts +118 -118
  143. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  144. package/src/module/integration/service/integration-queue.service.ts +229 -229
  145. package/src/module/integration/service/integration.service.ts +2633 -2633
  146. package/src/module/integration/service/oauth.service.ts +224 -224
  147. package/src/module/integration/service/wrapper.service.ts +493 -493
  148. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  149. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  150. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  151. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  152. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  153. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  154. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  155. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  156. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  157. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  158. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  159. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  160. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  161. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  162. package/src/module/layout/controller/layout.controller.ts +47 -47
  163. package/src/module/layout/entity/header-items.entity.ts +28 -28
  164. package/src/module/layout/entity/header-section.entity.ts +19 -19
  165. package/src/module/layout/layout.module.ts +21 -21
  166. package/src/module/layout/repository/header-items.repository.ts +18 -18
  167. package/src/module/layout/repository/header-section.repository.ts +22 -22
  168. package/src/module/layout/service/header-section.service.ts +25 -25
  169. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  170. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  171. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  172. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  173. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  174. package/src/module/lead/controller/lead.controller.ts +30 -30
  175. package/src/module/lead/lead.module.ts +14 -14
  176. package/src/module/lead/repository/lead.repository.ts +41 -41
  177. package/src/module/lead/service/lead.service.ts +54 -54
  178. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  179. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  180. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  181. package/src/module/listmaster/listmaster.module.ts +46 -46
  182. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  183. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  184. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  185. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  186. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  187. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  188. package/src/module/listmaster/service/list-master.service.ts +535 -535
  189. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  190. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  191. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  192. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  193. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  194. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  195. package/src/module/mapper/mapper.module.ts +34 -34
  196. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  197. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  198. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  199. package/src/module/mapper/service/field-mapper.service.ts +266 -266
  200. package/src/module/mapper/service/mapper.service.ts +79 -79
  201. package/src/module/master/controller/master.controller.ts +74 -74
  202. package/src/module/master/service/master.service.ts +483 -483
  203. package/src/module/meta/controller/app-master.controller.ts +38 -38
  204. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  205. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  206. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  207. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  208. package/src/module/meta/controller/entity.controller.ts +392 -392
  209. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  210. package/src/module/meta/controller/media.controller.ts +107 -107
  211. package/src/module/meta/controller/meta.controller.ts +96 -96
  212. package/src/module/meta/controller/view-master.controller.ts +86 -86
  213. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  214. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  215. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  216. package/src/module/meta/entity/app-master.entity.ts +34 -34
  217. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  218. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  219. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  220. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  221. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  222. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  223. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  224. package/src/module/meta/entity/media-data.entity.ts +32 -32
  225. package/src/module/meta/entity/preference.entity.ts +62 -62
  226. package/src/module/meta/entity/view-master.entity.ts +41 -41
  227. package/src/module/meta/entity.module.ts +158 -158
  228. package/src/module/meta/repository/app-master.repository.ts +20 -20
  229. package/src/module/meta/repository/attribute-master.repository.ts +118 -118
  230. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  231. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  232. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  233. package/src/module/meta/repository/media-data.repository.ts +50 -50
  234. package/src/module/meta/repository/preference.repository.ts +20 -20
  235. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  236. package/src/module/meta/repository/view-master.repository.ts +42 -42
  237. package/src/module/meta/service/app-master.service.ts +37 -37
  238. package/src/module/meta/service/attribute-master.service.ts +126 -126
  239. package/src/module/meta/service/common.service.ts +9 -9
  240. package/src/module/meta/service/entity-dynamic.service.ts +819 -819
  241. package/src/module/meta/service/entity-list.service.ts +205 -205
  242. package/src/module/meta/service/entity-master.service.ts +169 -169
  243. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  244. package/src/module/meta/service/entity-relation.service.ts +69 -69
  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 +193 -193
  253. package/src/module/meta/service/preference.service.ts +16 -16
  254. package/src/module/meta/service/resolver.service.ts +267 -267
  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 +184 -184
  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 +209 -209
  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 +163 -163
  282. package/src/module/notification/service/otp.service.ts +132 -132
  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 +197 -197
  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 +304 -304
  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 +365 -365
  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 +50 -50
  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 +333 -333
  339. package/src/module/workflow/repository/action.repository.ts +323 -323
  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 +176 -176
  344. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  345. package/src/module/workflow/repository/stage.repository.ts +172 -172
  346. package/src/module/workflow/repository/task.repository.ts +127 -127
  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 +106 -106
  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 +67 -67
  356. package/src/module/workflow/service/form-master.service.ts +35 -35
  357. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  358. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  359. package/src/module/workflow/service/stage-group.service.ts +319 -319
  360. package/src/module/workflow/service/stage.service.ts +199 -199
  361. package/src/module/workflow/service/task.service.ts +560 -560
  362. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  363. package/src/module/workflow/service/workflow-meta.service.ts +654 -640
  364. package/src/module/workflow/service/workflow.service.ts +205 -205
  365. package/src/module/workflow/workflow.module.ts +176 -176
  366. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  367. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  368. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  369. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  370. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  371. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  372. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  373. package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -347
  374. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  375. package/src/resources/dev.properties.yaml +30 -31
  376. package/src/resources/local.properties.yaml +27 -27
  377. package/src/resources/properties.module.ts +12 -12
  378. package/src/resources/properties.yaml.ts +11 -11
  379. package/src/resources/uat.properties.yaml +31 -31
  380. package/src/table.config.ts +126 -126
  381. package/src/utils/dto/excel-data.dto.ts +14 -14
  382. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  383. package/src/utils/service/base64util.service.ts +18 -18
  384. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  385. package/src/utils/service/codeGenerator.service.ts +22 -22
  386. package/src/utils/service/dateUtil.service.ts +17 -17
  387. package/src/utils/service/encryptUtil.service.ts +97 -97
  388. package/src/utils/service/excel-helper.service.ts +72 -72
  389. package/src/utils/service/excelUtil.service.ts +15 -15
  390. package/src/utils/service/file-util.service.ts +11 -11
  391. package/src/utils/service/json-util.service.ts +23 -23
  392. package/src/utils/service/loggingUtil.service.ts +34 -34
  393. package/src/utils/service/reflection-helper.service.ts +62 -62
  394. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  395. package/src/utils/utils.module.ts +25 -25
  396. package/tsconfig.build.json +4 -4
  397. package/tsconfig.json +24 -24
  398. package/.claude/settings.local.json +0 -26
  399. package/.idea/250218_nodejs_core.iml +0 -9
  400. package/.idea/codeStyles/Project.xml +0 -59
  401. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  402. package/.idea/copilot.data.migration.agent.xml +0 -6
  403. package/.idea/copilot.data.migration.ask.xml +0 -6
  404. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  405. package/.idea/copilot.data.migration.edit.xml +0 -6
  406. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  407. package/.idea/misc.xml +0 -6
  408. package/.idea/modules.xml +0 -8
  409. package/.idea/prettier.xml +0 -6
  410. package/.idea/vcs.xml +0 -6
  411. package/server.log +0 -850
@@ -1,347 +1,347 @@
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
- actionEntity.name = a.name;
235
- actionEntity.status = a.status;
236
-
237
- await this.dataSource
238
- .getRepository(WorkflowAutomationActionEntity)
239
- .save(actionEntity);
240
- this.logger.log(`Created new action: ${a.actionCategory}`);
241
- }
242
- }
243
- const incomingCategories = action.map((a) => a.actionCategory);
244
- const toDelete = existingActions.filter(
245
- (a) => !incomingCategories.includes(a.action_category_id),
246
- );
247
-
248
- if (toDelete.length) {
249
- await this.dataSource
250
- .getRepository(WorkflowAutomationActionEntity)
251
- .remove(toDelete);
252
- this.logger.log(
253
- `Deleted ${toDelete.length} actions not present in request.`,
254
- );
255
- }
256
- }
257
-
258
- // 5. Save workflow again with updated codes
259
- workflow = await super.updateEntity(workflow, loggedInUser);
260
- this.logger.debug(`Final workflow updated (id=${workflow.id})`);
261
-
262
- return workflow;
263
- }
264
-
265
- async getEntityData(entity_type: string, id: number, loggedInUser: UserData) {
266
- this.logger.log(`Fetching WorkflowAutomation by id=${id}`);
267
-
268
- // 1. Get workflow automation entity
269
- const workflowAutomation = await this.dataSource
270
- .getRepository(WorkflowAutomation)
271
- .findOne({
272
- where: { id },
273
- });
274
-
275
- if (!workflowAutomation) {
276
- throw new NotFoundException(`WorkflowAutomation not found with id=${id}`);
277
- }
278
-
279
- // 2. EVENT FILTER
280
- let event: any = null;
281
-
282
- if (workflowAutomation.trigger_type === 'on_event') {
283
- if (workflowAutomation.condition_filter_code) {
284
- const eventFilterMaster: any =
285
- await this.savedFilterService.getEntityDataByCode(
286
- ENTITYTYPE_SAVEDFILTERMASTER,
287
- workflowAutomation.condition_filter_code,
288
- loggedInUser,
289
- );
290
-
291
- if (eventFilterMaster) {
292
- // 🔑 fetch filter details using mapped_filter_code
293
- const eventFilterDetails =
294
- await this.savedFilterService.getDetailsByCode(
295
- eventFilterMaster.code,
296
- );
297
-
298
- event = {
299
- eventFilterJson: eventFilterDetails ?? [],
300
- triggerType: workflowAutomation.trigger_type,
301
- event: workflowAutomation.trigger_event,
302
- };
303
- }
304
- }
305
- }
306
-
307
- if (workflowAutomation.trigger_type === 'on_schedule') {
308
- event = {
309
- triggerType: workflowAutomation.trigger_type,
310
- scheduleJson: workflowAutomation.schedule,
311
- };
312
- }
313
-
314
- // 3. CRITERIA FILTER
315
- let filter: any = null;
316
-
317
- filter = {
318
- filter_code: workflowAutomation.criteria_filter_code,
319
- };
320
-
321
- // 4. ACTIONS
322
- const actions = await this.dataSource
323
- .getRepository(WorkflowAutomationActionEntity)
324
- .find({
325
- where: { workflow_automation_id: workflowAutomation.id },
326
- });
327
-
328
- const action = actions.map((a) => ({
329
- actionCategory: a.action_category_id,
330
- actionCategoryName: a.actionCategoryName,
331
- actionPayload: a.payload,
332
- name: a.name,
333
- status: a.status,
334
- }));
335
-
336
- // 5. Final response
337
- const response = {
338
- ...workflowAutomation,
339
- event,
340
- filter,
341
- action,
342
- };
343
-
344
- this.logger.debug(`Fetched WorkflowAutomation (id=${id}) with relations`);
345
- return response;
346
- }
347
- }
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
+ actionEntity.name = a.name;
235
+ actionEntity.status = a.status;
236
+
237
+ await this.dataSource
238
+ .getRepository(WorkflowAutomationActionEntity)
239
+ .save(actionEntity);
240
+ this.logger.log(`Created new action: ${a.actionCategory}`);
241
+ }
242
+ }
243
+ const incomingCategories = action.map((a) => a.actionCategory);
244
+ const toDelete = existingActions.filter(
245
+ (a) => !incomingCategories.includes(a.action_category_id),
246
+ );
247
+
248
+ if (toDelete.length) {
249
+ await this.dataSource
250
+ .getRepository(WorkflowAutomationActionEntity)
251
+ .remove(toDelete);
252
+ this.logger.log(
253
+ `Deleted ${toDelete.length} actions not present in request.`,
254
+ );
255
+ }
256
+ }
257
+
258
+ // 5. Save workflow again with updated codes
259
+ workflow = await super.updateEntity(workflow, loggedInUser);
260
+ this.logger.debug(`Final workflow updated (id=${workflow.id})`);
261
+
262
+ return workflow;
263
+ }
264
+
265
+ async getEntityData(entity_type: string, id: number, loggedInUser: UserData) {
266
+ this.logger.log(`Fetching WorkflowAutomation by id=${id}`);
267
+
268
+ // 1. Get workflow automation entity
269
+ const workflowAutomation = await this.dataSource
270
+ .getRepository(WorkflowAutomation)
271
+ .findOne({
272
+ where: { id },
273
+ });
274
+
275
+ if (!workflowAutomation) {
276
+ throw new NotFoundException(`WorkflowAutomation not found with id=${id}`);
277
+ }
278
+
279
+ // 2. EVENT FILTER
280
+ let event: any = null;
281
+
282
+ if (workflowAutomation.trigger_type === 'on_event') {
283
+ if (workflowAutomation.condition_filter_code) {
284
+ const eventFilterMaster: any =
285
+ await this.savedFilterService.getEntityDataByCode(
286
+ ENTITYTYPE_SAVEDFILTERMASTER,
287
+ workflowAutomation.condition_filter_code,
288
+ loggedInUser,
289
+ );
290
+
291
+ if (eventFilterMaster) {
292
+ // 🔑 fetch filter details using mapped_filter_code
293
+ const eventFilterDetails =
294
+ await this.savedFilterService.getDetailsByCode(
295
+ eventFilterMaster.code,
296
+ );
297
+
298
+ event = {
299
+ eventFilterJson: eventFilterDetails ?? [],
300
+ triggerType: workflowAutomation.trigger_type,
301
+ event: workflowAutomation.trigger_event,
302
+ };
303
+ }
304
+ }
305
+ }
306
+
307
+ if (workflowAutomation.trigger_type === 'on_schedule') {
308
+ event = {
309
+ triggerType: workflowAutomation.trigger_type,
310
+ scheduleJson: workflowAutomation.schedule,
311
+ };
312
+ }
313
+
314
+ // 3. CRITERIA FILTER
315
+ let filter: any = null;
316
+
317
+ filter = {
318
+ filter_code: workflowAutomation.criteria_filter_code,
319
+ };
320
+
321
+ // 4. ACTIONS
322
+ const actions = await this.dataSource
323
+ .getRepository(WorkflowAutomationActionEntity)
324
+ .find({
325
+ where: { workflow_automation_id: workflowAutomation.id },
326
+ });
327
+
328
+ const action = actions.map((a) => ({
329
+ actionCategory: a.action_category_id,
330
+ actionCategoryName: a.actionCategoryName,
331
+ actionPayload: a.payload,
332
+ name: a.name,
333
+ status: a.status,
334
+ }));
335
+
336
+ // 5. Final response
337
+ const response = {
338
+ ...workflowAutomation,
339
+ event,
340
+ filter,
341
+ action,
342
+ };
343
+
344
+ this.logger.debug(`Fetched WorkflowAutomation (id=${id}) with relations`);
345
+ return response;
346
+ }
347
+ }