rez_core 3.1.198 → 3.1.199

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 (386) hide show
  1. package/.prettierrc +3 -3
  2. package/.vscode/extensions.json +5 -0
  3. package/README.md +99 -99
  4. package/dist/module/auth/guards/role.guard.js +3 -3
  5. package/dist/module/auth/services/auth.service.js +2 -2
  6. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  7. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  8. package/dist/module/filter/service/filter.service.js +7 -7
  9. package/dist/module/integration/examples/usage.example.js +9 -9
  10. package/dist/module/integration/service/integration.service.js +1 -1
  11. package/dist/module/integration/service/wrapper.service.js +25 -25
  12. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  13. package/dist/module/listmaster/service/list-master.service.js +2 -2
  14. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  15. package/dist/module/mapper/service/mapper.service.js +2 -2
  16. package/dist/module/meta/service/entity-dynamic.service.js +18 -18
  17. package/dist/module/meta/service/entity-list.service.js +3 -3
  18. package/dist/module/meta/service/entity-master.service.js +3 -3
  19. package/dist/module/meta/service/entity-relation.service.js +11 -11
  20. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  21. package/dist/module/meta/service/resolver.service.js +3 -3
  22. package/dist/module/module/repository/menu.repository.js +12 -12
  23. package/dist/module/notification/service/notification.service.js +9 -9
  24. package/dist/module/notification/service/otp.service.js +8 -2
  25. package/dist/module/notification/service/otp.service.js.map +1 -1
  26. package/dist/module/user/controller/login.controller.js +18 -18
  27. package/dist/module/user/service/role.service.js +4 -4
  28. package/dist/module/user/service/user-session.service.js +2 -2
  29. package/dist/module/workflow/repository/action.repository.js +16 -16
  30. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  31. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  32. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  33. package/dist/module/workflow/repository/stage-movement.repository.js +11 -11
  34. package/dist/module/workflow/repository/stage.repository.js +8 -8
  35. package/dist/module/workflow/service/action-template-mapping.service.js +10 -10
  36. package/dist/module/workflow/service/action.service.js +7 -7
  37. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  38. package/dist/module/workflow/service/stage-group.service.js +2 -2
  39. package/dist/module/workflow/service/stage.service.js +2 -2
  40. package/dist/module/workflow/service/task.service.js +28 -28
  41. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  42. package/dist/module/workflow/service/workflow-meta.service.js +50 -50
  43. package/dist/module/workflow/service/workflow.service.js +2 -2
  44. package/dist/tsconfig.build.tsbuildinfo +1 -1
  45. package/dist/utils/service/reflection-helper.service.js +2 -2
  46. package/docs/modules/event-driven-integration-design.md +91 -91
  47. package/docs/modules/integration.md +250 -250
  48. package/eslint.config.mjs +34 -34
  49. package/nest-cli.json +14 -14
  50. package/package.json +118 -118
  51. package/src/app.controller.ts +12 -12
  52. package/src/app.module.ts +49 -49
  53. package/src/app.service.ts +8 -8
  54. package/src/config/config.module.ts +18 -18
  55. package/src/config/database.config.ts +23 -23
  56. package/src/constant/global.constant.ts +67 -67
  57. package/src/core.module.ts +81 -81
  58. package/src/decorators/roles.decorator.ts +7 -7
  59. package/src/dtos/response.dto.ts +6 -6
  60. package/src/dtos/response.ts +5 -5
  61. package/src/index.ts +1 -1
  62. package/src/module/auth/auth.module.ts +49 -49
  63. package/src/module/auth/controller/auth.controller.ts +28 -28
  64. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  65. package/src/module/auth/guards/jwt.guard.ts +22 -22
  66. package/src/module/auth/guards/role.guard.ts +68 -68
  67. package/src/module/auth/services/auth.service.ts +50 -50
  68. package/src/module/auth/services/jwt.service.ts +11 -11
  69. package/src/module/auth/strategies/google.strategy.ts +54 -54
  70. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  71. package/src/module/auth/strategies/local.strategy.ts +13 -13
  72. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  73. package/src/module/dashboard/dashboard.module.ts +21 -21
  74. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  75. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  76. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  77. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  78. package/src/module/dev/dev.module.ts +12 -12
  79. package/src/module/dev/service/dev.service.ts +7 -7
  80. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  81. package/src/module/enterprise/enterprise.module.ts +30 -30
  82. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  83. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  84. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  85. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  86. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  87. package/src/module/enterprise/repository/school.repository.ts +281 -281
  88. package/src/module/enterprise/service/brand.service.ts +5 -5
  89. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  90. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  91. package/src/module/enterprise/service/organization.service.ts +145 -145
  92. package/src/module/filter/controller/filter.controller.ts +84 -84
  93. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  94. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  95. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  96. package/src/module/filter/filter.module.ts +31 -31
  97. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  98. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  99. package/src/module/filter/service/filter.service.ts +868 -868
  100. package/src/module/filter/service/saved-filter.service.ts +170 -170
  101. package/src/module/ics/controller/ics.controller.ts +21 -21
  102. package/src/module/ics/dto/ics.dto.ts +55 -55
  103. package/src/module/ics/ics.module.ts +13 -13
  104. package/src/module/ics/service/ics.service.ts +57 -57
  105. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  106. package/src/module/integration/controller/integration.controller.ts +662 -662
  107. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  108. package/src/module/integration/dto/create-config.dto.ts +526 -526
  109. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  110. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  111. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  112. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  113. package/src/module/integration/examples/usage.example.ts +338 -338
  114. package/src/module/integration/factories/base.factory.ts +7 -7
  115. package/src/module/integration/factories/email.factory.ts +49 -49
  116. package/src/module/integration/factories/integration.factory.ts +121 -121
  117. package/src/module/integration/factories/sms.factory.ts +51 -51
  118. package/src/module/integration/factories/telephone.factory.ts +41 -41
  119. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  120. package/src/module/integration/integration.module.ts +110 -110
  121. package/src/module/integration/service/calendar-event.service.ts +118 -118
  122. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  123. package/src/module/integration/service/integration-queue.service.ts +229 -229
  124. package/src/module/integration/service/integration.service.ts +2572 -2572
  125. package/src/module/integration/service/oauth.service.ts +224 -224
  126. package/src/module/integration/service/wrapper.service.ts +457 -457
  127. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  128. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  129. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  130. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  131. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  132. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  133. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  134. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  135. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  136. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  137. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  138. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  139. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  140. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  141. package/src/module/layout/controller/layout.controller.ts +47 -47
  142. package/src/module/layout/entity/header-items.entity.ts +28 -28
  143. package/src/module/layout/entity/header-section.entity.ts +19 -19
  144. package/src/module/layout/layout.module.ts +21 -21
  145. package/src/module/layout/repository/header-items.repository.ts +18 -18
  146. package/src/module/layout/repository/header-section.repository.ts +22 -22
  147. package/src/module/layout/service/header-section.service.ts +25 -25
  148. package/src/module/layout_preference/controller/layout_preference.controller.ts +47 -47
  149. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  150. package/src/module/layout_preference/layout_preference.module.ts +18 -18
  151. package/src/module/layout_preference/repository/layout_preference.repository.ts +30 -30
  152. package/src/module/layout_preference/service/layout_preference.service.ts +172 -172
  153. package/src/module/lead/controller/lead.controller.ts +30 -30
  154. package/src/module/lead/lead.module.ts +14 -14
  155. package/src/module/lead/repository/lead.repository.ts +41 -41
  156. package/src/module/lead/service/lead.service.ts +54 -54
  157. package/src/module/listmaster/controller/list-master.controller.ts +187 -187
  158. package/src/module/listmaster/entity/list-master-items.entity.ts +41 -41
  159. package/src/module/listmaster/entity/list-master.entity.ts +32 -32
  160. package/src/module/listmaster/listmaster.module.ts +44 -44
  161. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  162. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  163. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  164. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  165. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  166. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  167. package/src/module/listmaster/service/list-master.service.ts +424 -424
  168. package/src/module/mapper/controller/field-mapper.controller.ts +69 -69
  169. package/src/module/mapper/controller/mapper.controller.ts +15 -15
  170. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  171. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  172. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  173. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  174. package/src/module/mapper/mapper.module.ts +34 -34
  175. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  176. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  177. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  178. package/src/module/mapper/service/field-mapper.service.ts +245 -245
  179. package/src/module/mapper/service/mapper.service.ts +79 -79
  180. package/src/module/master/controller/master.controller.ts +74 -74
  181. package/src/module/master/service/master.service.ts +483 -483
  182. package/src/module/meta/controller/app-master.controller.ts +38 -38
  183. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  184. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  185. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  186. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  187. package/src/module/meta/controller/entity.controller.ts +385 -385
  188. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  189. package/src/module/meta/controller/media.controller.ts +82 -82
  190. package/src/module/meta/controller/meta.controller.ts +96 -96
  191. package/src/module/meta/controller/view-master.controller.ts +86 -86
  192. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  193. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  194. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  195. package/src/module/meta/entity/app-master.entity.ts +34 -34
  196. package/src/module/meta/entity/attribute-master.entity.ts +87 -87
  197. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  198. package/src/module/meta/entity/entity-master.entity.ts +78 -78
  199. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  200. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  201. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  202. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  203. package/src/module/meta/entity/media-data.entity.ts +32 -32
  204. package/src/module/meta/entity/preference.entity.ts +62 -62
  205. package/src/module/meta/entity/view-master.entity.ts +41 -41
  206. package/src/module/meta/entity.module.ts +158 -158
  207. package/src/module/meta/repository/app-master.repository.ts +20 -20
  208. package/src/module/meta/repository/attribute-master.repository.ts +110 -110
  209. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  210. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  211. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  212. package/src/module/meta/repository/media-data.repository.ts +50 -50
  213. package/src/module/meta/repository/preference.repository.ts +20 -20
  214. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  215. package/src/module/meta/repository/view-master.repository.ts +42 -42
  216. package/src/module/meta/service/app-master.service.ts +37 -37
  217. package/src/module/meta/service/attribute-master.service.ts +117 -117
  218. package/src/module/meta/service/common.service.ts +9 -9
  219. package/src/module/meta/service/entity-dynamic.service.ts +762 -762
  220. package/src/module/meta/service/entity-list.service.ts +205 -205
  221. package/src/module/meta/service/entity-master.service.ts +164 -164
  222. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  223. package/src/module/meta/service/entity-relation.service.ts +69 -69
  224. package/src/module/meta/service/entity-service-impl.service.ts +524 -524
  225. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  226. package/src/module/meta/service/entity-table.service.ts +150 -150
  227. package/src/module/meta/service/entity-validation.service.ts +185 -185
  228. package/src/module/meta/service/entity.service.ts +67 -67
  229. package/src/module/meta/service/field-group.service.ts +103 -103
  230. package/src/module/meta/service/media-data.service.ts +149 -149
  231. package/src/module/meta/service/populate-meta.service.ts +173 -173
  232. package/src/module/meta/service/preference.service.ts +16 -16
  233. package/src/module/meta/service/resolver.service.ts +240 -240
  234. package/src/module/meta/service/section-master.service.ts +104 -104
  235. package/src/module/meta/service/update-form-json.service.ts +22 -22
  236. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  237. package/src/module/meta/service/view-master.service.ts +111 -111
  238. package/src/module/module/controller/menu.controller.ts +15 -15
  239. package/src/module/module/controller/module-access.controller.ts +134 -134
  240. package/src/module/module/entity/menu.entity.ts +43 -43
  241. package/src/module/module/entity/module-access.entity.ts +25 -25
  242. package/src/module/module/entity/module-action.entity.ts +17 -17
  243. package/src/module/module/entity/module.entity.ts +52 -52
  244. package/src/module/module/module.module.ts +42 -42
  245. package/src/module/module/repository/menu.repository.ts +184 -184
  246. package/src/module/module/repository/module-access.repository.ts +344 -344
  247. package/src/module/module/service/menu.service.ts +82 -82
  248. package/src/module/module/service/module-access.service.ts +209 -209
  249. package/src/module/notification/controller/notification.controller.ts +58 -58
  250. package/src/module/notification/controller/otp.controller.ts +117 -117
  251. package/src/module/notification/entity/notification.entity.ts +26 -26
  252. package/src/module/notification/entity/otp.entity.ts +28 -28
  253. package/src/module/notification/firebase-admin.config.ts +22 -22
  254. package/src/module/notification/notification.module.ts +69 -69
  255. package/src/module/notification/repository/otp.repository.ts +27 -27
  256. package/src/module/notification/service/email.service.ts +127 -127
  257. package/src/module/notification/service/notification.service.ts +164 -164
  258. package/src/module/notification/service/otp.service.ts +132 -125
  259. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  260. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  261. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  262. package/src/module/third-party-module/third-party.module.ts +12 -12
  263. package/src/module/user/controller/login.controller.ts +197 -197
  264. package/src/module/user/controller/user.controller.ts +40 -40
  265. package/src/module/user/dto/create-user.dto.ts +62 -62
  266. package/src/module/user/dto/update-user.dto.ts +4 -4
  267. package/src/module/user/entity/role.entity.ts +33 -33
  268. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  269. package/src/module/user/entity/user-session.entity.ts +61 -61
  270. package/src/module/user/entity/user.entity.ts +71 -71
  271. package/src/module/user/repository/role.repository.ts +96 -96
  272. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  273. package/src/module/user/repository/user.repository.ts +50 -50
  274. package/src/module/user/repository/userSession.repository.ts +33 -33
  275. package/src/module/user/service/login.service.ts +280 -280
  276. package/src/module/user/service/role.service.ts +189 -189
  277. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  278. package/src/module/user/service/user-session.service.ts +168 -168
  279. package/src/module/user/service/user.service.ts +353 -353
  280. package/src/module/user/user.module.ts +65 -65
  281. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  282. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  283. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  284. package/src/module/workflow/controller/action.controller.ts +95 -95
  285. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  286. package/src/module/workflow/controller/comm-template.controller.ts +41 -41
  287. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  288. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  289. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  290. package/src/module/workflow/controller/stage.controller.ts +50 -50
  291. package/src/module/workflow/controller/task.controller.ts +77 -77
  292. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  293. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  294. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  295. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  296. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  297. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  298. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  299. package/src/module/workflow/entity/action.entity.ts +50 -50
  300. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  301. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  302. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  303. package/src/module/workflow/entity/form.entity.ts +25 -25
  304. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  305. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  306. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  307. package/src/module/workflow/entity/stage.entity.ts +20 -20
  308. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  309. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  310. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  311. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  312. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  313. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  314. package/src/module/workflow/repository/action-data.repository.ts +242 -242
  315. package/src/module/workflow/repository/action.repository.ts +277 -277
  316. package/src/module/workflow/repository/activity-log.repository.ts +149 -149
  317. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  318. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  319. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  320. package/src/module/workflow/repository/stage-movement.repository.ts +227 -227
  321. package/src/module/workflow/repository/stage.repository.ts +172 -172
  322. package/src/module/workflow/repository/task.repository.ts +117 -117
  323. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  324. package/src/module/workflow/service/action-category.service.ts +33 -33
  325. package/src/module/workflow/service/action-data.service.ts +62 -62
  326. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  327. package/src/module/workflow/service/action-template-mapping.service.ts +55 -55
  328. package/src/module/workflow/service/action.service.ts +263 -263
  329. package/src/module/workflow/service/activity-log.service.ts +107 -107
  330. package/src/module/workflow/service/comm-template.service.ts +176 -176
  331. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  332. package/src/module/workflow/service/form-master.service.ts +35 -35
  333. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  334. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  335. package/src/module/workflow/service/stage-group.service.ts +307 -307
  336. package/src/module/workflow/service/stage.service.ts +199 -199
  337. package/src/module/workflow/service/task.service.ts +561 -561
  338. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  339. package/src/module/workflow/service/workflow-meta.service.ts +581 -581
  340. package/src/module/workflow/service/workflow.service.ts +205 -205
  341. package/src/module/workflow/workflow.module.ts +174 -174
  342. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  343. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  344. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  345. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  346. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  347. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  348. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  349. package/src/module/workflow-automation/service/workflow-automation.service.ts +345 -345
  350. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  351. package/src/resources/dev.properties.yaml +30 -30
  352. package/src/resources/local.properties.yaml +27 -27
  353. package/src/resources/properties.module.ts +12 -12
  354. package/src/resources/properties.yaml.ts +11 -11
  355. package/src/resources/uat.properties.yaml +15 -15
  356. package/src/utils/dto/excel-data.dto.ts +14 -14
  357. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  358. package/src/utils/service/base64util.service.ts +18 -18
  359. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  360. package/src/utils/service/codeGenerator.service.ts +22 -22
  361. package/src/utils/service/dateUtil.service.ts +17 -17
  362. package/src/utils/service/encryptUtil.service.ts +97 -97
  363. package/src/utils/service/excel-helper.service.ts +72 -72
  364. package/src/utils/service/excelUtil.service.ts +15 -15
  365. package/src/utils/service/file-util.service.ts +11 -11
  366. package/src/utils/service/json-util.service.ts +23 -23
  367. package/src/utils/service/loggingUtil.service.ts +34 -34
  368. package/src/utils/service/reflection-helper.service.ts +62 -62
  369. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  370. package/src/utils/utils.module.ts +25 -25
  371. package/tsconfig.build.json +4 -4
  372. package/tsconfig.json +24 -24
  373. package/.claude/settings.local.json +0 -26
  374. package/.idea/250218_nodejs_core.iml +0 -9
  375. package/.idea/codeStyles/Project.xml +0 -59
  376. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  377. package/.idea/copilot.data.migration.agent.xml +0 -6
  378. package/.idea/copilot.data.migration.ask.xml +0 -6
  379. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  380. package/.idea/copilot.data.migration.edit.xml +0 -6
  381. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  382. package/.idea/misc.xml +0 -6
  383. package/.idea/modules.xml +0 -8
  384. package/.idea/prettier.xml +0 -6
  385. package/.idea/vcs.xml +0 -6
  386. package/server.log +0 -850
