rez_core 4.0.136 → 4.0.138

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 (438) hide show
  1. package/.prettierrc +3 -3
  2. package/README.md +99 -99
  3. package/dist/config/config.module.js +2 -2
  4. package/dist/config/config.module.js.map +1 -1
  5. package/dist/config/database.config.d.ts +1 -1
  6. package/dist/config/database.config.js +12 -15
  7. package/dist/config/database.config.js.map +1 -1
  8. package/dist/module/auth/guards/role.guard.js +3 -3
  9. package/dist/module/auth/services/auth.service.js +3 -3
  10. package/dist/module/auth/services/auth.service.js.map +1 -1
  11. package/dist/module/enterprise/entity/organization.entity.js +1 -1
  12. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  13. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  14. package/dist/module/filter/service/filter.service.js +22 -22
  15. package/dist/module/integration/entity/integration-config.entity.js +6 -6
  16. package/dist/module/integration/entity/integration-config.entity.js.map +1 -1
  17. package/dist/module/integration/entity/integration-entity-mapper.entity.js +1 -1
  18. package/dist/module/integration/entity/integration-entity-mapper.entity.js.map +1 -1
  19. package/dist/module/integration/entity/integration-source.entity.js +4 -4
  20. package/dist/module/integration/entity/integration-source.entity.js.map +1 -1
  21. package/dist/module/integration/entity/user-integration.entity.js +4 -4
  22. package/dist/module/integration/entity/user-integration.entity.js.map +1 -1
  23. package/dist/module/integration/examples/usage.example.js +9 -9
  24. package/dist/module/integration/service/integration.service.js +1 -1
  25. package/dist/module/integration/service/wrapper.service.d.ts +3 -1
  26. package/dist/module/integration/service/wrapper.service.js +64 -61
  27. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  28. package/dist/module/listmaster/entity/list-master-items.entity.js +3 -3
  29. package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
  30. package/dist/module/listmaster/entity/list-master.entity.js +4 -4
  31. package/dist/module/listmaster/entity/list-master.entity.js.map +1 -1
  32. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  33. package/dist/module/mapper/entity/field-mapper.entity.js +6 -6
  34. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  35. package/dist/module/mapper/service/field-mapper.service.js +6 -6
  36. package/dist/module/mapper/service/field-mapper.service.js.map +1 -1
  37. package/dist/module/mapper/service/mapper.service.js +2 -2
  38. package/dist/module/meta/entity/entity-master.entity.js +1 -1
  39. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  40. package/dist/module/meta/entity/view-master.entity.js +1 -1
  41. package/dist/module/meta/entity/view-master.entity.js.map +1 -1
  42. package/dist/module/meta/service/attribute-master.service.js +1 -1
  43. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  44. package/dist/module/meta/service/entity-dynamic.service.js +9 -9
  45. package/dist/module/meta/service/entity-list.service.js +3 -3
  46. package/dist/module/meta/service/entity-master.service.js +3 -3
  47. package/dist/module/meta/service/entity-relation.service.js +11 -11
  48. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  49. package/dist/module/meta/service/resolver.service.js +5 -5
  50. package/dist/module/meta/service/resolver.service.js.map +1 -1
  51. package/dist/module/module/repository/menu.repository.js +13 -13
  52. package/dist/module/module/repository/menu.repository.js.map +1 -1
  53. package/dist/module/notification/entity/otp.entity.js +1 -1
  54. package/dist/module/notification/entity/otp.entity.js.map +1 -1
  55. package/dist/module/notification/service/notification.service.js +9 -9
  56. package/dist/module/user/controller/login.controller.js +18 -18
  57. package/dist/module/user/entity/user-role-mapping.entity.js +1 -1
  58. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  59. package/dist/module/user/service/role.service.js +4 -4
  60. package/dist/module/user/service/user-session.service.js +2 -2
  61. package/dist/module/workflow/entity/action-data.entity.js +1 -1
  62. package/dist/module/workflow/entity/action-data.entity.js.map +1 -1
  63. package/dist/module/workflow/entity/action.entity.js +1 -1
  64. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  65. package/dist/module/workflow/entity/comm-template.entity.js +1 -1
  66. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  67. package/dist/module/workflow/repository/action.repository.js +20 -20
  68. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  69. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  70. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  71. package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
  72. package/dist/module/workflow/repository/stage.repository.js +8 -8
  73. package/dist/module/workflow/repository/task.repository.d.ts +3 -1
  74. package/dist/module/workflow/repository/task.repository.js +8 -3
  75. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  76. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  77. package/dist/module/workflow/service/action.service.js +7 -7
  78. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  79. package/dist/module/workflow/service/stage-group.service.js +2 -2
  80. package/dist/module/workflow/service/stage.service.js +2 -2
  81. package/dist/module/workflow/service/task.service.js +36 -41
  82. package/dist/module/workflow/service/task.service.js.map +1 -1
  83. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  84. package/dist/module/workflow/service/workflow-meta.service.js +49 -47
  85. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  86. package/dist/module/workflow/service/workflow.service.js +2 -2
  87. package/dist/tsconfig.build.tsbuildinfo +1 -1
  88. package/dist/utils/service/loggingUtil.service.d.ts +9 -2
  89. package/dist/utils/service/loggingUtil.service.js +65 -14
  90. package/dist/utils/service/loggingUtil.service.js.map +1 -1
  91. package/dist/utils/service/reflection-helper.service.js +2 -2
  92. package/dist/utils/utils.module.js +2 -0
  93. package/dist/utils/utils.module.js.map +1 -1
  94. package/docs/modules/event-driven-integration-design.md +91 -91
  95. package/docs/modules/integration.md +250 -250
  96. package/eslint.config.mjs +34 -34
  97. package/nest-cli.json +14 -14
  98. package/package.json +119 -120
  99. package/src/app.controller.ts +12 -12
  100. package/src/app.module.ts +52 -52
  101. package/src/app.service.ts +8 -8
  102. package/src/config/config.module.ts +18 -17
  103. package/src/config/database.config.ts +23 -47
  104. package/src/constant/global.constant.ts +67 -67
  105. package/src/core.module.ts +81 -81
  106. package/src/decorators/roles.decorator.ts +7 -7
  107. package/src/dtos/response.dto.ts +6 -6
  108. package/src/dtos/response.ts +5 -5
  109. package/src/index.ts +1 -1
  110. package/src/module/auth/auth.module.ts +49 -49
  111. package/src/module/auth/controller/auth.controller.ts +28 -28
  112. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  113. package/src/module/auth/guards/jwt.guard.ts +22 -22
  114. package/src/module/auth/guards/role.guard.ts +68 -68
  115. package/src/module/auth/services/auth.service.ts +50 -50
  116. package/src/module/auth/services/jwt.service.ts +11 -11
  117. package/src/module/auth/strategies/google.strategy.ts +54 -54
  118. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  119. package/src/module/auth/strategies/local.strategy.ts +13 -13
  120. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  121. package/src/module/dashboard/dashboard.module.ts +21 -21
  122. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  123. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  124. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  125. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  126. package/src/module/dev/dev.module.ts +12 -12
  127. package/src/module/dev/service/dev.service.ts +7 -7
  128. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  129. package/src/module/enterprise/enterprise.module.ts +30 -30
  130. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  131. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  132. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  133. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  134. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  135. package/src/module/enterprise/repository/school.repository.ts +278 -278
  136. package/src/module/enterprise/service/brand.service.ts +5 -5
  137. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  138. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  139. package/src/module/enterprise/service/organization.service.ts +145 -145
  140. package/src/module/filter/controller/filter.controller.ts +84 -84
  141. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  142. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  143. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  144. package/src/module/filter/filter.module.ts +31 -31
  145. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  146. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  147. package/src/module/filter/service/filter.service.ts +1005 -1005
  148. package/src/module/filter/service/saved-filter.service.ts +170 -170
  149. package/src/module/ics/controller/ics.controller.ts +21 -21
  150. package/src/module/ics/dto/ics.dto.ts +55 -55
  151. package/src/module/ics/ics.module.ts +13 -13
  152. package/src/module/ics/service/ics.service.ts +57 -57
  153. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  154. package/src/module/integration/controller/integration.controller.ts +662 -662
  155. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  156. package/src/module/integration/dto/create-config.dto.ts +526 -526
  157. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  158. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  159. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  160. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  161. package/src/module/integration/examples/usage.example.ts +338 -338
  162. package/src/module/integration/factories/base.factory.ts +7 -7
  163. package/src/module/integration/factories/email.factory.ts +49 -49
  164. package/src/module/integration/factories/integration.factory.ts +121 -121
  165. package/src/module/integration/factories/sms.factory.ts +51 -51
  166. package/src/module/integration/factories/telephone.factory.ts +41 -41
  167. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  168. package/src/module/integration/integration.module.ts +110 -110
  169. package/src/module/integration/service/calendar-event.service.ts +118 -118
  170. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  171. package/src/module/integration/service/integration-queue.service.ts +229 -229
  172. package/src/module/integration/service/integration.service.ts +2633 -2633
  173. package/src/module/integration/service/oauth.service.ts +224 -224
  174. package/src/module/integration/service/wrapper.service.ts +700 -493
  175. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  176. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  177. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  178. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  179. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  180. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  181. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  182. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  183. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  184. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  185. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  186. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  187. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  188. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  189. package/src/module/layout/controller/layout.controller.ts +47 -47
  190. package/src/module/layout/entity/header-items.entity.ts +28 -28
  191. package/src/module/layout/entity/header-section.entity.ts +19 -19
  192. package/src/module/layout/layout.module.ts +21 -21
  193. package/src/module/layout/repository/header-items.repository.ts +18 -18
  194. package/src/module/layout/repository/header-section.repository.ts +22 -22
  195. package/src/module/layout/service/header-section.service.ts +25 -25
  196. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  197. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  198. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  199. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  200. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  201. package/src/module/lead/controller/lead.controller.ts +30 -30
  202. package/src/module/lead/lead.module.ts +14 -14
  203. package/src/module/lead/repository/lead.repository.ts +41 -41
  204. package/src/module/lead/service/lead.service.ts +54 -54
  205. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  206. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  207. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  208. package/src/module/listmaster/listmaster.module.ts +46 -46
  209. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  210. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  211. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  212. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  213. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  214. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  215. package/src/module/listmaster/service/list-master.service.ts +535 -535
  216. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  217. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  218. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  219. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  220. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  221. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  222. package/src/module/mapper/mapper.module.ts +34 -34
  223. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  224. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  225. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  226. package/src/module/mapper/service/field-mapper.service.ts +271 -266
  227. package/src/module/mapper/service/mapper.service.ts +79 -79
  228. package/src/module/master/controller/master.controller.ts +74 -74
  229. package/src/module/master/service/master.service.ts +483 -483
  230. package/src/module/meta/controller/app-master.controller.ts +38 -38
  231. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  232. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  233. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  234. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  235. package/src/module/meta/controller/entity.controller.ts +392 -392
  236. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  237. package/src/module/meta/controller/media.controller.ts +107 -107
  238. package/src/module/meta/controller/meta.controller.ts +96 -96
  239. package/src/module/meta/controller/view-master.controller.ts +86 -86
  240. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  241. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  242. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  243. package/src/module/meta/entity/app-master.entity.ts +34 -34
  244. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  245. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  246. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  247. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  248. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  249. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  250. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  251. package/src/module/meta/entity/media-data.entity.ts +32 -32
  252. package/src/module/meta/entity/preference.entity.ts +62 -62
  253. package/src/module/meta/entity/view-master.entity.ts +41 -41
  254. package/src/module/meta/entity.module.ts +158 -158
  255. package/src/module/meta/repository/app-master.repository.ts +20 -20
  256. package/src/module/meta/repository/attribute-master.repository.ts +118 -118
  257. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  258. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  259. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  260. package/src/module/meta/repository/media-data.repository.ts +50 -50
  261. package/src/module/meta/repository/preference.repository.ts +20 -20
  262. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  263. package/src/module/meta/repository/view-master.repository.ts +42 -42
  264. package/src/module/meta/service/app-master.service.ts +37 -37
  265. package/src/module/meta/service/attribute-master.service.ts +126 -126
  266. package/src/module/meta/service/common.service.ts +9 -9
  267. package/src/module/meta/service/entity-dynamic.service.ts +819 -819
  268. package/src/module/meta/service/entity-list.service.ts +205 -205
  269. package/src/module/meta/service/entity-master.service.ts +169 -169
  270. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  271. package/src/module/meta/service/entity-relation.service.ts +69 -69
  272. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  273. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  274. package/src/module/meta/service/entity-table.service.ts +150 -150
  275. package/src/module/meta/service/entity-validation.service.ts +187 -187
  276. package/src/module/meta/service/entity.service.ts +67 -67
  277. package/src/module/meta/service/field-group.service.ts +103 -103
  278. package/src/module/meta/service/media-data.service.ts +507 -507
  279. package/src/module/meta/service/populate-meta.service.ts +193 -193
  280. package/src/module/meta/service/preference.service.ts +16 -16
  281. package/src/module/meta/service/resolver.service.ts +267 -267
  282. package/src/module/meta/service/section-master.service.ts +104 -104
  283. package/src/module/meta/service/update-form-json.service.ts +22 -22
  284. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  285. package/src/module/meta/service/view-master.service.ts +127 -127
  286. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  287. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  288. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  289. package/src/module/module/controller/menu.controller.ts +15 -15
  290. package/src/module/module/controller/module-access.controller.ts +134 -134
  291. package/src/module/module/entity/menu.entity.ts +43 -43
  292. package/src/module/module/entity/module-access.entity.ts +25 -25
  293. package/src/module/module/entity/module-action.entity.ts +17 -17
  294. package/src/module/module/entity/module.entity.ts +52 -52
  295. package/src/module/module/module.module.ts +42 -42
  296. package/src/module/module/repository/menu.repository.ts +184 -184
  297. package/src/module/module/repository/module-access.repository.ts +344 -344
  298. package/src/module/module/service/menu.service.ts +82 -82
  299. package/src/module/module/service/module-access.service.ts +209 -209
  300. package/src/module/notification/controller/notification.controller.ts +58 -58
  301. package/src/module/notification/controller/otp.controller.ts +117 -117
  302. package/src/module/notification/entity/notification.entity.ts +26 -26
  303. package/src/module/notification/entity/otp.entity.ts +28 -28
  304. package/src/module/notification/firebase-admin.config.ts +22 -22
  305. package/src/module/notification/notification.module.ts +69 -69
  306. package/src/module/notification/repository/otp.repository.ts +27 -27
  307. package/src/module/notification/service/email.service.ts +127 -127
  308. package/src/module/notification/service/notification.service.ts +163 -163
  309. package/src/module/notification/service/otp.service.ts +132 -132
  310. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  311. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  312. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  313. package/src/module/third-party-module/third-party.module.ts +12 -12
  314. package/src/module/user/controller/login.controller.ts +197 -197
  315. package/src/module/user/controller/user.controller.ts +40 -40
  316. package/src/module/user/dto/create-user.dto.ts +62 -62
  317. package/src/module/user/dto/update-user.dto.ts +4 -4
  318. package/src/module/user/entity/role.entity.ts +33 -33
  319. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  320. package/src/module/user/entity/user-session.entity.ts +73 -73
  321. package/src/module/user/entity/user.entity.ts +59 -59
  322. package/src/module/user/repository/role.repository.ts +96 -96
  323. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  324. package/src/module/user/repository/user.repository.ts +50 -50
  325. package/src/module/user/repository/userSession.repository.ts +33 -33
  326. package/src/module/user/service/login.service.ts +304 -304
  327. package/src/module/user/service/role.service.ts +189 -189
  328. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  329. package/src/module/user/service/user-session.service.ts +168 -168
  330. package/src/module/user/service/user.service.ts +365 -365
  331. package/src/module/user/user.module.ts +65 -65
  332. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  333. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  334. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  335. package/src/module/workflow/controller/action.controller.ts +111 -111
  336. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  337. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  338. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  339. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  340. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  341. package/src/module/workflow/controller/stage.controller.ts +50 -50
  342. package/src/module/workflow/controller/task.controller.ts +77 -77
  343. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  344. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  345. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  346. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  347. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  348. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  349. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  350. package/src/module/workflow/entity/action.entity.ts +50 -50
  351. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  352. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  353. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  354. package/src/module/workflow/entity/form.entity.ts +25 -25
  355. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  356. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  357. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  358. package/src/module/workflow/entity/stage.entity.ts +20 -20
  359. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  360. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  361. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  362. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  363. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  364. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  365. package/src/module/workflow/repository/action-data.repository.ts +333 -333
  366. package/src/module/workflow/repository/action.repository.ts +323 -323
  367. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  368. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  369. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  370. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  371. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  372. package/src/module/workflow/repository/stage.repository.ts +172 -172
  373. package/src/module/workflow/repository/task.repository.ts +134 -127
  374. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  375. package/src/module/workflow/service/action-category.service.ts +33 -33
  376. package/src/module/workflow/service/action-data.service.ts +62 -62
  377. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  378. package/src/module/workflow/service/action-template-mapping.service.ts +106 -106
  379. package/src/module/workflow/service/action.service.ts +279 -279
  380. package/src/module/workflow/service/activity-log.service.ts +107 -107
  381. package/src/module/workflow/service/comm-template.service.ts +180 -180
  382. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  383. package/src/module/workflow/service/form-master.service.ts +35 -35
  384. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  385. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  386. package/src/module/workflow/service/stage-group.service.ts +319 -319
  387. package/src/module/workflow/service/stage.service.ts +199 -199
  388. package/src/module/workflow/service/task.service.ts +547 -560
  389. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  390. package/src/module/workflow/service/workflow-meta.service.ts +654 -640
  391. package/src/module/workflow/service/workflow.service.ts +205 -205
  392. package/src/module/workflow/workflow.module.ts +176 -176
  393. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  394. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  395. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  396. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  397. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  398. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  399. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  400. package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -347
  401. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  402. package/src/resources/dev.properties.yaml +30 -31
  403. package/src/resources/local.properties.yaml +27 -27
  404. package/src/resources/properties.module.ts +12 -12
  405. package/src/resources/properties.yaml.ts +11 -11
  406. package/src/resources/uat.properties.yaml +31 -31
  407. package/src/table.config.ts +126 -126
  408. package/src/utils/dto/excel-data.dto.ts +14 -14
  409. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  410. package/src/utils/service/base64util.service.ts +18 -18
  411. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  412. package/src/utils/service/codeGenerator.service.ts +22 -22
  413. package/src/utils/service/dateUtil.service.ts +17 -17
  414. package/src/utils/service/encryptUtil.service.ts +97 -97
  415. package/src/utils/service/excel-helper.service.ts +72 -72
  416. package/src/utils/service/excelUtil.service.ts +15 -15
  417. package/src/utils/service/file-util.service.ts +11 -11
  418. package/src/utils/service/json-util.service.ts +23 -23
  419. package/src/utils/service/loggingUtil.service.ts +88 -34
  420. package/src/utils/service/reflection-helper.service.ts +62 -62
  421. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  422. package/src/utils/utils.module.ts +27 -25
  423. package/tsconfig.build.json +4 -4
  424. package/tsconfig.json +24 -24
  425. package/.claude/settings.local.json +0 -26
  426. package/.idea/250218_nodejs_core.iml +0 -9
  427. package/.idea/codeStyles/Project.xml +0 -59
  428. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  429. package/.idea/copilot.data.migration.agent.xml +0 -6
  430. package/.idea/copilot.data.migration.ask.xml +0 -6
  431. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  432. package/.idea/copilot.data.migration.edit.xml +0 -6
  433. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  434. package/.idea/misc.xml +0 -6
  435. package/.idea/modules.xml +0 -8
  436. package/.idea/prettier.xml +0 -6
  437. package/.idea/vcs.xml +0 -6
  438. package/server.log +0 -850
