rez_core 3.1.193 → 3.1.195

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 (394) 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 +25 -25
  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 +4 -4
  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/module/repository/menu.repository.js +12 -12
  23. package/dist/module/notification/service/notification.service.d.ts +3 -1
  24. package/dist/module/notification/service/notification.service.js +31 -23
  25. package/dist/module/notification/service/notification.service.js.map +1 -1
  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/controller/activity-log.controller.d.ts +0 -2
  30. package/dist/module/workflow/repository/action.repository.js +16 -16
  31. package/dist/module/workflow/repository/activity-log.repository.d.ts +3 -3
  32. package/dist/module/workflow/repository/activity-log.repository.js +29 -11
  33. package/dist/module/workflow/repository/activity-log.repository.js.map +1 -1
  34. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  35. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  36. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  37. package/dist/module/workflow/repository/stage-movement.repository.js +11 -11
  38. package/dist/module/workflow/repository/stage.repository.js +8 -8
  39. package/dist/module/workflow/service/action-template-mapping.service.js +10 -10
  40. package/dist/module/workflow/service/action.service.js +7 -7
  41. package/dist/module/workflow/service/activity-log.service.d.ts +0 -2
  42. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  43. package/dist/module/workflow/service/stage-group.service.js +8 -16
  44. package/dist/module/workflow/service/stage-group.service.js.map +1 -1
  45. package/dist/module/workflow/service/stage.service.js +2 -2
  46. package/dist/module/workflow/service/task.service.d.ts +3 -1
  47. package/dist/module/workflow/service/task.service.js +58 -45
  48. package/dist/module/workflow/service/task.service.js.map +1 -1
  49. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  50. package/dist/module/workflow/service/workflow-meta.service.js +50 -50
  51. package/dist/module/workflow/service/workflow.service.js +2 -2
  52. package/dist/tsconfig.build.tsbuildinfo +1 -1
  53. package/dist/utils/service/reflection-helper.service.js +2 -2
  54. package/docs/modules/event-driven-integration-design.md +91 -91
  55. package/docs/modules/integration.md +250 -250
  56. package/eslint.config.mjs +34 -34
  57. package/nest-cli.json +14 -14
  58. package/package.json +118 -118
  59. package/src/app.controller.ts +12 -12
  60. package/src/app.module.ts +49 -49
  61. package/src/app.service.ts +8 -8
  62. package/src/config/config.module.ts +18 -18
  63. package/src/config/database.config.ts +23 -23
  64. package/src/constant/global.constant.ts +67 -67
  65. package/src/core.module.ts +81 -81
  66. package/src/decorators/roles.decorator.ts +7 -7
  67. package/src/dtos/response.dto.ts +6 -6
  68. package/src/dtos/response.ts +5 -5
  69. package/src/index.ts +1 -1
  70. package/src/module/auth/auth.module.ts +49 -49
  71. package/src/module/auth/controller/auth.controller.ts +28 -28
  72. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  73. package/src/module/auth/guards/jwt.guard.ts +22 -22
  74. package/src/module/auth/guards/role.guard.ts +68 -68
  75. package/src/module/auth/services/auth.service.ts +50 -50
  76. package/src/module/auth/services/jwt.service.ts +11 -11
  77. package/src/module/auth/strategies/google.strategy.ts +54 -54
  78. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  79. package/src/module/auth/strategies/local.strategy.ts +13 -13
  80. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  81. package/src/module/dashboard/dashboard.module.ts +21 -21
  82. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  83. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  84. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  85. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  86. package/src/module/dev/dev.module.ts +12 -12
  87. package/src/module/dev/service/dev.service.ts +7 -7
  88. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  89. package/src/module/enterprise/enterprise.module.ts +30 -30
  90. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  91. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  92. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  93. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  94. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  95. package/src/module/enterprise/repository/school.repository.ts +281 -281
  96. package/src/module/enterprise/service/brand.service.ts +5 -5
  97. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  98. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  99. package/src/module/enterprise/service/organization.service.ts +145 -145
  100. package/src/module/filter/controller/filter.controller.ts +84 -84
  101. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  102. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  103. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  104. package/src/module/filter/filter.module.ts +31 -31
  105. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  106. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  107. package/src/module/filter/service/filter.service.ts +868 -868
  108. package/src/module/filter/service/saved-filter.service.ts +170 -170
  109. package/src/module/ics/controller/ics.controller.ts +21 -21
  110. package/src/module/ics/dto/ics.dto.ts +55 -55
  111. package/src/module/ics/ics.module.ts +13 -13
  112. package/src/module/ics/service/ics.service.ts +57 -57
  113. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  114. package/src/module/integration/controller/integration.controller.ts +662 -662
  115. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  116. package/src/module/integration/dto/create-config.dto.ts +526 -526
  117. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  118. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  119. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  120. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  121. package/src/module/integration/examples/usage.example.ts +338 -338
  122. package/src/module/integration/factories/base.factory.ts +7 -7
  123. package/src/module/integration/factories/email.factory.ts +49 -49
  124. package/src/module/integration/factories/integration.factory.ts +121 -121
  125. package/src/module/integration/factories/sms.factory.ts +51 -51
  126. package/src/module/integration/factories/telephone.factory.ts +41 -41
  127. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  128. package/src/module/integration/integration.module.ts +110 -110
  129. package/src/module/integration/service/calendar-event.service.ts +118 -118
  130. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  131. package/src/module/integration/service/integration-queue.service.ts +229 -229
  132. package/src/module/integration/service/integration.service.ts +2572 -2572
  133. package/src/module/integration/service/oauth.service.ts +224 -224
  134. package/src/module/integration/service/wrapper.service.ts +457 -457
  135. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  136. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  137. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  138. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  139. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  140. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  141. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  142. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  143. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  144. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  145. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  146. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  147. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  148. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  149. package/src/module/layout/controller/layout.controller.ts +47 -47
  150. package/src/module/layout/entity/header-items.entity.ts +28 -28
  151. package/src/module/layout/entity/header-section.entity.ts +19 -19
  152. package/src/module/layout/layout.module.ts +21 -21
  153. package/src/module/layout/repository/header-items.repository.ts +18 -18
  154. package/src/module/layout/repository/header-section.repository.ts +22 -22
  155. package/src/module/layout/service/header-section.service.ts +25 -25
  156. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  157. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  158. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  159. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  160. package/src/module/layout_preference/service/layout_preference.service.ts +172 -172
  161. package/src/module/lead/controller/lead.controller.ts +30 -30
  162. package/src/module/lead/lead.module.ts +14 -14
  163. package/src/module/lead/repository/lead.repository.ts +41 -41
  164. package/src/module/lead/service/lead.service.ts +54 -54
  165. package/src/module/listmaster/controller/list-master.controller.ts +187 -187
  166. package/src/module/listmaster/entity/list-master-items.entity.ts +41 -41
  167. package/src/module/listmaster/entity/list-master.entity.ts +32 -32
  168. package/src/module/listmaster/listmaster.module.ts +44 -44
  169. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  170. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  171. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  172. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  173. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  174. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  175. package/src/module/listmaster/service/list-master.service.ts +424 -424
  176. package/src/module/mapper/controller/field-mapper.controller.ts +69 -69
  177. package/src/module/mapper/controller/mapper.controller.ts +15 -15
  178. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  179. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  180. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  181. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  182. package/src/module/mapper/mapper.module.ts +34 -34
  183. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  184. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  185. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  186. package/src/module/mapper/service/field-mapper.service.ts +245 -245
  187. package/src/module/mapper/service/mapper.service.ts +74 -74
  188. package/src/module/master/controller/master.controller.ts +74 -74
  189. package/src/module/master/service/master.service.ts +483 -483
  190. package/src/module/meta/controller/app-master.controller.ts +38 -38
  191. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  192. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  193. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  194. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  195. package/src/module/meta/controller/entity.controller.ts +385 -385
  196. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  197. package/src/module/meta/controller/media.controller.ts +82 -82
  198. package/src/module/meta/controller/meta.controller.ts +96 -96
  199. package/src/module/meta/controller/view-master.controller.ts +86 -86
  200. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  201. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  202. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  203. package/src/module/meta/entity/app-master.entity.ts +34 -34
  204. package/src/module/meta/entity/attribute-master.entity.ts +87 -87
  205. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  206. package/src/module/meta/entity/entity-master.entity.ts +78 -78
  207. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  208. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  209. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  210. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  211. package/src/module/meta/entity/media-data.entity.ts +32 -32
  212. package/src/module/meta/entity/preference.entity.ts +62 -62
  213. package/src/module/meta/entity/view-master.entity.ts +41 -41
  214. package/src/module/meta/entity.module.ts +158 -158
  215. package/src/module/meta/repository/app-master.repository.ts +20 -20
  216. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  217. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  218. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  219. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  220. package/src/module/meta/repository/media-data.repository.ts +50 -50
  221. package/src/module/meta/repository/preference.repository.ts +20 -20
  222. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  223. package/src/module/meta/repository/view-master.repository.ts +42 -42
  224. package/src/module/meta/service/app-master.service.ts +37 -37
  225. package/src/module/meta/service/attribute-master.service.ts +117 -117
  226. package/src/module/meta/service/common.service.ts +9 -9
  227. package/src/module/meta/service/entity-dynamic.service.ts +762 -762
  228. package/src/module/meta/service/entity-list.service.ts +205 -205
  229. package/src/module/meta/service/entity-master.service.ts +164 -164
  230. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  231. package/src/module/meta/service/entity-relation.service.ts +69 -69
  232. package/src/module/meta/service/entity-service-impl.service.ts +524 -524
  233. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  234. package/src/module/meta/service/entity-table.service.ts +150 -150
  235. package/src/module/meta/service/entity-validation.service.ts +185 -185
  236. package/src/module/meta/service/entity.service.ts +67 -67
  237. package/src/module/meta/service/field-group.service.ts +103 -103
  238. package/src/module/meta/service/media-data.service.ts +149 -149
  239. package/src/module/meta/service/populate-meta.service.ts +173 -173
  240. package/src/module/meta/service/preference.service.ts +16 -16
  241. package/src/module/meta/service/resolver.service.ts +240 -240
  242. package/src/module/meta/service/section-master.service.ts +104 -104
  243. package/src/module/meta/service/update-form-json.service.ts +22 -22
  244. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  245. package/src/module/meta/service/view-master.service.ts +111 -111
  246. package/src/module/module/controller/menu.controller.ts +15 -15
  247. package/src/module/module/controller/module-access.controller.ts +134 -134
  248. package/src/module/module/entity/menu.entity.ts +43 -43
  249. package/src/module/module/entity/module-access.entity.ts +25 -25
  250. package/src/module/module/entity/module-action.entity.ts +17 -17
  251. package/src/module/module/entity/module.entity.ts +52 -52
  252. package/src/module/module/module.module.ts +42 -42
  253. package/src/module/module/repository/menu.repository.ts +184 -184
  254. package/src/module/module/repository/module-access.repository.ts +344 -344
  255. package/src/module/module/service/menu.service.ts +82 -82
  256. package/src/module/module/service/module-access.service.ts +209 -209
  257. package/src/module/notification/controller/notification.controller.ts +58 -58
  258. package/src/module/notification/controller/otp.controller.ts +117 -117
  259. package/src/module/notification/entity/notification.entity.ts +26 -26
  260. package/src/module/notification/entity/otp.entity.ts +28 -28
  261. package/src/module/notification/firebase-admin.config.ts +22 -22
  262. package/src/module/notification/notification.module.ts +69 -69
  263. package/src/module/notification/repository/otp.repository.ts +27 -27
  264. package/src/module/notification/service/email.service.ts +127 -127
  265. package/src/module/notification/service/notification.service.ts +164 -138
  266. package/src/module/notification/service/otp.service.ts +125 -125
  267. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  268. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  269. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  270. package/src/module/third-party-module/third-party.module.ts +12 -12
  271. package/src/module/user/controller/login.controller.ts +197 -197
  272. package/src/module/user/controller/user.controller.ts +40 -40
  273. package/src/module/user/dto/create-user.dto.ts +62 -62
  274. package/src/module/user/dto/update-user.dto.ts +4 -4
  275. package/src/module/user/entity/role.entity.ts +33 -33
  276. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  277. package/src/module/user/entity/user-session.entity.ts +61 -61
  278. package/src/module/user/entity/user.entity.ts +71 -71
  279. package/src/module/user/repository/role.repository.ts +96 -96
  280. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  281. package/src/module/user/repository/user.repository.ts +50 -50
  282. package/src/module/user/repository/userSession.repository.ts +33 -33
  283. package/src/module/user/service/login.service.ts +280 -280
  284. package/src/module/user/service/role.service.ts +189 -189
  285. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  286. package/src/module/user/service/user-session.service.ts +168 -168
  287. package/src/module/user/service/user.service.ts +353 -353
  288. package/src/module/user/user.module.ts +65 -65
  289. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  290. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  291. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  292. package/src/module/workflow/controller/action.controller.ts +95 -95
  293. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  294. package/src/module/workflow/controller/comm-template.controller.ts +41 -41
  295. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  296. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  297. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  298. package/src/module/workflow/controller/stage.controller.ts +50 -50
  299. package/src/module/workflow/controller/task.controller.ts +77 -77
  300. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  301. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  302. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  303. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  304. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  305. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  306. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  307. package/src/module/workflow/entity/action.entity.ts +50 -50
  308. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  309. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  310. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  311. package/src/module/workflow/entity/form.entity.ts +25 -25
  312. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  313. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  314. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  315. package/src/module/workflow/entity/stage.entity.ts +20 -20
  316. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  317. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  318. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  319. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  320. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  321. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  322. package/src/module/workflow/repository/action-data.repository.ts +242 -242
  323. package/src/module/workflow/repository/action.repository.ts +277 -277
  324. package/src/module/workflow/repository/activity-log.repository.ts +149 -121
  325. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  326. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  327. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  328. package/src/module/workflow/repository/stage-movement.repository.ts +227 -227
  329. package/src/module/workflow/repository/stage.repository.ts +172 -172
  330. package/src/module/workflow/repository/task.repository.ts +117 -117
  331. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  332. package/src/module/workflow/service/action-category.service.ts +33 -33
  333. package/src/module/workflow/service/action-data.service.ts +62 -62
  334. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  335. package/src/module/workflow/service/action-template-mapping.service.ts +55 -55
  336. package/src/module/workflow/service/action.service.ts +263 -263
  337. package/src/module/workflow/service/activity-log.service.ts +107 -107
  338. package/src/module/workflow/service/comm-template.service.ts +176 -176
  339. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  340. package/src/module/workflow/service/form-master.service.ts +35 -35
  341. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  342. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  343. package/src/module/workflow/service/stage-group.service.ts +316 -330
  344. package/src/module/workflow/service/stage.service.ts +199 -199
  345. package/src/module/workflow/service/task.service.ts +561 -531
  346. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  347. package/src/module/workflow/service/workflow-meta.service.ts +581 -581
  348. package/src/module/workflow/service/workflow.service.ts +205 -205
  349. package/src/module/workflow/workflow.module.ts +174 -174
  350. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  351. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  352. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  353. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  354. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  355. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  356. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  357. package/src/module/workflow-automation/service/workflow-automation.service.ts +345 -345
  358. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  359. package/src/resources/dev.properties.yaml +30 -30
  360. package/src/resources/local.properties.yaml +27 -27
  361. package/src/resources/properties.module.ts +12 -12
  362. package/src/resources/properties.yaml.ts +11 -11
  363. package/src/resources/uat.properties.yaml +15 -15
  364. package/src/utils/dto/excel-data.dto.ts +14 -14
  365. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  366. package/src/utils/service/base64util.service.ts +18 -18
  367. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  368. package/src/utils/service/codeGenerator.service.ts +22 -22
  369. package/src/utils/service/dateUtil.service.ts +17 -17
  370. package/src/utils/service/encryptUtil.service.ts +97 -97
  371. package/src/utils/service/excel-helper.service.ts +72 -72
  372. package/src/utils/service/excelUtil.service.ts +15 -15
  373. package/src/utils/service/file-util.service.ts +11 -11
  374. package/src/utils/service/json-util.service.ts +23 -23
  375. package/src/utils/service/loggingUtil.service.ts +34 -34
  376. package/src/utils/service/reflection-helper.service.ts +62 -62
  377. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  378. package/src/utils/utils.module.ts +25 -25
  379. package/tsconfig.build.json +4 -4
  380. package/tsconfig.json +24 -24
  381. package/.claude/settings.local.json +0 -26
  382. package/.idea/250218_nodejs_core.iml +0 -9
  383. package/.idea/codeStyles/Project.xml +0 -59
  384. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  385. package/.idea/copilot.data.migration.agent.xml +0 -6
  386. package/.idea/copilot.data.migration.ask.xml +0 -6
  387. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  388. package/.idea/copilot.data.migration.edit.xml +0 -6
  389. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  390. package/.idea/misc.xml +0 -6
  391. package/.idea/modules.xml +0 -8
  392. package/.idea/prettier.xml +0 -6
  393. package/.idea/vcs.xml +0 -6
  394. package/server.log +0 -850