@@ -1,353 +1,353 @@
1
- import { RoleService } from './role.service';
2
- import {
3
- BadRequestException,
4
- ForbiddenException,
5
- Inject,
6
- Injectable,
7
- } from '@nestjs/common';
8
- import { EntityServiceImpl } from '../../meta/service/entity-service-impl.service';
9
- import { UserData } from '../entity/user.entity';
10
- import { BaseEntity } from '../../meta/entity/base-entity.entity';
11
- import { UserRepository } from '../repository/user.repository';
12
- import { EncryptUtilService } from '../../../utils/service/encryptUtil.service';
13
- import { ClockIDGenService } from '../../../utils/service/clockIDGenUtil.service';
14
- import {
15
- ENTITYTYPE_ROLE,
16
- STATUS_ACTIVE,
17
- INVITATION_STATUS_SENT,
18
- } from '../../../constant/global.constant';
19
- import { CreateUserDto } from '../dto/create-user.dto';
20
- import { UserRoleMappingService } from './user-role-mapping.service';
21
- import { UserRoleMapping } from '../entity/user-role-mapping.entity';
22
- import { EntityManager, Repository } from 'typeorm';
23
- import { UpdateUserDto } from '../dto/update-user.dto';
24
- import { ConfigService } from '@nestjs/config';
25
- // import { UserAppMappingService } from 'src/module/meta/service/user-app-mapping.service';
26
- import { ServiceResult } from 'src/dtos/response.dto';
27
- import { ListMasterService } from 'src/module/listmaster/service/list-master.service';
28
- import { OrganizationRepository } from 'src/module/enterprise/repository/organization.repository';
29
- import { InjectRepository } from '@nestjs/typeorm';
30
- import { Action } from 'src/module/workflow-automation/interface/action.interface';
31
- import { ActionHandler } from 'src/module/workflow-automation/interface/action.decorator';
32
-
33
- @Injectable()
34
- @ActionHandler('User')
35
- export class UserService extends EntityServiceImpl implements Action {
36
- constructor(
37
- private userRepository: UserRepository,
38
- private userRoleMappingService: UserRoleMappingService,
39
- private readonly clockIDGenService: ClockIDGenService,
40
- private configService: ConfigService,
41
- private readonly organizationRepository: OrganizationRepository,
42
- // private readonly userAppMappingService: UserAppMappingService,
43
- @Inject('RoleService') private readonly roleService: RoleService,
44
- @Inject('ListMasterService')
45
- private readonly listMasterService: ListMasterService,
46
- ) {
47
- super();
48
- }
49
-
50
- masterKey = this.configService.get('MASTER_KEY') || '';
51
- masterIv = this.configService.get('MASTER_IV') || '';
52
-
53
- async createEntity(
54
- entityData: BaseEntity,
55
- loggedInUser: UserData | null,
56
- manager?: EntityManager,
57
- ): Promise<ServiceResult<BaseEntity>> {
58
- const userData = entityData as CreateUserDto;
59
-
60
- let existingUser = await this.userRepository.findByEmailId(
61
- userData.email_id,
62
- loggedInUser?.organization_id,
63
- );
64
- if (existingUser) {
65
- return { success: false, error: 'User with this email already exists' };
66
- }
67
-
68
- existingUser = await this.userRepository.findByMobile(
69
- userData.mobile,
70
- loggedInUser?.organization_id,
71
- );
72
- if (existingUser) {
73
- return { success: false, error: 'User with this mobile already exists' };
74
- }
75
-
76
- const resolveStatus = await this.listMasterService.getResolvedListCode(
77
- STATUS_ACTIVE,
78
- loggedInUser?.organization_id || 0,
79
- );
80
-
81
- const resolvedInvitationStatus =
82
- await this.listMasterService.getResolvedListCode(
83
- INVITATION_STATUS_SENT,
84
- loggedInUser?.organization_id || 0,
85
- );
86
-
87
- userData.name =
88
- (userData.first_name || '') + ' ' + (userData.last_name || '');
89
- userData.password = EncryptUtilService.encryptGCM(
90
- userData.password || 'Admin@123',
91
- this.masterKey,
92
- this.masterIv,
93
- );
94
- userData.is_firstlogin = 1;
95
- userData.roles = [];
96
- userData.invitation_status = resolvedInvitationStatus.id;
97
- userData.status = resolveStatus.id || 'ACTIVE';
98
-
99
- const savedData = await super.createEntity(userData, loggedInUser);
100
-
101
- const insertPromises: Promise<UserRoleMapping | void | null | undefined>[] =
102
- [];
103
-
104
- for (const entry of userData.access || []) {
105
- const { level_type, level_ids, app_code, role_id } = entry;
106
-
107
- if (
108
- !level_type ||
109
- !Array.isArray(level_ids) ||
110
- !level_ids.length ||
111
- !app_code ||
112
- !role_id
113
- ) {
114
- return { success: false, error: 'Invalid access level entry' };
115
- }
116
-
117
- for (const levelId of level_ids) {
118
- const userRoleMapping = new UserRoleMapping(savedData.id, role_id);
119
- userRoleMapping.level_type = level_type;
120
- userRoleMapping.level_id = String(levelId);
121
- userRoleMapping.appcode = app_code;
122
- userRoleMapping.organization_id = loggedInUser?.organization_id || 0;
123
- insertPromises.push(
124
- this.userRoleMappingService.assignUserRole(userRoleMapping),
125
- );
126
- }
127
- }
128
-
129
- try {
130
- if (insertPromises.length > 0) {
131
- await Promise.all(insertPromises);
132
- }
133
- } catch (error) {
134
- console.error('Error adding access levels:', error);
135
- return { success: false, error: 'Failed to add access levels' };
136
- }
137
-
138
- return { success: true, data: savedData };
139
- }
140
-
141
- name: string = 'UserService';
142
- async execute(payload: any): Promise<any> {
143
- console.log('payload', payload);
144
- }
145
-
146
- async getEntityData(
147
- entityType: string,
148
- id: number,
149
- loggedInUser?: UserData,
150
- ): Promise<BaseEntity | null> {
151
- const user = await this.userRepository.findById(id);
152
- if (user) {
153
- const userRoleMappings: UserRoleMapping[] | null =
154
- await this.userRoleMappingService.findByUserId(id);
155
- if (userRoleMappings) {
156
- const userDto = user as unknown as CreateUserDto;
157
- const roles: any[] = [];
158
- for (const i in userRoleMappings) {
159
- const userRoleMapping = userRoleMappings[i];
160
- const roleId = userRoleMapping.role_id;
161
- const role = await super.getEntityData(
162
- ENTITYTYPE_ROLE,
163
- roleId,
164
- loggedInUser,
165
- );
166
- roles.push(role);
167
- }
168
- userDto.roles = roles;
169
- }
170
- return user;
171
- }
172
- return null;
173
- }
174
-
175
- async updateEntity(
176
- entityData: BaseEntity,
177
- loggedInUserData: UserData,
178
- ): Promise<ServiceResult<BaseEntity>> {
179
- const userDto = entityData as UpdateUserDto;
180
-
181
- const existingUser = await this.userRepository.findById(entityData.id);
182
-
183
- if (!existingUser) {
184
- return { success: false, error: 'User not found' };
185
- }
186
-
187
- if (userDto.password) {
188
- const decryptedPassword = EncryptUtilService.decryptGCM(
189
- existingUser.password,
190
- this.masterKey,
191
- this.masterIv,
192
- );
193
-
194
- if (decryptedPassword === userDto.password) {
195
- return {
196
- success: false,
197
- error: 'New password cannot be the same as the current password',
198
- };
199
- }
200
-
201
- userDto.password = EncryptUtilService.encryptGCM(
202
- userDto.password,
203
- this.masterKey,
204
- this.masterIv,
205
- );
206
- }
207
-
208
- const updatedUserData = { ...userDto } as any;
209
- delete updatedUserData.access;
210
-
211
- const savedData = await super.updateEntity(
212
- updatedUserData,
213
- loggedInUserData,
214
- );
215
-
216
- // Handle updated access levels
217
- if (userDto.access && userDto.access.length > 0) {
218
- if (loggedInUserData.level_type == 'ORG') {
219
- await this.userRoleMappingService.deleteByUserId(existingUser.id);
220
- } else {
221
- await this.userRoleMappingService.deleteByUserId(
222
- existingUser.id,
223
- loggedInUserData.level_type,
224
- loggedInUserData.level_id,
225
- );
226
- }
227
-
228
- const insertPromises: any[] = [];
229
-
230
- for (const entry of userDto.access) {
231
- const { level_type, level_ids, app_code, role_id } = entry;
232
-
233
- if (!level_type || !app_code || !role_id || !Array.isArray(level_ids)) {
234
- return { success: false, error: 'Invalid access level entry' };
235
- }
236
-
237
- for (const levelId of level_ids) {
238
- const userRoleMapping = new UserRoleMapping(savedData.id, role_id);
239
- userRoleMapping.level_type = level_type;
240
- userRoleMapping.level_id = String(levelId);
241
- userRoleMapping.appcode = app_code;
242
- userRoleMapping.organization_id =
243
- loggedInUserData?.organization_id || 0;
244
-
245
- insertPromises.push(
246
- this.userRoleMappingService.assignUserRole(userRoleMapping),
247
- );
248
- }
249
- }
250
-
251
- try {
252
- await Promise.all(insertPromises);
253
- } catch (error) {
254
- console.error('Error updating access levels:', error);
255
- return { success: false, error: 'Failed to update access levels' };
256
- }
257
- }
258
-
259
- return { success: true, data: savedData };
260
- }
261
-
262
- async findByEmailId(
263
- email_id: string,
264
- organization_id?: number,
265
- ): Promise<UserData | null> {
266
- return await this.userRepository.findByEmailId(email_id, organization_id);
267
- }
268
-
269
- async findByMobile(
270
- mobile: string,
271
- organization_id?: number,
272
- appCode?: string,
273
- ): Promise<UserData | null> {
274
- return await this.userRepository.findByMobile(
275
- mobile,
276
- organization_id,
277
- appCode,
278
- );
279
- }
280
-
281
- async setDefaultLastAccess(userId: number, appcode: string): Promise<void> {
282
- const user = await this.userRepository.findById(userId);
283
-
284
- if (!user) {
285
- throw new BadRequestException('User not found');
286
- }
287
-
288
- user.last_app_access = appcode;
289
-
290
- await this.userRepository.saveUser(user); // This persists the updated field
291
- }
292
-
293
- async setLastLevelTypeAndId(
294
- userId: number,
295
- levelType: string,
296
- levelId: string,
297
- appcode: string,
298
- ): Promise<void> {
299
- const user = await this.userRepository.findById(userId);
300
-
301
- if (!user) {
302
- throw new BadRequestException('User not found');
303
- }
304
-
305
- user.last_level_type = levelType;
306
- user.last_level_id = levelId;
307
- user.last_app_access = appcode;
308
-
309
- await this.userRepository.saveUser(user); // This persists the updated field
310
- }
311
-
312
- async checkEmailExists(data: {
313
- email_id: string;
314
- subdomain: string;
315
- }): Promise<any> {
316
- const { email_id, subdomain } = data;
317
-
318
- if (!email_id || !subdomain) {
319
- return { success: false, message: 'Email and Subdomain is required' };
320
- }
321
-
322
- let organization;
323
-
324
- if (subdomain) {
325
- organization =
326
- await this.organizationRepository.findOrganizationBySubdomain(
327
- subdomain,
328
- );
329
-
330
- if (!organization) {
331
- throw new BadRequestException('Organization not found.');
332
- }
333
- }
334
-
335
- // 🔹 Step 2: Find the user by email + organization check
336
- const user = await this.userRepository.findByEmailId(email_id);
337
-
338
- if (!user || (organization && user.organization_id !== organization.id)) {
339
- throw new BadRequestException('User not found in organization.');
340
- }
341
-
342
- if (user) {
343
- return {
344
- success: true,
345
- message:
346
- 'An account already exists for this email address. Login or use a different email address to sign up.',
347
- userId: user.id,
348
- };
349
- } else {
350
- throw new ForbiddenException('No account found with this email address.');
351
- }
352
- }
353
- }
1
+ import { RoleService } from './role.service';
2
+ import {
3
+ BadRequestException,
4
+ ForbiddenException,
5
+ Inject,
6
+ Injectable,
7
+ } from '@nestjs/common';
8
+ import { EntityServiceImpl } from '../../meta/service/entity-service-impl.service';
9
+ import { UserData } from '../entity/user.entity';
10
+ import { BaseEntity } from '../../meta/entity/base-entity.entity';
11
+ import { UserRepository } from '../repository/user.repository';
12
+ import { EncryptUtilService } from '../../../utils/service/encryptUtil.service';
13
+ import { ClockIDGenService } from '../../../utils/service/clockIDGenUtil.service';
14
+ import {
15
+ ENTITYTYPE_ROLE,
16
+ STATUS_ACTIVE,
17
+ INVITATION_STATUS_SENT,
18
+ } from '../../../constant/global.constant';
19
+ import { CreateUserDto } from '../dto/create-user.dto';
20
+ import { UserRoleMappingService } from './user-role-mapping.service';
21
+ import { UserRoleMapping } from '../entity/user-role-mapping.entity';
22
+ import { EntityManager, Repository } from 'typeorm';
23
+ import { UpdateUserDto } from '../dto/update-user.dto';
24
+ import { ConfigService } from '@nestjs/config';
25
+ // import { UserAppMappingService } from 'src/module/meta/service/user-app-mapping.service';
26
+ import { ServiceResult } from 'src/dtos/response.dto';
27
+ import { ListMasterService } from 'src/module/listmaster/service/list-master.service';
28
+ import { OrganizationRepository } from 'src/module/enterprise/repository/organization.repository';
29
+ import { InjectRepository } from '@nestjs/typeorm';
30
+ import { Action } from 'src/module/workflow-automation/interface/action.interface';
31
+ import { ActionHandler } from 'src/module/workflow-automation/interface/action.decorator';
32
+
33
+ @Injectable()
34
+ @ActionHandler('User')
35
+ export class UserService extends EntityServiceImpl implements Action {
36
+ constructor(
37
+ private userRepository: UserRepository,
38
+ private userRoleMappingService: UserRoleMappingService,
39
+ private readonly clockIDGenService: ClockIDGenService,
40
+ private configService: ConfigService,
41
+ private readonly organizationRepository: OrganizationRepository,
42
+ // private readonly userAppMappingService: UserAppMappingService,
43
+ @Inject('RoleService') private readonly roleService: RoleService,
44
+ @Inject('ListMasterService')
45
+ private readonly listMasterService: ListMasterService,
46
+ ) {
47
+ super();
48
+ }
49
+
50
+ masterKey = this.configService.get('MASTER_KEY') || '';
51
+ masterIv = this.configService.get('MASTER_IV') || '';
52
+
53
+ async createEntity(
54
+ entityData: BaseEntity,
55
+ loggedInUser: UserData | null,
56
+ manager?: EntityManager,
57
+ ): Promise<ServiceResult<BaseEntity>> {
58
+ const userData = entityData as CreateUserDto;
59
+
60
+ let existingUser = await this.userRepository.findByEmailId(
61
+ userData.email_id,
62
+ loggedInUser?.organization_id,
63
+ );
64
+ if (existingUser) {
65
+ return { success: false, error: 'User with this email already exists' };
66
+ }
67
+
68
+ existingUser = await this.userRepository.findByMobile(
69
+ userData.mobile,
70
+ loggedInUser?.organization_id,
71
+ );
72
+ if (existingUser) {
73
+ return { success: false, error: 'User with this mobile already exists' };
74
+ }
75
+
76
+ const resolveStatus = await this.listMasterService.getResolvedListCode(
77
+ STATUS_ACTIVE,
78
+ loggedInUser?.organization_id || 0,
79
+ );
80
+
81
+ const resolvedInvitationStatus =
82
+ await this.listMasterService.getResolvedListCode(
83
+ INVITATION_STATUS_SENT,
84
+ loggedInUser?.organization_id || 0,
85
+ );
86
+
87
+ userData.name =
88
+ (userData.first_name || '') + ' ' + (userData.last_name || '');
89
+ userData.password = EncryptUtilService.encryptGCM(
90
+ userData.password || 'Admin@123',
91
+ this.masterKey,
92
+ this.masterIv,
93
+ );
94
+ userData.is_firstlogin = 1;
95
+ userData.roles = [];
96
+ userData.invitation_status = resolvedInvitationStatus.id;
97
+ userData.status = resolveStatus.id || 'ACTIVE';
98
+
99
+ const savedData = await super.createEntity(userData, loggedInUser);
100
+
101
+ const insertPromises: Promise<UserRoleMapping | void | null | undefined>[] =
102
+ [];
103
+
104
+ for (const entry of userData.access || []) {
105
+ const { level_type, level_ids, app_code, role_id } = entry;
106
+
107
+ if (
108
+ !level_type ||
109
+ !Array.isArray(level_ids) ||
110
+ !level_ids.length ||
111
+ !app_code ||
112
+ !role_id
113
+ ) {
114
+ return { success: false, error: 'Invalid access level entry' };
115
+ }
116
+
117
+ for (const levelId of level_ids) {
118
+ const userRoleMapping = new UserRoleMapping(savedData.id, role_id);
119
+ userRoleMapping.level_type = level_type;
120
+ userRoleMapping.level_id = String(levelId);
121
+ userRoleMapping.appcode = app_code;
122
+ userRoleMapping.organization_id = loggedInUser?.organization_id || 0;
123
+ insertPromises.push(
124
+ this.userRoleMappingService.assignUserRole(userRoleMapping),
125
+ );
126
+ }
127
+ }
128
+
129
+ try {
130
+ if (insertPromises.length > 0) {
131
+ await Promise.all(insertPromises);
132
+ }
133
+ } catch (error) {
134
+ console.error('Error adding access levels:', error);
135
+ return { success: false, error: 'Failed to add access levels' };
136
+ }
137
+
138
+ return { success: true, data: savedData };
139
+ }
140
+
141
+ name: string = 'UserService';
142
+ async execute(payload: any): Promise<any> {
143
+ console.log('payload', payload);
144
+ }
145
+
146
+ async getEntityData(
147
+ entityType: string,
148
+ id: number,
149
+ loggedInUser?: UserData,
150
+ ): Promise<BaseEntity | null> {
151
+ const user = await this.userRepository.findById(id);
152
+ if (user) {
153
+ const userRoleMappings: UserRoleMapping[] | null =
154
+ await this.userRoleMappingService.findByUserId(id);
155
+ if (userRoleMappings) {
156
+ const userDto = user as unknown as CreateUserDto;
157
+ const roles: any[] = [];
158
+ for (const i in userRoleMappings) {
159
+ const userRoleMapping = userRoleMappings[i];
160
+ const roleId = userRoleMapping.role_id;
161
+ const role = await super.getEntityData(
162
+ ENTITYTYPE_ROLE,
163
+ roleId,
164
+ loggedInUser,
165
+ );
166
+ roles.push(role);
167
+ }
168
+ userDto.roles = roles;
169
+ }
170
+ return user;
171
+ }
172
+ return null;
173
+ }
174
+
175
+ async updateEntity(
176
+ entityData: BaseEntity,
177
+ loggedInUserData: UserData,
178
+ ): Promise<ServiceResult<BaseEntity>> {
179
+ const userDto = entityData as UpdateUserDto;
180
+
181
+ const existingUser = await this.userRepository.findById(entityData.id);
182
+
183
+ if (!existingUser) {
184
+ return { success: false, error: 'User not found' };
185
+ }
186
+
187
+ if (userDto.password) {
188
+ const decryptedPassword = EncryptUtilService.decryptGCM(
189
+ existingUser.password,
190
+ this.masterKey,
191
+ this.masterIv,
192
+ );
193
+
194
+ if (decryptedPassword === userDto.password) {
195
+ return {
196
+ success: false,
197
+ error: 'New password cannot be the same as the current password',
198
+ };
199
+ }
200
+
201
+ userDto.password = EncryptUtilService.encryptGCM(
202
+ userDto.password,
203
+ this.masterKey,
204
+ this.masterIv,
205
+ );
206
+ }
207
+
208
+ const updatedUserData = { ...userDto } as any;
209
+ delete updatedUserData.access;
210
+
211
+ const savedData = await super.updateEntity(
212
+ updatedUserData,
213
+ loggedInUserData,
214
+ );
215
+
216
+ // Handle updated access levels
217
+ if (userDto.access && userDto.access.length > 0) {
218
+ if (loggedInUserData.level_type == 'ORG') {
219
+ await this.userRoleMappingService.deleteByUserId(existingUser.id);
220
+ } else {
221
+ await this.userRoleMappingService.deleteByUserId(
222
+ existingUser.id,
223
+ loggedInUserData.level_type,
224
+ loggedInUserData.level_id,
225
+ );
226
+ }
227
+
228
+ const insertPromises: any[] = [];
229
+
230
+ for (const entry of userDto.access) {
231
+ const { level_type, level_ids, app_code, role_id } = entry;
232
+
233
+ if (!level_type || !app_code || !role_id || !Array.isArray(level_ids)) {
234
+ return { success: false, error: 'Invalid access level entry' };
235
+ }
236
+
237
+ for (const levelId of level_ids) {
238
+ const userRoleMapping = new UserRoleMapping(savedData.id, role_id);
239
+ userRoleMapping.level_type = level_type;
240
+ userRoleMapping.level_id = String(levelId);
241
+ userRoleMapping.appcode = app_code;
242
+ userRoleMapping.organization_id =
243
+ loggedInUserData?.organization_id || 0;
244
+
245
+ insertPromises.push(
246
+ this.userRoleMappingService.assignUserRole(userRoleMapping),
247
+ );
248
+ }
249
+ }
250
+
251
+ try {
252
+ await Promise.all(insertPromises);
253
+ } catch (error) {
254
+ console.error('Error updating access levels:', error);
255
+ return { success: false, error: 'Failed to update access levels' };
256
+ }
257
+ }
258
+
259
+ return { success: true, data: savedData };
260
+ }
261
+
262
+ async findByEmailId(
263
+ email_id: string,
264
+ organization_id?: number,
265
+ ): Promise<UserData | null> {
266
+ return await this.userRepository.findByEmailId(email_id, organization_id);
267
+ }
268
+
269
+ async findByMobile(
270
+ mobile: string,
271
+ organization_id?: number,
272
+ appCode?: string,
273
+ ): Promise<UserData | null> {
274
+ return await this.userRepository.findByMobile(
275
+ mobile,
276
+ organization_id,
277
+ appCode,
278
+ );
279
+ }
280
+
281
+ async setDefaultLastAccess(userId: number, appcode: string): Promise<void> {
282
+ const user = await this.userRepository.findById(userId);
283
+
284
+ if (!user) {
285
+ throw new BadRequestException('User not found');
286
+ }
287
+
288
+ user.last_app_access = appcode;
289
+
290
+ await this.userRepository.saveUser(user); // This persists the updated field
291
+ }
292
+
293
+ async setLastLevelTypeAndId(
294
+ userId: number,
295
+ levelType: string,
296
+ levelId: string,
297
+ appcode: string,
298
+ ): Promise<void> {
299
+ const user = await this.userRepository.findById(userId);
300
+
301
+ if (!user) {
302
+ throw new BadRequestException('User not found');
303
+ }
304
+
305
+ user.last_level_type = levelType;
306
+ user.last_level_id = levelId;
307
+ user.last_app_access = appcode;
308
+
309
+ await this.userRepository.saveUser(user); // This persists the updated field
310
+ }
311
+
312
+ async checkEmailExists(data: {
313
+ email_id: string;
314
+ subdomain: string;
315
+ }): Promise<any> {
316
+ const { email_id, subdomain } = data;
317
+
318
+ if (!email_id || !subdomain) {
319
+ return { success: false, message: 'Email and Subdomain is required' };
320
+ }
321
+
322
+ let organization;
323
+
324
+ if (subdomain) {
325
+ organization =
326
+ await this.organizationRepository.findOrganizationBySubdomain(
327
+ subdomain,
328
+ );
329
+
330
+ if (!organization) {
331
+ throw new BadRequestException('Organization not found.');
332
+ }
333
+ }
334
+
335
+ // 🔹 Step 2: Find the user by email + organization check
336
+ const user = await this.userRepository.findByEmailId(email_id);
337
+
338
+ if (!user || (organization && user.organization_id !== organization.id)) {
339
+ throw new BadRequestException('User not found in organization.');
340
+ }
341
+
342
+ if (user) {
343
+ return {
344
+ success: true,
345
+ message:
346
+ 'An account already exists for this email address. Login or use a different email address to sign up.',
347
+ userId: user.id,
348
+ };
349
+ } else {
350
+ throw new ForbiddenException('No account found with this email address.');
351
+ }
352
+ }
353
+ }