@@ -1,365 +1,365 @@
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
- return {
333
- success: false,
334
- message: 'Organization not found.',
335
- };
336
- }
337
- }
338
-
339
- // 🔹 Step 2: Find the user by email + organization check
340
- const user = await this.userRepository.findByEmailId(email_id);
341
-
342
- if (!user || (organization && user.organization_id !== organization.id)) {
343
- // throw new BadRequestException('User not found in organization.');
344
- return {
345
- success: false,
346
- message: 'User not found in organization.',
347
- };
348
- }
349
-
350
- if (user) {
351
- return {
352
- success: true,
353
- message:
354
- 'An account already exists for this email address. Login or use a different email address to sign up.',
355
- userId: user.id,
356
- };
357
- } else {
358
- // throw new ForbiddenException('No account found with this email address.');
359
- return {
360
- success: false,
361
- message: 'No account found with this email address.',
362
- };
363
- }
364
- }
365
- }
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
+ return {
333
+ success: false,
334
+ message: 'Organization not found.',
335
+ };
336
+ }
337
+ }
338
+
339
+ // 🔹 Step 2: Find the user by email + organization check
340
+ const user = await this.userRepository.findByEmailId(email_id);
341
+
342
+ if (!user || (organization && user.organization_id !== organization.id)) {
343
+ // throw new BadRequestException('User not found in organization.');
344
+ return {
345
+ success: false,
346
+ message: 'User not found in organization.',
347
+ };
348
+ }
349
+
350
+ if (user) {
351
+ return {
352
+ success: true,
353
+ message:
354
+ 'An account already exists for this email address. Login or use a different email address to sign up.',
355
+ userId: user.id,
356
+ };
357
+ } else {
358
+ // throw new ForbiddenException('No account found with this email address.');
359
+ return {
360
+ success: false,
361
+ message: 'No account found with this email address.',
362
+ };
363
+ }
364
+ }
365
+ }