rez_core 4.0.123 → 4.0.124

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 (406) 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/config/config.module.js +2 -2
  17. package/dist/config/config.module.js.map +1 -1
  18. package/dist/config/database.config.d.ts +1 -1
  19. package/dist/config/database.config.js +15 -12
  20. package/dist/config/database.config.js.map +1 -1
  21. package/dist/module/auth/guards/role.guard.js +3 -3
  22. package/dist/module/auth/services/auth.service.js +2 -2
  23. package/dist/module/enterprise/entity/organization.entity.js +1 -1
  24. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  25. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  26. package/dist/module/filter/service/filter.service.js +22 -22
  27. package/dist/module/integration/entity/integration-config.entity.js +3 -3
  28. package/dist/module/integration/entity/integration-config.entity.js.map +1 -1
  29. package/dist/module/integration/entity/user-integration.entity.js +3 -3
  30. package/dist/module/integration/entity/user-integration.entity.js.map +1 -1
  31. package/dist/module/integration/examples/usage.example.js +9 -9
  32. package/dist/module/integration/service/integration.service.js +1 -1
  33. package/dist/module/integration/service/wrapper.service.js +25 -25
  34. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  35. package/dist/module/mapper/entity/field-mapper.entity.js +1 -1
  36. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  37. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  38. package/dist/module/mapper/service/mapper.service.js +2 -2
  39. package/dist/module/meta/entity/entity-master.entity.js +1 -1
  40. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  41. package/dist/module/meta/service/attribute-master.service.js +1 -1
  42. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  43. package/dist/module/meta/service/entity-dynamic.service.js +9 -9
  44. package/dist/module/meta/service/entity-list.service.js +3 -3
  45. package/dist/module/meta/service/entity-master.service.js +3 -3
  46. package/dist/module/meta/service/entity-relation.service.js +11 -11
  47. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  48. package/dist/module/meta/service/resolver.service.js +3 -3
  49. package/dist/module/module/repository/menu.repository.js +12 -12
  50. package/dist/module/notification/service/notification.service.js +9 -9
  51. package/dist/module/user/controller/login.controller.js +18 -18
  52. package/dist/module/user/service/role.service.js +4 -4
  53. package/dist/module/user/service/user-session.service.js +2 -2
  54. package/dist/module/workflow/entity/comm-template.entity.js +1 -1
  55. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  56. package/dist/module/workflow/repository/action.repository.js +20 -20
  57. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  58. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  59. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  60. package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
  61. package/dist/module/workflow/repository/stage.repository.js +8 -8
  62. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  63. package/dist/module/workflow/service/action.service.js +7 -7
  64. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  65. package/dist/module/workflow/service/stage-group.service.js +2 -2
  66. package/dist/module/workflow/service/stage.service.js +2 -2
  67. package/dist/module/workflow/service/task.service.js +28 -28
  68. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  69. package/dist/module/workflow/service/workflow-meta.service.js +38 -50
  70. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  71. package/dist/module/workflow/service/workflow.service.js +2 -2
  72. package/dist/tsconfig.build.tsbuildinfo +1 -1
  73. package/dist/utils/service/reflection-helper.service.js +2 -2
  74. package/docs/modules/event-driven-integration-design.md +91 -91
  75. package/docs/modules/integration.md +250 -250
  76. package/eslint.config.mjs +34 -34
  77. package/nest-cli.json +14 -14
  78. package/package.json +120 -119
  79. package/server.log +850 -0
  80. package/src/app.controller.ts +12 -12
  81. package/src/app.module.ts +52 -52
  82. package/src/app.service.ts +8 -8
  83. package/src/config/config.module.ts +17 -18
  84. package/src/config/database.config.ts +47 -23
  85. package/src/constant/global.constant.ts +67 -67
  86. package/src/core.module.ts +81 -81
  87. package/src/decorators/roles.decorator.ts +7 -7
  88. package/src/dtos/response.dto.ts +6 -6
  89. package/src/dtos/response.ts +5 -5
  90. package/src/index.ts +1 -1
  91. package/src/module/auth/auth.module.ts +49 -49
  92. package/src/module/auth/controller/auth.controller.ts +28 -28
  93. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  94. package/src/module/auth/guards/jwt.guard.ts +22 -22
  95. package/src/module/auth/guards/role.guard.ts +68 -68
  96. package/src/module/auth/services/auth.service.ts +50 -50
  97. package/src/module/auth/services/jwt.service.ts +11 -11
  98. package/src/module/auth/strategies/google.strategy.ts +54 -54
  99. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  100. package/src/module/auth/strategies/local.strategy.ts +13 -13
  101. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  102. package/src/module/dashboard/dashboard.module.ts +21 -21
  103. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  104. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  105. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  106. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  107. package/src/module/dev/dev.module.ts +12 -12
  108. package/src/module/dev/service/dev.service.ts +7 -7
  109. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  110. package/src/module/enterprise/enterprise.module.ts +30 -30
  111. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  112. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  113. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  114. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  115. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  116. package/src/module/enterprise/repository/school.repository.ts +278 -278
  117. package/src/module/enterprise/service/brand.service.ts +5 -5
  118. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  119. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  120. package/src/module/enterprise/service/organization.service.ts +145 -145
  121. package/src/module/filter/controller/filter.controller.ts +84 -84
  122. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  123. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  124. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  125. package/src/module/filter/filter.module.ts +31 -31
  126. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  127. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  128. package/src/module/filter/service/filter.service.ts +1005 -1005
  129. package/src/module/filter/service/saved-filter.service.ts +170 -170
  130. package/src/module/ics/controller/ics.controller.ts +21 -21
  131. package/src/module/ics/dto/ics.dto.ts +55 -55
  132. package/src/module/ics/ics.module.ts +13 -13
  133. package/src/module/ics/service/ics.service.ts +57 -57
  134. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  135. package/src/module/integration/controller/integration.controller.ts +662 -662
  136. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  137. package/src/module/integration/dto/create-config.dto.ts +526 -526
  138. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  139. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  140. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  141. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  142. package/src/module/integration/examples/usage.example.ts +338 -338
  143. package/src/module/integration/factories/base.factory.ts +7 -7
  144. package/src/module/integration/factories/email.factory.ts +49 -49
  145. package/src/module/integration/factories/integration.factory.ts +121 -121
  146. package/src/module/integration/factories/sms.factory.ts +51 -51
  147. package/src/module/integration/factories/telephone.factory.ts +41 -41
  148. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  149. package/src/module/integration/integration.module.ts +110 -110
  150. package/src/module/integration/service/calendar-event.service.ts +118 -118
  151. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  152. package/src/module/integration/service/integration-queue.service.ts +229 -229
  153. package/src/module/integration/service/integration.service.ts +2633 -2633
  154. package/src/module/integration/service/oauth.service.ts +224 -224
  155. package/src/module/integration/service/wrapper.service.ts +493 -493
  156. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  157. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  158. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  159. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  160. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  161. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  162. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  163. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  164. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  165. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  166. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  167. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  168. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  169. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  170. package/src/module/layout/controller/layout.controller.ts +47 -47
  171. package/src/module/layout/entity/header-items.entity.ts +28 -28
  172. package/src/module/layout/entity/header-section.entity.ts +19 -19
  173. package/src/module/layout/layout.module.ts +21 -21
  174. package/src/module/layout/repository/header-items.repository.ts +18 -18
  175. package/src/module/layout/repository/header-section.repository.ts +22 -22
  176. package/src/module/layout/service/header-section.service.ts +25 -25
  177. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  178. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  179. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  180. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  181. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  182. package/src/module/lead/controller/lead.controller.ts +30 -30
  183. package/src/module/lead/lead.module.ts +14 -14
  184. package/src/module/lead/repository/lead.repository.ts +41 -41
  185. package/src/module/lead/service/lead.service.ts +54 -54
  186. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  187. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  188. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  189. package/src/module/listmaster/listmaster.module.ts +46 -46
  190. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  191. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  192. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  193. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  194. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  195. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  196. package/src/module/listmaster/service/list-master.service.ts +535 -535
  197. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  198. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  199. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  200. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  201. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  202. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  203. package/src/module/mapper/mapper.module.ts +34 -34
  204. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  205. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  206. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  207. package/src/module/mapper/service/field-mapper.service.ts +266 -266
  208. package/src/module/mapper/service/mapper.service.ts +79 -79
  209. package/src/module/master/controller/master.controller.ts +74 -74
  210. package/src/module/master/service/master.service.ts +483 -483
  211. package/src/module/meta/controller/app-master.controller.ts +38 -38
  212. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  213. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  214. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  215. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  216. package/src/module/meta/controller/entity.controller.ts +392 -392
  217. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  218. package/src/module/meta/controller/media.controller.ts +107 -107
  219. package/src/module/meta/controller/meta.controller.ts +96 -96
  220. package/src/module/meta/controller/view-master.controller.ts +86 -86
  221. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  222. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  223. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  224. package/src/module/meta/entity/app-master.entity.ts +34 -34
  225. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  226. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  227. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  228. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  229. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  230. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  231. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  232. package/src/module/meta/entity/media-data.entity.ts +32 -32
  233. package/src/module/meta/entity/preference.entity.ts +62 -62
  234. package/src/module/meta/entity/view-master.entity.ts +41 -41
  235. package/src/module/meta/entity.module.ts +158 -158
  236. package/src/module/meta/repository/app-master.repository.ts +20 -20
  237. package/src/module/meta/repository/attribute-master.repository.ts +118 -118
  238. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  239. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  240. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  241. package/src/module/meta/repository/media-data.repository.ts +50 -50
  242. package/src/module/meta/repository/preference.repository.ts +20 -20
  243. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  244. package/src/module/meta/repository/view-master.repository.ts +42 -42
  245. package/src/module/meta/service/app-master.service.ts +37 -37
  246. package/src/module/meta/service/attribute-master.service.ts +126 -126
  247. package/src/module/meta/service/common.service.ts +9 -9
  248. package/src/module/meta/service/entity-dynamic.service.ts +819 -819
  249. package/src/module/meta/service/entity-list.service.ts +205 -205
  250. package/src/module/meta/service/entity-master.service.ts +169 -169
  251. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  252. package/src/module/meta/service/entity-relation.service.ts +69 -69
  253. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  254. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  255. package/src/module/meta/service/entity-table.service.ts +150 -150
  256. package/src/module/meta/service/entity-validation.service.ts +187 -187
  257. package/src/module/meta/service/entity.service.ts +67 -67
  258. package/src/module/meta/service/field-group.service.ts +103 -103
  259. package/src/module/meta/service/media-data.service.ts +507 -507
  260. package/src/module/meta/service/populate-meta.service.ts +193 -193
  261. package/src/module/meta/service/preference.service.ts +16 -16
  262. package/src/module/meta/service/resolver.service.ts +267 -267
  263. package/src/module/meta/service/section-master.service.ts +104 -104
  264. package/src/module/meta/service/update-form-json.service.ts +22 -22
  265. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  266. package/src/module/meta/service/view-master.service.ts +127 -127
  267. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  268. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  269. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  270. package/src/module/module/controller/menu.controller.ts +15 -15
  271. package/src/module/module/controller/module-access.controller.ts +134 -134
  272. package/src/module/module/entity/menu.entity.ts +43 -43
  273. package/src/module/module/entity/module-access.entity.ts +25 -25
  274. package/src/module/module/entity/module-action.entity.ts +17 -17
  275. package/src/module/module/entity/module.entity.ts +52 -52
  276. package/src/module/module/module.module.ts +42 -42
  277. package/src/module/module/repository/menu.repository.ts +184 -184
  278. package/src/module/module/repository/module-access.repository.ts +344 -344
  279. package/src/module/module/service/menu.service.ts +82 -82
  280. package/src/module/module/service/module-access.service.ts +209 -209
  281. package/src/module/notification/controller/notification.controller.ts +58 -58
  282. package/src/module/notification/controller/otp.controller.ts +117 -117
  283. package/src/module/notification/entity/notification.entity.ts +26 -26
  284. package/src/module/notification/entity/otp.entity.ts +28 -28
  285. package/src/module/notification/firebase-admin.config.ts +22 -22
  286. package/src/module/notification/notification.module.ts +69 -69
  287. package/src/module/notification/repository/otp.repository.ts +27 -27
  288. package/src/module/notification/service/email.service.ts +127 -127
  289. package/src/module/notification/service/notification.service.ts +163 -163
  290. package/src/module/notification/service/otp.service.ts +132 -132
  291. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  292. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  293. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  294. package/src/module/third-party-module/third-party.module.ts +12 -12
  295. package/src/module/user/controller/login.controller.ts +197 -197
  296. package/src/module/user/controller/user.controller.ts +40 -40
  297. package/src/module/user/dto/create-user.dto.ts +62 -62
  298. package/src/module/user/dto/update-user.dto.ts +4 -4
  299. package/src/module/user/entity/role.entity.ts +33 -33
  300. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  301. package/src/module/user/entity/user-session.entity.ts +73 -73
  302. package/src/module/user/entity/user.entity.ts +59 -59
  303. package/src/module/user/repository/role.repository.ts +96 -96
  304. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  305. package/src/module/user/repository/user.repository.ts +50 -50
  306. package/src/module/user/repository/userSession.repository.ts +33 -33
  307. package/src/module/user/service/login.service.ts +304 -304
  308. package/src/module/user/service/role.service.ts +189 -189
  309. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  310. package/src/module/user/service/user-session.service.ts +168 -168
  311. package/src/module/user/service/user.service.ts +365 -365
  312. package/src/module/user/user.module.ts +65 -65
  313. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  314. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  315. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  316. package/src/module/workflow/controller/action.controller.ts +111 -111
  317. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  318. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  319. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  320. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  321. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  322. package/src/module/workflow/controller/stage.controller.ts +50 -50
  323. package/src/module/workflow/controller/task.controller.ts +77 -77
  324. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  325. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  326. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  327. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  328. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  329. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  330. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  331. package/src/module/workflow/entity/action.entity.ts +50 -50
  332. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  333. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  334. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  335. package/src/module/workflow/entity/form.entity.ts +25 -25
  336. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  337. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  338. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  339. package/src/module/workflow/entity/stage.entity.ts +20 -20
  340. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  341. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  342. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  343. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  344. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  345. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  346. package/src/module/workflow/repository/action-data.repository.ts +333 -333
  347. package/src/module/workflow/repository/action.repository.ts +323 -323
  348. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  349. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  350. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  351. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  352. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  353. package/src/module/workflow/repository/stage.repository.ts +172 -172
  354. package/src/module/workflow/repository/task.repository.ts +127 -127
  355. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  356. package/src/module/workflow/service/action-category.service.ts +33 -33
  357. package/src/module/workflow/service/action-data.service.ts +62 -62
  358. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  359. package/src/module/workflow/service/action-template-mapping.service.ts +106 -106
  360. package/src/module/workflow/service/action.service.ts +279 -279
  361. package/src/module/workflow/service/activity-log.service.ts +107 -107
  362. package/src/module/workflow/service/comm-template.service.ts +180 -180
  363. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  364. package/src/module/workflow/service/form-master.service.ts +35 -35
  365. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  366. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  367. package/src/module/workflow/service/stage-group.service.ts +319 -319
  368. package/src/module/workflow/service/stage.service.ts +199 -199
  369. package/src/module/workflow/service/task.service.ts +560 -560
  370. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  371. package/src/module/workflow/service/workflow-meta.service.ts +640 -654
  372. package/src/module/workflow/service/workflow.service.ts +205 -205
  373. package/src/module/workflow/workflow.module.ts +176 -176
  374. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  375. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  376. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  377. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  378. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  379. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  380. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  381. package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -347
  382. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  383. package/src/resources/dev.properties.yaml +31 -30
  384. package/src/resources/local.properties.yaml +27 -27
  385. package/src/resources/properties.module.ts +12 -12
  386. package/src/resources/properties.yaml.ts +11 -11
  387. package/src/resources/uat.properties.yaml +31 -31
  388. package/src/table.config.ts +126 -126
  389. package/src/utils/dto/excel-data.dto.ts +14 -14
  390. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  391. package/src/utils/service/base64util.service.ts +18 -18
  392. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  393. package/src/utils/service/codeGenerator.service.ts +22 -22
  394. package/src/utils/service/dateUtil.service.ts +17 -17
  395. package/src/utils/service/encryptUtil.service.ts +97 -97
  396. package/src/utils/service/excel-helper.service.ts +72 -72
  397. package/src/utils/service/excelUtil.service.ts +15 -15
  398. package/src/utils/service/file-util.service.ts +11 -11
  399. package/src/utils/service/json-util.service.ts +23 -23
  400. package/src/utils/service/loggingUtil.service.ts +34 -34
  401. package/src/utils/service/reflection-helper.service.ts +62 -62
  402. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  403. package/src/utils/utils.module.ts +25 -25
  404. package/tsconfig.build.json +4 -4
  405. package/tsconfig.json +24 -24
  406. package/.vscode/extensions.json +0 -5
