rez_core 3.1.189 → 3.1.190

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/.claude/settings.local.json +26 -0
  2. package/.idea/250218_nodejs_core.iml +9 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/copilot.data.migration.agent.xml +6 -0
  6. package/.idea/copilot.data.migration.ask.xml +6 -0
  7. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  8. package/.idea/copilot.data.migration.edit.xml +6 -0
  9. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.prettierrc +3 -3
  15. package/README.md +99 -99
  16. package/dist/module/auth/guards/role.guard.js +3 -3
  17. package/dist/module/auth/services/auth.service.js +2 -2
  18. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  19. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  20. package/dist/module/filter/service/filter.service.js +7 -7
  21. package/dist/module/integration/examples/usage.example.js +9 -9
  22. package/dist/module/integration/service/integration.service.js +1 -1
  23. package/dist/module/integration/service/wrapper.service.js +25 -25
  24. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  25. package/dist/module/listmaster/service/list-master.service.js +2 -2
  26. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  27. package/dist/module/mapper/service/mapper.service.js +4 -4
  28. package/dist/module/meta/service/entity-dynamic.service.js +18 -18
  29. package/dist/module/meta/service/entity-list.service.js +3 -3
  30. package/dist/module/meta/service/entity-master.service.js +3 -3
  31. package/dist/module/meta/service/entity-relation.service.js +11 -11
  32. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  33. package/dist/module/meta/service/resolver.service.js +3 -3
  34. package/dist/module/module/repository/menu.repository.js +12 -12
  35. package/dist/module/notification/service/notification.service.js +12 -12
  36. package/dist/module/user/controller/login.controller.js +18 -18
  37. package/dist/module/user/service/role.service.js +4 -4
  38. package/dist/module/user/service/user-session.service.js +2 -2
  39. package/dist/module/workflow/repository/action.repository.js +16 -16
  40. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  41. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  42. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  43. package/dist/module/workflow/repository/stage-movement.repository.js +11 -11
  44. package/dist/module/workflow/repository/stage.repository.js +8 -8
  45. package/dist/module/workflow/service/action-template-mapping.service.js +10 -10
  46. package/dist/module/workflow/service/action.service.js +7 -7
  47. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  48. package/dist/module/workflow/service/stage-group.service.js +2 -2
  49. package/dist/module/workflow/service/stage.service.js +2 -2
  50. package/dist/module/workflow/service/task.service.js +33 -33
  51. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  52. package/dist/module/workflow/service/workflow-meta.service.js +50 -50
  53. package/dist/module/workflow/service/workflow.service.js +2 -2
  54. package/dist/tsconfig.build.tsbuildinfo +1 -1
  55. package/dist/utils/service/reflection-helper.service.js +2 -2
  56. package/docs/modules/event-driven-integration-design.md +91 -91
  57. package/docs/modules/integration.md +250 -250
  58. package/eslint.config.mjs +34 -34
  59. package/nest-cli.json +14 -14
  60. package/package.json +118 -118
  61. package/server.log +850 -0
  62. package/src/app.controller.ts +12 -12
  63. package/src/app.module.ts +49 -49
  64. package/src/app.service.ts +8 -8
  65. package/src/config/config.module.ts +18 -18
  66. package/src/config/database.config.ts +23 -23
  67. package/src/constant/global.constant.ts +67 -67
  68. package/src/core.module.ts +81 -81
  69. package/src/decorators/roles.decorator.ts +7 -7
  70. package/src/dtos/response.dto.ts +6 -6
  71. package/src/dtos/response.ts +5 -5
  72. package/src/index.ts +1 -1
  73. package/src/module/auth/auth.module.ts +49 -49
  74. package/src/module/auth/controller/auth.controller.ts +28 -28
  75. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  76. package/src/module/auth/guards/jwt.guard.ts +22 -22
  77. package/src/module/auth/guards/role.guard.ts +68 -68
  78. package/src/module/auth/services/auth.service.ts +50 -50
  79. package/src/module/auth/services/jwt.service.ts +11 -11
  80. package/src/module/auth/strategies/google.strategy.ts +54 -54
  81. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  82. package/src/module/auth/strategies/local.strategy.ts +13 -13
  83. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  84. package/src/module/dashboard/dashboard.module.ts +21 -21
  85. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  86. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  87. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  88. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  89. package/src/module/dev/dev.module.ts +12 -12
  90. package/src/module/dev/service/dev.service.ts +7 -7
  91. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  92. package/src/module/enterprise/enterprise.module.ts +30 -30
  93. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  94. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  95. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  96. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  97. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  98. package/src/module/enterprise/repository/school.repository.ts +281 -281
  99. package/src/module/enterprise/service/brand.service.ts +5 -5
  100. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  101. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  102. package/src/module/enterprise/service/organization.service.ts +145 -145
  103. package/src/module/filter/controller/filter.controller.ts +84 -84
  104. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  105. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  106. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  107. package/src/module/filter/filter.module.ts +31 -31
  108. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  109. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  110. package/src/module/filter/service/filter.service.ts +868 -868
  111. package/src/module/filter/service/saved-filter.service.ts +170 -170
  112. package/src/module/ics/controller/ics.controller.ts +21 -21
  113. package/src/module/ics/dto/ics.dto.ts +55 -55
  114. package/src/module/ics/ics.module.ts +13 -13
  115. package/src/module/ics/service/ics.service.ts +57 -57
  116. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  117. package/src/module/integration/controller/integration.controller.ts +662 -662
  118. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  119. package/src/module/integration/dto/create-config.dto.ts +526 -526
  120. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  121. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  122. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  123. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  124. package/src/module/integration/examples/usage.example.ts +338 -338
  125. package/src/module/integration/factories/base.factory.ts +7 -7
  126. package/src/module/integration/factories/email.factory.ts +49 -49
  127. package/src/module/integration/factories/integration.factory.ts +121 -121
  128. package/src/module/integration/factories/sms.factory.ts +51 -51
  129. package/src/module/integration/factories/telephone.factory.ts +41 -41
  130. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  131. package/src/module/integration/integration.module.ts +110 -110
  132. package/src/module/integration/service/calendar-event.service.ts +118 -118
  133. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  134. package/src/module/integration/service/integration-queue.service.ts +229 -229
  135. package/src/module/integration/service/integration.service.ts +2572 -2572
  136. package/src/module/integration/service/oauth.service.ts +224 -224
  137. package/src/module/integration/service/wrapper.service.ts +457 -457
  138. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  139. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  140. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  141. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  142. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  143. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  144. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  145. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  146. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  147. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  148. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  149. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  150. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  151. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  152. package/src/module/layout/controller/layout.controller.ts +47 -47
  153. package/src/module/layout/entity/header-items.entity.ts +28 -28
  154. package/src/module/layout/entity/header-section.entity.ts +19 -19
  155. package/src/module/layout/layout.module.ts +21 -21
  156. package/src/module/layout/repository/header-items.repository.ts +18 -18
  157. package/src/module/layout/repository/header-section.repository.ts +22 -22
  158. package/src/module/layout/service/header-section.service.ts +25 -25
  159. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  160. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  161. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  162. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  163. package/src/module/layout_preference/service/layout_preference.service.ts +172 -172
  164. package/src/module/lead/controller/lead.controller.ts +30 -30
  165. package/src/module/lead/lead.module.ts +14 -14
  166. package/src/module/lead/repository/lead.repository.ts +41 -41
  167. package/src/module/lead/service/lead.service.ts +54 -54
  168. package/src/module/listmaster/controller/list-master.controller.ts +187 -187
  169. package/src/module/listmaster/entity/list-master-items.entity.ts +41 -41
  170. package/src/module/listmaster/entity/list-master.entity.ts +32 -32
  171. package/src/module/listmaster/listmaster.module.ts +44 -44
  172. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  173. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  174. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  175. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  176. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  177. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  178. package/src/module/listmaster/service/list-master.service.ts +424 -424
  179. package/src/module/mapper/controller/field-mapper.controller.ts +69 -69
  180. package/src/module/mapper/controller/mapper.controller.ts +15 -15
  181. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  182. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  183. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  184. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  185. package/src/module/mapper/mapper.module.ts +34 -34
  186. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  187. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  188. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  189. package/src/module/mapper/service/field-mapper.service.ts +245 -245
  190. package/src/module/mapper/service/mapper.service.ts +74 -74
  191. package/src/module/master/controller/master.controller.ts +74 -74
  192. package/src/module/master/service/master.service.ts +483 -483
  193. package/src/module/meta/controller/app-master.controller.ts +38 -38
  194. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  195. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  196. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  197. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  198. package/src/module/meta/controller/entity.controller.ts +385 -385
  199. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  200. package/src/module/meta/controller/media.controller.ts +82 -82
  201. package/src/module/meta/controller/meta.controller.ts +96 -96
  202. package/src/module/meta/controller/view-master.controller.ts +86 -86
  203. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  204. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  205. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  206. package/src/module/meta/entity/app-master.entity.ts +34 -34
  207. package/src/module/meta/entity/attribute-master.entity.ts +87 -87
  208. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  209. package/src/module/meta/entity/entity-master.entity.ts +78 -78
  210. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  211. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  212. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  213. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  214. package/src/module/meta/entity/media-data.entity.ts +32 -32
  215. package/src/module/meta/entity/preference.entity.ts +62 -62
  216. package/src/module/meta/entity/view-master.entity.ts +41 -41
  217. package/src/module/meta/entity.module.ts +158 -158
  218. package/src/module/meta/repository/app-master.repository.ts +20 -20
  219. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  220. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  221. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  222. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  223. package/src/module/meta/repository/media-data.repository.ts +50 -50
  224. package/src/module/meta/repository/preference.repository.ts +20 -20
  225. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  226. package/src/module/meta/repository/view-master.repository.ts +42 -42
  227. package/src/module/meta/service/app-master.service.ts +37 -37
  228. package/src/module/meta/service/attribute-master.service.ts +117 -117
  229. package/src/module/meta/service/common.service.ts +9 -9
  230. package/src/module/meta/service/entity-dynamic.service.ts +762 -762
  231. package/src/module/meta/service/entity-list.service.ts +205 -205
  232. package/src/module/meta/service/entity-master.service.ts +164 -164
  233. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  234. package/src/module/meta/service/entity-relation.service.ts +69 -69
  235. package/src/module/meta/service/entity-service-impl.service.ts +524 -524
  236. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  237. package/src/module/meta/service/entity-table.service.ts +150 -150
  238. package/src/module/meta/service/entity-validation.service.ts +185 -185
  239. package/src/module/meta/service/entity.service.ts +67 -67
  240. package/src/module/meta/service/field-group.service.ts +103 -103
  241. package/src/module/meta/service/media-data.service.ts +149 -149
  242. package/src/module/meta/service/populate-meta.service.ts +173 -173
  243. package/src/module/meta/service/preference.service.ts +16 -16
  244. package/src/module/meta/service/resolver.service.ts +240 -240
  245. package/src/module/meta/service/section-master.service.ts +104 -104
  246. package/src/module/meta/service/update-form-json.service.ts +22 -22
  247. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  248. package/src/module/meta/service/view-master.service.ts +111 -111
  249. package/src/module/module/controller/menu.controller.ts +15 -15
  250. package/src/module/module/controller/module-access.controller.ts +134 -134
  251. package/src/module/module/entity/menu.entity.ts +43 -43
  252. package/src/module/module/entity/module-access.entity.ts +25 -25
  253. package/src/module/module/entity/module-action.entity.ts +17 -17
  254. package/src/module/module/entity/module.entity.ts +52 -52
  255. package/src/module/module/module.module.ts +42 -42
  256. package/src/module/module/repository/menu.repository.ts +184 -184
  257. package/src/module/module/repository/module-access.repository.ts +344 -344
  258. package/src/module/module/service/menu.service.ts +82 -82
  259. package/src/module/module/service/module-access.service.ts +209 -209
  260. package/src/module/notification/controller/notification.controller.ts +58 -58
  261. package/src/module/notification/controller/otp.controller.ts +117 -117
  262. package/src/module/notification/entity/notification.entity.ts +26 -26
  263. package/src/module/notification/entity/otp.entity.ts +28 -28
  264. package/src/module/notification/firebase-admin.config.ts +22 -22
  265. package/src/module/notification/notification.module.ts +69 -69
  266. package/src/module/notification/repository/otp.repository.ts +27 -27
  267. package/src/module/notification/service/email.service.ts +127 -127
  268. package/src/module/notification/service/notification.service.ts +138 -138
  269. package/src/module/notification/service/otp.service.ts +125 -125
  270. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  271. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  272. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  273. package/src/module/third-party-module/third-party.module.ts +12 -12
  274. package/src/module/user/controller/login.controller.ts +197 -197
  275. package/src/module/user/controller/user.controller.ts +40 -40
  276. package/src/module/user/dto/create-user.dto.ts +62 -62
  277. package/src/module/user/dto/update-user.dto.ts +4 -4
  278. package/src/module/user/entity/role.entity.ts +33 -33
  279. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  280. package/src/module/user/entity/user-session.entity.ts +61 -61
  281. package/src/module/user/entity/user.entity.ts +71 -71
  282. package/src/module/user/repository/role.repository.ts +96 -96
  283. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  284. package/src/module/user/repository/user.repository.ts +50 -50
  285. package/src/module/user/repository/userSession.repository.ts +33 -33
  286. package/src/module/user/service/login.service.ts +280 -280
  287. package/src/module/user/service/role.service.ts +189 -189
  288. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  289. package/src/module/user/service/user-session.service.ts +168 -168
  290. package/src/module/user/service/user.service.ts +353 -353
  291. package/src/module/user/user.module.ts +65 -65
  292. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  293. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  294. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  295. package/src/module/workflow/controller/action.controller.ts +95 -95
  296. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  297. package/src/module/workflow/controller/comm-template.controller.ts +41 -41
  298. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  299. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  300. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  301. package/src/module/workflow/controller/stage.controller.ts +50 -50
  302. package/src/module/workflow/controller/task.controller.ts +77 -77
  303. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  304. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  305. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  306. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  307. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  308. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  309. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  310. package/src/module/workflow/entity/action.entity.ts +50 -50
  311. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  312. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  313. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  314. package/src/module/workflow/entity/form.entity.ts +25 -25
  315. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  316. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  317. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  318. package/src/module/workflow/entity/stage.entity.ts +20 -20
  319. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  320. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  321. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  322. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  323. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  324. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  325. package/src/module/workflow/repository/action-data.repository.ts +219 -219
  326. package/src/module/workflow/repository/action.repository.ts +277 -277
  327. package/src/module/workflow/repository/activity-log.repository.ts +121 -121
  328. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  329. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  330. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  331. package/src/module/workflow/repository/stage-movement.repository.ts +227 -227
  332. package/src/module/workflow/repository/stage.repository.ts +172 -172
  333. package/src/module/workflow/repository/task.repository.ts +117 -117
  334. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  335. package/src/module/workflow/service/action-category.service.ts +33 -33
  336. package/src/module/workflow/service/action-data.service.ts +62 -62
  337. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  338. package/src/module/workflow/service/action-template-mapping.service.ts +55 -55
  339. package/src/module/workflow/service/action.service.ts +263 -263
  340. package/src/module/workflow/service/activity-log.service.ts +107 -107
  341. package/src/module/workflow/service/comm-template.service.ts +176 -176
  342. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  343. package/src/module/workflow/service/form-master.service.ts +35 -35
  344. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  345. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  346. package/src/module/workflow/service/stage-group.service.ts +330 -330
  347. package/src/module/workflow/service/stage.service.ts +199 -199
  348. package/src/module/workflow/service/task.service.ts +531 -531
  349. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  350. package/src/module/workflow/service/workflow-meta.service.ts +581 -581
  351. package/src/module/workflow/service/workflow.service.ts +205 -205
  352. package/src/module/workflow/workflow.module.ts +174 -174
  353. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  354. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  355. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  356. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  357. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  358. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  359. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  360. package/src/module/workflow-automation/service/workflow-automation.service.ts +345 -345
  361. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  362. package/src/resources/dev.properties.yaml +30 -30
  363. package/src/resources/local.properties.yaml +27 -27
  364. package/src/resources/properties.module.ts +12 -12
  365. package/src/resources/properties.yaml.ts +11 -11
  366. package/src/resources/uat.properties.yaml +15 -15
  367. package/src/utils/dto/excel-data.dto.ts +14 -14
  368. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  369. package/src/utils/service/base64util.service.ts +18 -18
  370. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  371. package/src/utils/service/codeGenerator.service.ts +22 -22
  372. package/src/utils/service/dateUtil.service.ts +17 -17
  373. package/src/utils/service/encryptUtil.service.ts +97 -97
  374. package/src/utils/service/excel-helper.service.ts +72 -72
  375. package/src/utils/service/excelUtil.service.ts +15 -15
  376. package/src/utils/service/file-util.service.ts +11 -11
  377. package/src/utils/service/json-util.service.ts +23 -23
  378. package/src/utils/service/loggingUtil.service.ts +34 -34
  379. package/src/utils/service/reflection-helper.service.ts +62 -62
  380. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  381. package/src/utils/utils.module.ts +25 -25
  382. package/tsconfig.build.json +4 -4
  383. package/tsconfig.json +24 -24
@@ -1,330 +1,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}/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}/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
+ }