@@ -1,330 +1,316 @@
1
- import { app } from 'firebase-admin';
2
- import { BadGatewayException, Inject, Injectable } from '@nestjs/common';
3
- import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
4
- import { StageGroupRepository } from '../repository/stage-group.repository';
5
- import { BaseEntity } from 'src/module/meta/entity/base-entity.entity';
6
- import { UserData } from 'src/module/user/entity/user.entity';
7
- import { StageService } from './stage.service';
8
- import { DataSource, Repository } from 'typeorm';
9
- import { WorkflowLevelMappingEntity } from '../entity/workflow-level-mapping.entity';
10
- import { InjectRepository } from '@nestjs/typeorm';
11
- import { StageMovementData } from '../entity/stage-movement-data.entity';
12
- import * as moment from 'moment';
13
- import { MediaDataService } from 'src/module/meta/service/media-data.service';
14
- import axios from 'axios';
15
- import { ConfigService } from '@nestjs/config';
16
-
17
- @Injectable()
18
- export class StageGroupService extends EntityServiceImpl {
19
- constructor(
20
- private readonly stageGroupRepository: StageGroupRepository,
21
- @Inject('StageService')
22
- private readonly stageService: StageService,
23
- private readonly dataSource: DataSource,
24
- @InjectRepository(WorkflowLevelMappingEntity)
25
- private readonly workflowLevelMappingRepo: Repository<WorkflowLevelMappingEntity>,
26
- @InjectRepository(StageMovementData)
27
- private readonly stageMovementRepo: Repository<StageMovementData>,
28
- private readonly mediaDataService: MediaDataService,
29
- private readonly configService: ConfigService,
30
- ) {
31
- super();
32
- }
33
- async getAllStageGroup(workflow_id: number, organization_id: number) {
34
- const allStageGroup = await this.stageGroupRepository.getAllStageGroup(
35
- workflow_id,
36
- organization_id,
37
- );
38
- const statusListMaster = await this.dataSource.query(
39
- `SELECT id, name
40
- FROM cr_list_master_items
41
- WHERE listtype = 'STS' AND organization_id = ?`,
42
- [organization_id],
43
- );
44
-
45
- // Build a lookup map: id → name
46
- const statusMap = new Map(
47
- statusListMaster.map((s) => [String(s.id), s.name]),
48
- );
49
-
50
- for (const stage of allStageGroup) {
51
- stage.status = statusMap.get(String(stage.status)) as any;
52
- }
53
-
54
- return allStageGroup;
55
- }
56
-
57
- async getAllStageGroupAndStageHierarchy(
58
- loggedInUser: UserData,
59
- lead_id: number,
60
- ) {
61
- // 1. Find workflow mapping at user level
62
- let workflowLevelMapping = await this.workflowLevelMappingRepo.findOne({
63
- where: {
64
- mapped_level_type: loggedInUser.level_type,
65
- mapped_level_id: loggedInUser.level_id,
66
- },
67
- });
68
-
69
- // 2. Fallback to organization level if not found
70
- if (!workflowLevelMapping) {
71
- workflowLevelMapping = await this.workflowLevelMappingRepo.findOne({
72
- where: {
73
- mapped_level_type: 'ORG',
74
- mapped_level_id: String(loggedInUser.organization_id),
75
- },
76
- });
77
- }
78
-
79
- if (!workflowLevelMapping) return null;
80
-
81
- // 3) Lead status (parameterized)
82
- let leadStatus: string | null = null;
83
- const leadData = await this.dataSource.query(
84
- `SELECT lead_status FROM crm_lead WHERE id = ?`,
85
- [lead_id],
86
- );
87
- if (leadData.length > 0 && leadData[0].lead_status != null) {
88
- const leadStatusResolved = await this.dataSource.query(
89
- `SELECT name FROM cr_list_master_items WHERE id = ? AND organization_id = ?`,
90
- [leadData[0].lead_status, loggedInUser.organization_id],
91
- );
92
- if (leadStatusResolved.length > 0) {
93
- leadStatus = leadStatusResolved[0].name;
94
- }
95
- }
96
- // 4. Fetch stage groups & hierarchy
97
- const stageGroupAndStageHierarchy =
98
- (await this.stageGroupRepository.getAllStageGroupAndStageHierarchy(
99
- workflowLevelMapping.workflow_id,
100
- loggedInUser,
101
- lead_id,
102
- )) as Array<{
103
- stages: any[];
104
- stage_group_status?: string;
105
- [key: string]: any;
106
- }>;
107
-
108
- if (stageGroupAndStageHierarchy.length === 0) return [];
109
-
110
- // 5. Get stage movement data
111
- const stageMovementData = await this.stageMovementRepo.find({
112
- where: {
113
- mapped_entity_type: 'LEAD',
114
- mapped_entity_id: lead_id,
115
- },
116
- });
117
-
118
- if (stageMovementData.length === 0) {
119
- throw new BadGatewayException(
120
- `No lead found with id ${lead_id} or no stage movements recorded for this lead`,
121
- );
122
- }
123
-
124
- // 6. Map stage_id => movement data
125
- const stageMovementMap = new Map<number, any>();
126
- for (const movement of stageMovementData) {
127
- stageMovementMap.set(movement.stage_id, movement);
128
- }
129
-
130
- let foundInProgressGroup = false;
131
-
132
- const userCache = new Map<
133
- number,
134
- { created_by_name: string | null; profile: any }
135
- >();
136
-
137
- // 7. Loop & apply IST conversions
138
- for (const group of stageGroupAndStageHierarchy) {
139
- const stagePromises = (group.stages || []).map(async (stage) => {
140
- const movement = stageMovementMap.get(Number(stage.id));
141
-
142
- if (movement) {
143
- stage.is_current = movement.is_current === 'Y';
144
- stage.is_done = movement.is_current === 'N';
145
-
146
- stage.start_time = movement.start_date
147
- ? moment.utc(movement.start_date).local().format('DD-MMM, hh:mm A')
148
- : null;
149
-
150
- stage.end_time = movement.end_date
151
- ? moment.utc(movement.end_date).local().format('DD-MMM, hh:mm A')
152
- : null;
153
-
154
- stage.time_spent = await this.calculateTimeSpent(
155
- movement.start_date,
156
- movement.end_date ?? new Date(),
157
- );
158
-
159
- if (movement.current_user_id) {
160
- if (!userCache.has(movement.current_user_id)) {
161
- const user = await this.getUserNameAndProfilePic(
162
- movement.current_user_id,
163
- loggedInUser,
164
- );
165
- userCache.set(movement.current_user_id, user);
166
- }
167
- Object.assign(stage, userCache.get(movement.current_user_id));
168
- }
169
- } else {
170
- stage.is_current = false;
171
- stage.is_done = false;
172
- stage.start_time = null;
173
- stage.end_time = null;
174
- stage.time_spent = null;
175
- stage.created_by_name = null;
176
- stage.profile = null;
177
- }
178
-
179
- if (leadStatus) {
180
- stage.lead_status = leadStatus;
181
- }
182
- });
183
-
184
- await Promise.all(stagePromises);
185
-
186
- if (group.stages.length === 0) {
187
- group.stage_group_status = 'TODO';
188
- continue;
189
- }
190
-
191
- const allDone = group.stages.every((s) => s.is_done);
192
- const noneStarted = group.stages.every(
193
- (s) => !s.is_current && !s.is_done,
194
- );
195
-
196
- if (allDone) {
197
- group.stage_group_status = 'COMPLETED';
198
- } else if (!foundInProgressGroup && !noneStarted) {
199
- group.stage_group_status = 'IN_PROGRESS';
200
- foundInProgressGroup = true;
201
- } else {
202
- group.stage_group_status = 'TODO';
203
- }
204
- }
205
-
206
- return stageGroupAndStageHierarchy;
207
- }
208
-
209
- async getUserNameAndProfilePic(
210
- userId: number,
211
- loggedInUser: UserData,
212
- ): Promise<any> {
213
- // const user = await this.dataSource.query(
214
- // `SELECT eth_user_profile.name AS created_by_name,
215
- // eth_user_profile.profile_image AS profile_image
216
- // FROM eth_user_profile
217
- // WHERE eth_user_profile.id = ?;`,
218
- // [userId],
219
- // );
220
-
221
- let user: any = [];
222
-
223
- try {
224
- const baseUrl = this.configService.get<string>('REDIRECT_BE_URL');
225
-
226
- // Prepare the query string
227
- const queryParams = new URLSearchParams({
228
- loggedInUser: JSON.stringify(loggedInUser),
229
- }).toString();
230
-
231
- // Make the GET request with query parameters
232
- const response = await axios.get(
233
- `${baseUrl}/entity/public/getById/${userId}?entity_type=UPR&${queryParams}`,
234
- {
235
- headers: {
236
- 'Content-Type': 'application/json',
237
- },
238
- },
239
- );
240
-
241
- console.log('✅ Internal Entity API response:', response.data);
242
- user = [response.data];
243
- } catch (error) {
244
- console.error('⚠️ Internal Entity API call failed:', error.message);
245
- }
246
-
247
- if (user.length === 0) return null;
248
-
249
- const profileImageId = user[0].profile_image;
250
- let profile: any = null;
251
-
252
- if (profileImageId) {
253
- profile = await this.mediaDataService.getMediaDownloadUrl(
254
- profileImageId,
255
- loggedInUser,
256
- );
257
- }
258
-
259
- return {
260
- created_by_name: user[0].name,
261
- profile: profile,
262
- };
263
- }
264
-
265
- async calculateTimeSpent(
266
- start: Date | string,
267
- end?: Date | string,
268
- ): Promise<string> {
269
- const startMoment = moment(start);
270
- const endMoment = end ? moment(end) : moment();
271
-
272
- // Use absolute difference so it's never negative
273
- const diff = Math.abs(endMoment.diff(startMoment));
274
- const duration = moment.duration(diff);
275
-
276
- const days = duration.asDays();
277
-
278
- if (days > 7) {
279
- return startMoment.format('DD-MMM-YYYY');
280
- } else if (days >= 1) {
281
- return `${Math.floor(days)} days`;
282
- } else if (duration.asHours() >= 1) {
283
- return `${Math.floor(duration.asHours())} hours`;
284
- } else if (duration.asMinutes() >= 1) {
285
- return `${Math.floor(duration.asMinutes())} mins`;
286
- } else {
287
- return `${Math.floor(duration.asSeconds())} sec`;
288
- }
289
- }
290
-
291
- async updateEntity(
292
- entityData: BaseEntity,
293
- loggedInUser: UserData,
294
- ): Promise<any> {
295
- return await super.updateEntity(entityData, loggedInUser);
296
- }
297
-
298
- async getEntityData(
299
- entityType: string,
300
- id: number,
301
- loggedInUser?: UserData,
302
- ): Promise<BaseEntity | null> {
303
- return await super.getEntityData(entityType, id, loggedInUser);
304
- }
305
-
306
- async deleteEntity(
307
- entityType: string,
308
- id: number,
309
- loggedInUser: UserData,
310
- ): Promise<any> {
311
- const getAllStage = await this.dataSource.query(
312
- `SELECT id FROM cr_wf_stage WHERE stage_group_id = ? AND level_id =? AND level_type = ?`,
313
- [id, loggedInUser.level_id, loggedInUser.level_type],
314
- );
315
-
316
- if (getAllStage.length > 0) {
317
- for (const stage of getAllStage) {
318
- await this.stageService.deleteEntity('WFS', stage.id, loggedInUser);
319
- }
320
- }
321
-
322
- const deleteStageGroup = await super.deleteEntity(
323
- entityType,
324
- id,
325
- loggedInUser,
326
- );
327
-
328
- return deleteStageGroup;
329
- }
330
- }
1
+ import { app } from 'firebase-admin';
2
+ import { BadGatewayException, Inject, Injectable } from '@nestjs/common';
3
+ import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
4
+ import { StageGroupRepository } from '../repository/stage-group.repository';
5
+ import { BaseEntity } from 'src/module/meta/entity/base-entity.entity';
6
+ import { UserData } from 'src/module/user/entity/user.entity';
7
+ import { StageService } from './stage.service';
8
+ import { DataSource, Repository } from 'typeorm';
9
+ import { WorkflowLevelMappingEntity } from '../entity/workflow-level-mapping.entity';
10
+ import { InjectRepository } from '@nestjs/typeorm';
11
+ import { StageMovementData } from '../entity/stage-movement-data.entity';
12
+ import * as moment from 'moment';
13
+ import { MediaDataService } from 'src/module/meta/service/media-data.service';
14
+ import axios from 'axios';
15
+ import { ConfigService } from '@nestjs/config';
16
+
17
+ @Injectable()
18
+ export class StageGroupService extends EntityServiceImpl {
19
+ constructor(
20
+ private readonly stageGroupRepository: StageGroupRepository,
21
+ @Inject('StageService')
22
+ private readonly stageService: StageService,
23
+ private readonly dataSource: DataSource,
24
+ @InjectRepository(WorkflowLevelMappingEntity)
25
+ private readonly workflowLevelMappingRepo: Repository<WorkflowLevelMappingEntity>,
26
+ @InjectRepository(StageMovementData)
27
+ private readonly stageMovementRepo: Repository<StageMovementData>,
28
+ private readonly mediaDataService: MediaDataService,
29
+ private readonly configService: ConfigService,
30
+ ) {
31
+ super();
32
+ }
33
+ async getAllStageGroup(workflow_id: number, organization_id: number) {
34
+ const allStageGroup = await this.stageGroupRepository.getAllStageGroup(
35
+ workflow_id,
36
+ organization_id,
37
+ );
38
+ const statusListMaster = await this.dataSource.query(
39
+ `SELECT id, name
40
+ FROM cr_list_master_items
41
+ WHERE listtype = 'STS' AND organization_id = ?`,
42
+ [organization_id],
43
+ );
44
+
45
+ // Build a lookup map: id → name
46
+ const statusMap = new Map(
47
+ statusListMaster.map((s) => [String(s.id), s.name]),
48
+ );
49
+
50
+ for (const stage of allStageGroup) {
51
+ stage.status = statusMap.get(String(stage.status)) as any;
52
+ }
53
+
54
+ return allStageGroup;
55
+ }
56
+
57
+ async getAllStageGroupAndStageHierarchy(
58
+ loggedInUser: UserData,
59
+ lead_id: number,
60
+ ) {
61
+ // 1. Find workflow mapping at user level
62
+ let workflowLevelMapping = await this.workflowLevelMappingRepo.findOne({
63
+ where: {
64
+ mapped_level_type: loggedInUser.level_type,
65
+ mapped_level_id: loggedInUser.level_id,
66
+ },
67
+ });
68
+
69
+ // 2. Fallback to organization level if not found
70
+ if (!workflowLevelMapping) {
71
+ workflowLevelMapping = await this.workflowLevelMappingRepo.findOne({
72
+ where: {
73
+ mapped_level_type: 'ORG',
74
+ mapped_level_id: String(loggedInUser.organization_id),
75
+ },
76
+ });
77
+ }
78
+
79
+ if (!workflowLevelMapping) return null;
80
+
81
+ // 3) Lead status (parameterized)
82
+ let leadStatus: string | null = null;
83
+ const leadData = await this.dataSource.query(
84
+ `SELECT lead_status FROM crm_lead WHERE id = ?`,
85
+ [lead_id],
86
+ );
87
+ if (leadData.length > 0 && leadData[0].lead_status != null) {
88
+ const leadStatusResolved = await this.dataSource.query(
89
+ `SELECT name FROM cr_list_master_items WHERE id = ? AND organization_id = ?`,
90
+ [leadData[0].lead_status, loggedInUser.organization_id],
91
+ );
92
+ if (leadStatusResolved.length > 0) {
93
+ leadStatus = leadStatusResolved[0].name;
94
+ }
95
+ }
96
+ // 4. Fetch stage groups & hierarchy
97
+ const stageGroupAndStageHierarchy =
98
+ (await this.stageGroupRepository.getAllStageGroupAndStageHierarchy(
99
+ workflowLevelMapping.workflow_id,
100
+ loggedInUser,
101
+ lead_id,
102
+ )) as Array<{
103
+ stages: any[];
104
+ stage_group_status?: string;
105
+ [key: string]: any;
106
+ }>;
107
+
108
+ if (stageGroupAndStageHierarchy.length === 0) return [];
109
+
110
+ // 5. Get stage movement data
111
+ const stageMovementData = await this.stageMovementRepo.find({
112
+ where: {
113
+ mapped_entity_type: 'LEAD',
114
+ mapped_entity_id: lead_id,
115
+ },
116
+ });
117
+
118
+ if (stageMovementData.length === 0) {
119
+ throw new BadGatewayException(
120
+ `No lead found with id ${lead_id} or no stage movements recorded for this lead`,
121
+ );
122
+ }
123
+
124
+ // 6. Map stage_id => movement data
125
+ const stageMovementMap = new Map<number, any>();
126
+ for (const movement of stageMovementData) {
127
+ stageMovementMap.set(movement.stage_id, movement);
128
+ }
129
+
130
+ let foundInProgressGroup = false;
131
+
132
+ const userCache = new Map<
133
+ number,
134
+ { created_by_name: string | null; profile: any }
135
+ >();
136
+
137
+ // 7. Loop & apply IST conversions
138
+ for (const group of stageGroupAndStageHierarchy) {
139
+ const stagePromises = (group.stages || []).map(async (stage) => {
140
+ const movement = stageMovementMap.get(Number(stage.id));
141
+
142
+ if (movement) {
143
+ stage.is_current = movement.is_current === 'Y';
144
+ stage.is_done = movement.is_current === 'N';
145
+
146
+ stage.start_time = movement.start_date
147
+ ? moment.utc(movement.start_date).local().format('DD-MMM, hh:mm A')
148
+ : null;
149
+
150
+ stage.end_time = movement.end_date
151
+ ? moment.utc(movement.end_date).local().format('DD-MMM, hh:mm A')
152
+ : null;
153
+
154
+ stage.time_spent = await this.calculateTimeSpent(
155
+ movement.start_date,
156
+ movement.end_date ?? new Date(),
157
+ );
158
+
159
+ if (movement.current_user_id) {
160
+ if (!userCache.has(movement.current_user_id)) {
161
+ const user = await this.getUserNameAndProfilePic(
162
+ movement.current_user_id,
163
+ loggedInUser,
164
+ );
165
+ userCache.set(movement.current_user_id, user);
166
+ }
167
+ Object.assign(stage, userCache.get(movement.current_user_id));
168
+ }
169
+ } else {
170
+ stage.is_current = false;
171
+ stage.is_done = false;
172
+ stage.start_time = null;
173
+ stage.end_time = null;
174
+ stage.time_spent = null;
175
+ stage.created_by_name = null;
176
+ stage.profile = null;
177
+ }
178
+
179
+ if (leadStatus) {
180
+ stage.lead_status = leadStatus;
181
+ }
182
+ });
183
+
184
+ await Promise.all(stagePromises);
185
+
186
+ if (group.stages.length === 0) {
187
+ group.stage_group_status = 'TODO';
188
+ continue;
189
+ }
190
+
191
+ const allDone = group.stages.every((s) => s.is_done);
192
+ const noneStarted = group.stages.every(
193
+ (s) => !s.is_current && !s.is_done,
194
+ );
195
+
196
+ if (allDone) {
197
+ group.stage_group_status = 'COMPLETED';
198
+ } else if (!foundInProgressGroup && !noneStarted) {
199
+ group.stage_group_status = 'IN_PROGRESS';
200
+ foundInProgressGroup = true;
201
+ } else {
202
+ group.stage_group_status = 'TODO';
203
+ }
204
+ }
205
+
206
+ return stageGroupAndStageHierarchy;
207
+ }
208
+
209
+ async getUserNameAndProfilePic(
210
+ userId: number,
211
+ loggedInUser: UserData,
212
+ ): Promise<any> {
213
+ // const user = await this.dataSource.query(
214
+ // `SELECT eth_user_profile.name AS created_by_name,
215
+ // eth_user_profile.profile_image AS profile_image
216
+ // FROM eth_user_profile
217
+ // WHERE eth_user_profile.id = ?;`,
218
+ // [userId],
219
+ // );
220
+
221
+ let user: any = {};
222
+
223
+ try {
224
+ const baseUrl = this.configService.get<string>('REDIRECT_BE_URL');
225
+
226
+ // Prepare the query string
227
+ const queryParams = new URLSearchParams({
228
+ loggedInUser: JSON.stringify(loggedInUser),
229
+ }).toString();
230
+
231
+ // Make the GET request with query parameters
232
+ const response = await axios.get(
233
+ `${baseUrl}/users/profile-image-url/${userId}?entity_type=UPR&${queryParams}`,
234
+ {
235
+ headers: {
236
+ 'Content-Type': 'application/json',
237
+ },
238
+ },
239
+ );
240
+
241
+ console.log('✅ Internal Entity API response:', response.data);
242
+ user = response.data || {};
243
+ user.created_by_name = response.data.name;
244
+ user.profile = response.data.profile_image;
245
+ } catch (error) {
246
+ console.error('⚠️ Internal Entity API call failed:', error.message);
247
+ }
248
+ return [user];
249
+ }
250
+
251
+ async calculateTimeSpent(
252
+ start: Date | string,
253
+ end?: Date | string,
254
+ ): Promise<string> {
255
+ const startMoment = moment(start);
256
+ const endMoment = end ? moment(end) : moment();
257
+
258
+ // Use absolute difference so it's never negative
259
+ const diff = Math.abs(endMoment.diff(startMoment));
260
+ const duration = moment.duration(diff);
261
+
262
+ const days = duration.asDays();
263
+
264
+ if (days > 7) {
265
+ return startMoment.format('DD-MMM-YYYY');
266
+ } else if (days >= 1) {
267
+ return `${Math.floor(days)} days`;
268
+ } else if (duration.asHours() >= 1) {
269
+ return `${Math.floor(duration.asHours())} hours`;
270
+ } else if (duration.asMinutes() >= 1) {
271
+ return `${Math.floor(duration.asMinutes())} mins`;
272
+ } else {
273
+ return `${Math.floor(duration.asSeconds())} sec`;
274
+ }
275
+ }
276
+
277
+ async updateEntity(
278
+ entityData: BaseEntity,
279
+ loggedInUser: UserData,
280
+ ): Promise<any> {
281
+ return await super.updateEntity(entityData, loggedInUser);
282
+ }
283
+
284
+ async getEntityData(
285
+ entityType: string,
286
+ id: number,
287
+ loggedInUser?: UserData,
288
+ ): Promise<BaseEntity | null> {
289
+ return await super.getEntityData(entityType, id, loggedInUser);
290
+ }
291
+
292
+ async deleteEntity(
293
+ entityType: string,
294
+ id: number,
295
+ loggedInUser: UserData,
296
+ ): Promise<any> {
297
+ const getAllStage = await this.dataSource.query(
298
+ `SELECT id FROM cr_wf_stage WHERE stage_group_id = ? AND level_id =? AND level_type = ?`,
299
+ [id, loggedInUser.level_id, loggedInUser.level_type],
300
+ );
301
+
302
+ if (getAllStage.length > 0) {
303
+ for (const stage of getAllStage) {
304
+ await this.stageService.deleteEntity('WFS', stage.id, loggedInUser);
305
+ }
306
+ }
307
+
308
+ const deleteStageGroup = await super.deleteEntity(
309
+ entityType,
310
+ id,
311
+ loggedInUser,
312
+ );
313
+
314
+ return deleteStageGroup;
315
+ }
316
+ }