@@ -1,304 +1,304 @@
1
- import { BadRequestException, Inject, Injectable } from '@nestjs/common';
2
- import { ConfigService } from '@nestjs/config';
3
- import { InjectRepository } from '@nestjs/typeorm';
4
- import {
5
- INVITATION_STATUS_ACCEPTED,
6
- STATUS_ACTIVE,
7
- } from 'src/constant/global.constant';
8
- import { OrganizationRepository } from 'src/module/enterprise/repository/organization.repository';
9
- import { ListMasterService } from 'src/module/listmaster/service/list-master.service';
10
- import { DataSource, Not, Repository, IsNull } from 'typeorm';
11
- import { EncryptUtilService } from '../../../utils/service/encryptUtil.service';
12
- import { Role } from '../entity/role.entity';
13
- import { UserRoleMapping } from '../entity/user-role-mapping.entity';
14
- import { UserData } from '../entity/user.entity';
15
- import { UserSessionService } from './user-session.service';
16
- import { UserService } from './user.service';
17
- import { JwtAuthService } from 'src/module/auth/services/jwt.service';
18
-
19
- @Injectable()
20
- export class LoginService {
21
- constructor(
22
- @Inject('UserService') private readonly userService: UserService,
23
- private userSessionService: UserSessionService,
24
- private configService: ConfigService,
25
- @InjectRepository(UserRoleMapping)
26
- private readonly userRoleMappingRepository: Repository<UserRoleMapping>,
27
- @InjectRepository(Role)
28
- private readonly roleRepo: Repository<Role>,
29
- private readonly dataSource: DataSource,
30
- private readonly organizationRepository: OrganizationRepository,
31
- @Inject('ListMasterService')
32
- private readonly listMasterService: ListMasterService,
33
- private readonly jwtAuthService: JwtAuthService,
34
- @InjectRepository(UserData)
35
- private readonly userRepository: Repository<UserData>,
36
- ) {}
37
-
38
- masterKey: string = this.configService.get('MASTER_KEY') || '';
39
- masterIv: string = this.configService.get('MASTER_IV') || '';
40
-
41
- async login(data: { email_id: string; password?: string; is_otp?: boolean }) {
42
- const { email_id, password, is_otp = false } = data;
43
-
44
- let organization;
45
-
46
- // 🔹 Step 2: Find the user by email + organization check
47
- const user = await this.userService.findByEmailId(email_id);
48
-
49
- if (!user || (organization && user.organization_id !== organization.id)) {
50
- return {
51
- success: false,
52
- message: 'User not found in organization.',
53
- };
54
- }
55
-
56
- // 🔹 Step 3: Verify org status
57
- const userOrgData = await this.organizationRepository.findOrganizationById(
58
- user.organization_id,
59
- );
60
-
61
- const resolveStatus = await this.listMasterService.getResolvedListCode(
62
- STATUS_ACTIVE,
63
- user?.organization_id || 0,
64
- );
65
-
66
- if (
67
- user.status != resolveStatus.id ||
68
- userOrgData?.status != resolveStatus.id
69
- ) {
70
- return {
71
- success: false,
72
- message:
73
- 'Your account or organization is inactive. Please contact admin.',
74
- };
75
- }
76
-
77
- // 🔹 Step 4: Verify password if not OTP
78
- if (!is_otp) {
79
- const encryptedPassword = EncryptUtilService.encryptGCM(
80
- password,
81
- this.masterKey,
82
- this.masterIv,
83
- );
84
-
85
- if (encryptedPassword !== user.password) {
86
- return {
87
- success: false,
88
- message: 'Oops! Your password is incorrect.',
89
- type: 'password',
90
- };
91
- }
92
- }
93
-
94
- // 🔹 Step 5: App access check
95
- let appcode = user.last_app_access;
96
-
97
- if (!user.last_app_access || user.last_app_access == '') {
98
- await this.userService.setDefaultLastAccess(user.id, appcode);
99
- }
100
-
101
- const whereCondition: any = { user_id: user.id };
102
-
103
- if (appcode && appcode !== '') {
104
- whereCondition.appcode = appcode;
105
- }
106
-
107
- const roleMappings = await this.userRoleMappingRepository.find({
108
- where: whereCondition,
109
- });
110
-
111
- if (!roleMappings.length) {
112
- return {
113
- success: false,
114
- message: 'You do not have access to this application.',
115
- };
116
- }
117
-
118
- // 🔹 Step 6: Resolve default access
119
- const defaultAccess = await this.getDefaultAccess(user, roleMappings);
120
-
121
- await this.userService.setLastLevelTypeAndId(
122
- user.id,
123
- defaultAccess.level_type,
124
- defaultAccess.level_id,
125
- defaultAccess.appcode,
126
- );
127
-
128
- const token = await this.userSessionService.createSession(
129
- user,
130
- defaultAccess.appcode,
131
- defaultAccess,
132
- );
133
-
134
- // 🔹 Step 7: Update first login + invitation status
135
- const resolvedInvitationStatus =
136
- await this.listMasterService.getResolvedListCode(
137
- INVITATION_STATUS_ACCEPTED,
138
- user?.organization_id || 0,
139
- );
140
-
141
- if (user.is_firstlogin === 1) {
142
- user.invitation_status = resolvedInvitationStatus.id;
143
- user.is_firstlogin = 0;
144
- const { password, ...userWithoutPassword } = user;
145
- await this.userService.updateEntity(userWithoutPassword, user);
146
- }
147
-
148
- // 🔹 Step 8: Return response
149
-
150
- const org = await this.organizationRepository.findOrganizationById(
151
- user.organization_id,
152
- );
153
- let slug: string;
154
- if (org) {
155
- slug = org.slug;
156
- } else {
157
- return {
158
- success: false,
159
- message: 'Organization not found for the user.',
160
- };
161
- }
162
-
163
- return {
164
- success: true,
165
- accessToken: token,
166
- appcode: defaultAccess.appcode,
167
- level_type: defaultAccess.level_type,
168
- level_id: defaultAccess.level_id,
169
- slug: slug,
170
- };
171
- }
172
-
173
- async formLogin(body: any): Promise<any> {
174
- if (body) {
175
- const { entity_type, entity_id } = body;
176
-
177
- const entityData = await this.dataSource.query(
178
- `SELECT level_id, level_type, organization_id FROM ether_core.crm_lead where id = ${entity_id}`,
179
- );
180
-
181
- if (entityData.length > 0) {
182
- const level_id = entityData[0].level_id;
183
- const level_type = entityData[0].level_type;
184
- const organization_id = entityData[0].organization_id;
185
-
186
- const token = await this.jwtAuthService.generateJwt({
187
- level_id: level_id,
188
- level_type: level_type,
189
- organization_id: organization_id,
190
- });
191
-
192
- return {
193
- success: true,
194
- accessToken: token,
195
- };
196
- }
197
- }
198
- }
199
-
200
- private async getDefaultAccess(
201
- user: any,
202
- roleMappings: any[],
203
- ): Promise<{ level_type: string; level_id: string; appcode: string }> {
204
- const orgAccess = roleMappings.find((r) => r.level_type === 'ORG');
205
- const brnAccesses = roleMappings.filter((r) => r.level_type === 'BRN');
206
- const schAccesses = roleMappings.filter((r) => r.level_type === 'SCH');
207
-
208
- let validURM;
209
-
210
- validURM = roleMappings.some(
211
- (r) => r.level_type == 'ORG' && r.level_id == user.organization_id,
212
- );
213
-
214
- if (!validURM) {
215
- validURM = roleMappings.some(
216
- (r) =>
217
- r.level_type === user.last_level_type &&
218
- r.level_id === user.last_level_id,
219
- );
220
- }
221
-
222
- if (user.last_level_type && user.last_level_id && validURM) {
223
- return {
224
- level_type: user.last_level_type,
225
- level_id: user.last_level_id,
226
- appcode: user.last_app_access,
227
- };
228
- }
229
-
230
- if (orgAccess) {
231
- return {
232
- level_type: 'ORG',
233
- level_id: orgAccess.level_id,
234
- appcode: orgAccess.appcode,
235
- };
236
- }
237
-
238
- if (brnAccesses.length) {
239
- const brandId = brnAccesses[0].level_id;
240
-
241
- const rows = await this.dataSource.query(
242
- `SELECT id FROM sso_school WHERE brand_id = ? ORDER BY id ASC LIMIT 1`,
243
- [brandId],
244
- );
245
-
246
- if (rows.length) {
247
- return {
248
- level_type: 'SCH',
249
- level_id: rows[0].id,
250
- appcode: brnAccesses[0].appcode,
251
- };
252
- } else {
253
- throw new BadRequestException(
254
- 'User has BRN access but no schools found under that brand.',
255
- );
256
- }
257
- }
258
-
259
- if (schAccesses.length) {
260
- return {
261
- level_type: 'SCH',
262
- level_id: schAccesses[0].level_id,
263
- appcode: schAccesses[0].appcode,
264
- };
265
- }
266
-
267
- throw new BadRequestException(
268
- 'User does not have ORG, BRN, or SCH access for this app.',
269
- );
270
- }
271
-
272
- async loginWithGoogle(data: {
273
- email: string;
274
- subdomain?: string;
275
- fcm_token?: string;
276
- ip?: string;
277
- browser?: string;
278
- os?: string;
279
- }) {
280
- const { email } = data;
281
- const user = await this.userService.findByEmailId(email);
282
-
283
- if (!user) {
284
- return new BadRequestException('User not found');
285
- }
286
-
287
- // Create session (Same as JWT login flow)
288
- return await this.login({
289
- email_id: email,
290
- is_otp: true,
291
- });
292
- }
293
-
294
- async logout(sessionKey: string) {
295
- const userSession =
296
- await this.userSessionService.findBySessionKey(sessionKey);
297
- if (userSession) {
298
- userSession.is_session_loggedout = 1;
299
- userSession.logout_time = new Date();
300
- await this.userSessionService.updateSession(userSession);
301
- return { message: 'Logged out successfully' };
302
- }
303
- }
304
- }
1
+ import { BadRequestException, Inject, Injectable } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import { InjectRepository } from '@nestjs/typeorm';
4
+ import {
5
+ INVITATION_STATUS_ACCEPTED,
6
+ STATUS_ACTIVE,
7
+ } from 'src/constant/global.constant';
8
+ import { OrganizationRepository } from 'src/module/enterprise/repository/organization.repository';
9
+ import { ListMasterService } from 'src/module/listmaster/service/list-master.service';
10
+ import { DataSource, Not, Repository, IsNull } from 'typeorm';
11
+ import { EncryptUtilService } from '../../../utils/service/encryptUtil.service';
12
+ import { Role } from '../entity/role.entity';
13
+ import { UserRoleMapping } from '../entity/user-role-mapping.entity';
14
+ import { UserData } from '../entity/user.entity';
15
+ import { UserSessionService } from './user-session.service';
16
+ import { UserService } from './user.service';
17
+ import { JwtAuthService } from 'src/module/auth/services/jwt.service';
18
+
19
+ @Injectable()
20
+ export class LoginService {
21
+ constructor(
22
+ @Inject('UserService') private readonly userService: UserService,
23
+ private userSessionService: UserSessionService,
24
+ private configService: ConfigService,
25
+ @InjectRepository(UserRoleMapping)
26
+ private readonly userRoleMappingRepository: Repository<UserRoleMapping>,
27
+ @InjectRepository(Role)
28
+ private readonly roleRepo: Repository<Role>,
29
+ private readonly dataSource: DataSource,
30
+ private readonly organizationRepository: OrganizationRepository,
31
+ @Inject('ListMasterService')
32
+ private readonly listMasterService: ListMasterService,
33
+ private readonly jwtAuthService: JwtAuthService,
34
+ @InjectRepository(UserData)
35
+ private readonly userRepository: Repository<UserData>,
36
+ ) {}
37
+
38
+ masterKey: string = this.configService.get('MASTER_KEY') || '';
39
+ masterIv: string = this.configService.get('MASTER_IV') || '';
40
+
41
+ async login(data: { email_id: string; password?: string; is_otp?: boolean }) {
42
+ const { email_id, password, is_otp = false } = data;
43
+
44
+ let organization;
45
+
46
+ // 🔹 Step 2: Find the user by email + organization check
47
+ const user = await this.userService.findByEmailId(email_id);
48
+
49
+ if (!user || (organization && user.organization_id !== organization.id)) {
50
+ return {
51
+ success: false,
52
+ message: 'User not found in organization.',
53
+ };
54
+ }
55
+
56
+ // 🔹 Step 3: Verify org status
57
+ const userOrgData = await this.organizationRepository.findOrganizationById(
58
+ user.organization_id,
59
+ );
60
+
61
+ const resolveStatus = await this.listMasterService.getResolvedListCode(
62
+ STATUS_ACTIVE,
63
+ user?.organization_id || 0,
64
+ );
65
+
66
+ if (
67
+ user.status != resolveStatus.id ||
68
+ userOrgData?.status != resolveStatus.id
69
+ ) {
70
+ return {
71
+ success: false,
72
+ message:
73
+ 'Your account or organization is inactive. Please contact admin.',
74
+ };
75
+ }
76
+
77
+ // 🔹 Step 4: Verify password if not OTP
78
+ if (!is_otp) {
79
+ const encryptedPassword = EncryptUtilService.encryptGCM(
80
+ password,
81
+ this.masterKey,
82
+ this.masterIv,
83
+ );
84
+
85
+ if (encryptedPassword !== user.password) {
86
+ return {
87
+ success: false,
88
+ message: 'Oops! Your password is incorrect.',
89
+ type: 'password',
90
+ };
91
+ }
92
+ }
93
+
94
+ // 🔹 Step 5: App access check
95
+ let appcode = user.last_app_access;
96
+
97
+ if (!user.last_app_access || user.last_app_access == '') {
98
+ await this.userService.setDefaultLastAccess(user.id, appcode);
99
+ }
100
+
101
+ const whereCondition: any = { user_id: user.id };
102
+
103
+ if (appcode && appcode !== '') {
104
+ whereCondition.appcode = appcode;
105
+ }
106
+
107
+ const roleMappings = await this.userRoleMappingRepository.find({
108
+ where: whereCondition,
109
+ });
110
+
111
+ if (!roleMappings.length) {
112
+ return {
113
+ success: false,
114
+ message: 'You do not have access to this application.',
115
+ };
116
+ }
117
+
118
+ // 🔹 Step 6: Resolve default access
119
+ const defaultAccess = await this.getDefaultAccess(user, roleMappings);
120
+
121
+ await this.userService.setLastLevelTypeAndId(
122
+ user.id,
123
+ defaultAccess.level_type,
124
+ defaultAccess.level_id,
125
+ defaultAccess.appcode,
126
+ );
127
+
128
+ const token = await this.userSessionService.createSession(
129
+ user,
130
+ defaultAccess.appcode,
131
+ defaultAccess,
132
+ );
133
+
134
+ // 🔹 Step 7: Update first login + invitation status
135
+ const resolvedInvitationStatus =
136
+ await this.listMasterService.getResolvedListCode(
137
+ INVITATION_STATUS_ACCEPTED,
138
+ user?.organization_id || 0,
139
+ );
140
+
141
+ if (user.is_firstlogin === 1) {
142
+ user.invitation_status = resolvedInvitationStatus.id;
143
+ user.is_firstlogin = 0;
144
+ const { password, ...userWithoutPassword } = user;
145
+ await this.userService.updateEntity(userWithoutPassword, user);
146
+ }
147
+
148
+ // 🔹 Step 8: Return response
149
+
150
+ const org = await this.organizationRepository.findOrganizationById(
151
+ user.organization_id,
152
+ );
153
+ let slug: string;
154
+ if (org) {
155
+ slug = org.slug;
156
+ } else {
157
+ return {
158
+ success: false,
159
+ message: 'Organization not found for the user.',
160
+ };
161
+ }
162
+
163
+ return {
164
+ success: true,
165
+ accessToken: token,
166
+ appcode: defaultAccess.appcode,
167
+ level_type: defaultAccess.level_type,
168
+ level_id: defaultAccess.level_id,
169
+ slug: slug,
170
+ };
171
+ }
172
+
173
+ async formLogin(body: any): Promise<any> {
174
+ if (body) {
175
+ const { entity_type, entity_id } = body;
176
+
177
+ const entityData = await this.dataSource.query(
178
+ `SELECT level_id, level_type, organization_id FROM ether_core.crm_lead where id = ${entity_id}`,
179
+ );
180
+
181
+ if (entityData.length > 0) {
182
+ const level_id = entityData[0].level_id;
183
+ const level_type = entityData[0].level_type;
184
+ const organization_id = entityData[0].organization_id;
185
+
186
+ const token = await this.jwtAuthService.generateJwt({
187
+ level_id: level_id,
188
+ level_type: level_type,
189
+ organization_id: organization_id,
190
+ });
191
+
192
+ return {
193
+ success: true,
194
+ accessToken: token,
195
+ };
196
+ }
197
+ }
198
+ }
199
+
200
+ private async getDefaultAccess(
201
+ user: any,
202
+ roleMappings: any[],
203
+ ): Promise<{ level_type: string; level_id: string; appcode: string }> {
204
+ const orgAccess = roleMappings.find((r) => r.level_type === 'ORG');
205
+ const brnAccesses = roleMappings.filter((r) => r.level_type === 'BRN');
206
+ const schAccesses = roleMappings.filter((r) => r.level_type === 'SCH');
207
+
208
+ let validURM;
209
+
210
+ validURM = roleMappings.some(
211
+ (r) => r.level_type == 'ORG' && r.level_id == user.organization_id,
212
+ );
213
+
214
+ if (!validURM) {
215
+ validURM = roleMappings.some(
216
+ (r) =>
217
+ r.level_type === user.last_level_type &&
218
+ r.level_id === user.last_level_id,
219
+ );
220
+ }
221
+
222
+ if (user.last_level_type && user.last_level_id && validURM) {
223
+ return {
224
+ level_type: user.last_level_type,
225
+ level_id: user.last_level_id,
226
+ appcode: user.last_app_access,
227
+ };
228
+ }
229
+
230
+ if (orgAccess) {
231
+ return {
232
+ level_type: 'ORG',
233
+ level_id: orgAccess.level_id,
234
+ appcode: orgAccess.appcode,
235
+ };
236
+ }
237
+
238
+ if (brnAccesses.length) {
239
+ const brandId = brnAccesses[0].level_id;
240
+
241
+ const rows = await this.dataSource.query(
242
+ `SELECT id FROM sso_school WHERE brand_id = ? ORDER BY id ASC LIMIT 1`,
243
+ [brandId],
244
+ );
245
+
246
+ if (rows.length) {
247
+ return {
248
+ level_type: 'SCH',
249
+ level_id: rows[0].id,
250
+ appcode: brnAccesses[0].appcode,
251
+ };
252
+ } else {
253
+ throw new BadRequestException(
254
+ 'User has BRN access but no schools found under that brand.',
255
+ );
256
+ }
257
+ }
258
+
259
+ if (schAccesses.length) {
260
+ return {
261
+ level_type: 'SCH',
262
+ level_id: schAccesses[0].level_id,
263
+ appcode: schAccesses[0].appcode,
264
+ };
265
+ }
266
+
267
+ throw new BadRequestException(
268
+ 'User does not have ORG, BRN, or SCH access for this app.',
269
+ );
270
+ }
271
+
272
+ async loginWithGoogle(data: {
273
+ email: string;
274
+ subdomain?: string;
275
+ fcm_token?: string;
276
+ ip?: string;
277
+ browser?: string;
278
+ os?: string;
279
+ }) {
280
+ const { email } = data;
281
+ const user = await this.userService.findByEmailId(email);
282
+
283
+ if (!user) {
284
+ return new BadRequestException('User not found');
285
+ }
286
+
287
+ // Create session (Same as JWT login flow)
288
+ return await this.login({
289
+ email_id: email,
290
+ is_otp: true,
291
+ });
292
+ }
293
+
294
+ async logout(sessionKey: string) {
295
+ const userSession =
296
+ await this.userSessionService.findBySessionKey(sessionKey);
297
+ if (userSession) {
298
+ userSession.is_session_loggedout = 1;
299
+ userSession.logout_time = new Date();
300
+ await this.userSessionService.updateSession(userSession);
301
+ return { message: 'Logged out successfully' };
302
+ }
303
+ }
304
+ }