rez_core 4.0.123 → 4.0.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/.claude/settings.local.json +26 -0
  2. package/.idea/250218_nodejs_core.iml +9 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/copilot.data.migration.agent.xml +6 -0
  6. package/.idea/copilot.data.migration.ask.xml +6 -0
  7. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  8. package/.idea/copilot.data.migration.edit.xml +6 -0
  9. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.prettierrc +3 -3
  15. package/README.md +99 -99
  16. package/dist/config/config.module.js +2 -2
  17. package/dist/config/config.module.js.map +1 -1
  18. package/dist/config/database.config.d.ts +1 -1
  19. package/dist/config/database.config.js +15 -12
  20. package/dist/config/database.config.js.map +1 -1
  21. package/dist/module/auth/guards/role.guard.js +3 -3
  22. package/dist/module/auth/services/auth.service.js +2 -2
  23. package/dist/module/enterprise/entity/organization.entity.js +1 -1
  24. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  25. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  26. package/dist/module/filter/service/filter.service.js +22 -22
  27. package/dist/module/integration/entity/integration-config.entity.js +3 -3
  28. package/dist/module/integration/entity/integration-config.entity.js.map +1 -1
  29. package/dist/module/integration/entity/user-integration.entity.js +3 -3
  30. package/dist/module/integration/entity/user-integration.entity.js.map +1 -1
  31. package/dist/module/integration/examples/usage.example.js +9 -9
  32. package/dist/module/integration/service/integration.service.js +1 -1
  33. package/dist/module/integration/service/wrapper.service.js +25 -25
  34. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  35. package/dist/module/mapper/entity/field-mapper.entity.js +1 -1
  36. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  37. package/dist/module/mapper/service/field-mapper.service.js +4 -4
  38. package/dist/module/mapper/service/mapper.service.js +2 -2
  39. package/dist/module/meta/entity/entity-master.entity.js +1 -1
  40. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  41. package/dist/module/meta/service/attribute-master.service.js +1 -1
  42. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  43. package/dist/module/meta/service/entity-dynamic.service.js +9 -9
  44. package/dist/module/meta/service/entity-list.service.js +3 -3
  45. package/dist/module/meta/service/entity-master.service.js +3 -3
  46. package/dist/module/meta/service/entity-relation.service.js +11 -11
  47. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  48. package/dist/module/meta/service/resolver.service.js +3 -3
  49. package/dist/module/module/repository/menu.repository.js +12 -12
  50. package/dist/module/notification/service/notification.service.js +9 -9
  51. package/dist/module/user/controller/login.controller.js +18 -18
  52. package/dist/module/user/service/role.service.js +4 -4
  53. package/dist/module/user/service/user-session.service.js +2 -2
  54. package/dist/module/workflow/entity/comm-template.entity.js +1 -1
  55. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  56. package/dist/module/workflow/repository/action.repository.js +20 -20
  57. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  58. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  59. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  60. package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
  61. package/dist/module/workflow/repository/stage.repository.js +8 -8
  62. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  63. package/dist/module/workflow/service/action.service.js +7 -7
  64. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  65. package/dist/module/workflow/service/stage-group.service.js +2 -2
  66. package/dist/module/workflow/service/stage.service.js +2 -2
  67. package/dist/module/workflow/service/task.service.js +28 -28
  68. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  69. package/dist/module/workflow/service/workflow-meta.service.js +38 -50
  70. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  71. package/dist/module/workflow/service/workflow.service.js +2 -2
  72. package/dist/tsconfig.build.tsbuildinfo +1 -1
  73. package/dist/utils/service/reflection-helper.service.js +2 -2
  74. package/docs/modules/event-driven-integration-design.md +91 -91
  75. package/docs/modules/integration.md +250 -250
  76. package/eslint.config.mjs +34 -34
  77. package/nest-cli.json +14 -14
  78. package/package.json +120 -119
  79. package/server.log +850 -0
  80. package/src/app.controller.ts +12 -12
  81. package/src/app.module.ts +52 -52
  82. package/src/app.service.ts +8 -8
  83. package/src/config/config.module.ts +17 -18
  84. package/src/config/database.config.ts +47 -23
  85. package/src/constant/global.constant.ts +67 -67
  86. package/src/core.module.ts +81 -81
  87. package/src/decorators/roles.decorator.ts +7 -7
  88. package/src/dtos/response.dto.ts +6 -6
  89. package/src/dtos/response.ts +5 -5
  90. package/src/index.ts +1 -1
  91. package/src/module/auth/auth.module.ts +49 -49
  92. package/src/module/auth/controller/auth.controller.ts +28 -28
  93. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  94. package/src/module/auth/guards/jwt.guard.ts +22 -22
  95. package/src/module/auth/guards/role.guard.ts +68 -68
  96. package/src/module/auth/services/auth.service.ts +50 -50
  97. package/src/module/auth/services/jwt.service.ts +11 -11
  98. package/src/module/auth/strategies/google.strategy.ts +54 -54
  99. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  100. package/src/module/auth/strategies/local.strategy.ts +13 -13
  101. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  102. package/src/module/dashboard/dashboard.module.ts +21 -21
  103. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  104. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  105. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  106. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  107. package/src/module/dev/dev.module.ts +12 -12
  108. package/src/module/dev/service/dev.service.ts +7 -7
  109. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  110. package/src/module/enterprise/enterprise.module.ts +30 -30
  111. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  112. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  113. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  114. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  115. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  116. package/src/module/enterprise/repository/school.repository.ts +278 -278
  117. package/src/module/enterprise/service/brand.service.ts +5 -5
  118. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  119. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  120. package/src/module/enterprise/service/organization.service.ts +145 -145
  121. package/src/module/filter/controller/filter.controller.ts +84 -84
  122. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  123. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  124. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  125. package/src/module/filter/filter.module.ts +31 -31
  126. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  127. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  128. package/src/module/filter/service/filter.service.ts +1005 -1005
  129. package/src/module/filter/service/saved-filter.service.ts +170 -170
  130. package/src/module/ics/controller/ics.controller.ts +21 -21
  131. package/src/module/ics/dto/ics.dto.ts +55 -55
  132. package/src/module/ics/ics.module.ts +13 -13
  133. package/src/module/ics/service/ics.service.ts +57 -57
  134. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  135. package/src/module/integration/controller/integration.controller.ts +662 -662
  136. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  137. package/src/module/integration/dto/create-config.dto.ts +526 -526
  138. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  139. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  140. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  141. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  142. package/src/module/integration/examples/usage.example.ts +338 -338
  143. package/src/module/integration/factories/base.factory.ts +7 -7
  144. package/src/module/integration/factories/email.factory.ts +49 -49
  145. package/src/module/integration/factories/integration.factory.ts +121 -121
  146. package/src/module/integration/factories/sms.factory.ts +51 -51
  147. package/src/module/integration/factories/telephone.factory.ts +41 -41
  148. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  149. package/src/module/integration/integration.module.ts +110 -110
  150. package/src/module/integration/service/calendar-event.service.ts +118 -118
  151. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  152. package/src/module/integration/service/integration-queue.service.ts +229 -229
  153. package/src/module/integration/service/integration.service.ts +2633 -2633
  154. package/src/module/integration/service/oauth.service.ts +224 -224
  155. package/src/module/integration/service/wrapper.service.ts +493 -493
  156. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  157. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  158. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  159. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  160. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  161. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  162. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  163. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  164. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  165. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  166. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  167. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  168. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  169. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  170. package/src/module/layout/controller/layout.controller.ts +47 -47
  171. package/src/module/layout/entity/header-items.entity.ts +28 -28
  172. package/src/module/layout/entity/header-section.entity.ts +19 -19
  173. package/src/module/layout/layout.module.ts +21 -21
  174. package/src/module/layout/repository/header-items.repository.ts +18 -18
  175. package/src/module/layout/repository/header-section.repository.ts +22 -22
  176. package/src/module/layout/service/header-section.service.ts +25 -25
  177. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  178. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  179. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  180. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  181. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  182. package/src/module/lead/controller/lead.controller.ts +30 -30
  183. package/src/module/lead/lead.module.ts +14 -14
  184. package/src/module/lead/repository/lead.repository.ts +41 -41
  185. package/src/module/lead/service/lead.service.ts +54 -54
  186. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  187. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  188. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  189. package/src/module/listmaster/listmaster.module.ts +46 -46
  190. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  191. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  192. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  193. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  194. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  195. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  196. package/src/module/listmaster/service/list-master.service.ts +535 -535
  197. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  198. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  199. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  200. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  201. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  202. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  203. package/src/module/mapper/mapper.module.ts +34 -34
  204. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  205. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  206. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  207. package/src/module/mapper/service/field-mapper.service.ts +266 -266
  208. package/src/module/mapper/service/mapper.service.ts +79 -79
  209. package/src/module/master/controller/master.controller.ts +74 -74
  210. package/src/module/master/service/master.service.ts +483 -483
  211. package/src/module/meta/controller/app-master.controller.ts +38 -38
  212. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  213. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  214. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  215. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  216. package/src/module/meta/controller/entity.controller.ts +392 -392
  217. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  218. package/src/module/meta/controller/media.controller.ts +107 -107
  219. package/src/module/meta/controller/meta.controller.ts +96 -96
  220. package/src/module/meta/controller/view-master.controller.ts +86 -86
  221. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  222. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  223. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  224. package/src/module/meta/entity/app-master.entity.ts +34 -34
  225. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  226. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  227. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  228. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  229. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  230. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  231. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  232. package/src/module/meta/entity/media-data.entity.ts +32 -32
  233. package/src/module/meta/entity/preference.entity.ts +62 -62
  234. package/src/module/meta/entity/view-master.entity.ts +41 -41
  235. package/src/module/meta/entity.module.ts +158 -158
  236. package/src/module/meta/repository/app-master.repository.ts +20 -20
  237. package/src/module/meta/repository/attribute-master.repository.ts +118 -118
  238. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  239. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  240. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  241. package/src/module/meta/repository/media-data.repository.ts +50 -50
  242. package/src/module/meta/repository/preference.repository.ts +20 -20
  243. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  244. package/src/module/meta/repository/view-master.repository.ts +42 -42
  245. package/src/module/meta/service/app-master.service.ts +37 -37
  246. package/src/module/meta/service/attribute-master.service.ts +126 -126
  247. package/src/module/meta/service/common.service.ts +9 -9
  248. package/src/module/meta/service/entity-dynamic.service.ts +819 -819
  249. package/src/module/meta/service/entity-list.service.ts +205 -205
  250. package/src/module/meta/service/entity-master.service.ts +169 -169
  251. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  252. package/src/module/meta/service/entity-relation.service.ts +69 -69
  253. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  254. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  255. package/src/module/meta/service/entity-table.service.ts +150 -150
  256. package/src/module/meta/service/entity-validation.service.ts +187 -187
  257. package/src/module/meta/service/entity.service.ts +67 -67
  258. package/src/module/meta/service/field-group.service.ts +103 -103
  259. package/src/module/meta/service/media-data.service.ts +507 -507
  260. package/src/module/meta/service/populate-meta.service.ts +193 -193
  261. package/src/module/meta/service/preference.service.ts +16 -16
  262. package/src/module/meta/service/resolver.service.ts +267 -267
  263. package/src/module/meta/service/section-master.service.ts +104 -104
  264. package/src/module/meta/service/update-form-json.service.ts +22 -22
  265. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  266. package/src/module/meta/service/view-master.service.ts +127 -127
  267. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  268. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  269. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  270. package/src/module/module/controller/menu.controller.ts +15 -15
  271. package/src/module/module/controller/module-access.controller.ts +134 -134
  272. package/src/module/module/entity/menu.entity.ts +43 -43
  273. package/src/module/module/entity/module-access.entity.ts +25 -25
  274. package/src/module/module/entity/module-action.entity.ts +17 -17
  275. package/src/module/module/entity/module.entity.ts +52 -52
  276. package/src/module/module/module.module.ts +42 -42
  277. package/src/module/module/repository/menu.repository.ts +184 -184
  278. package/src/module/module/repository/module-access.repository.ts +344 -344
  279. package/src/module/module/service/menu.service.ts +82 -82
  280. package/src/module/module/service/module-access.service.ts +209 -209
  281. package/src/module/notification/controller/notification.controller.ts +58 -58
  282. package/src/module/notification/controller/otp.controller.ts +117 -117
  283. package/src/module/notification/entity/notification.entity.ts +26 -26
  284. package/src/module/notification/entity/otp.entity.ts +28 -28
  285. package/src/module/notification/firebase-admin.config.ts +22 -22
  286. package/src/module/notification/notification.module.ts +69 -69
  287. package/src/module/notification/repository/otp.repository.ts +27 -27
  288. package/src/module/notification/service/email.service.ts +127 -127
  289. package/src/module/notification/service/notification.service.ts +163 -163
  290. package/src/module/notification/service/otp.service.ts +132 -132
  291. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  292. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  293. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  294. package/src/module/third-party-module/third-party.module.ts +12 -12
  295. package/src/module/user/controller/login.controller.ts +197 -197
  296. package/src/module/user/controller/user.controller.ts +40 -40
  297. package/src/module/user/dto/create-user.dto.ts +62 -62
  298. package/src/module/user/dto/update-user.dto.ts +4 -4
  299. package/src/module/user/entity/role.entity.ts +33 -33
  300. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  301. package/src/module/user/entity/user-session.entity.ts +73 -73
  302. package/src/module/user/entity/user.entity.ts +59 -59
  303. package/src/module/user/repository/role.repository.ts +96 -96
  304. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  305. package/src/module/user/repository/user.repository.ts +50 -50
  306. package/src/module/user/repository/userSession.repository.ts +33 -33
  307. package/src/module/user/service/login.service.ts +304 -304
  308. package/src/module/user/service/role.service.ts +189 -189
  309. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  310. package/src/module/user/service/user-session.service.ts +168 -168
  311. package/src/module/user/service/user.service.ts +365 -365
  312. package/src/module/user/user.module.ts +65 -65
  313. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  314. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  315. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  316. package/src/module/workflow/controller/action.controller.ts +111 -111
  317. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  318. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  319. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  320. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  321. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  322. package/src/module/workflow/controller/stage.controller.ts +50 -50
  323. package/src/module/workflow/controller/task.controller.ts +77 -77
  324. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  325. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  326. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  327. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  328. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  329. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  330. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  331. package/src/module/workflow/entity/action.entity.ts +50 -50
  332. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  333. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  334. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  335. package/src/module/workflow/entity/form.entity.ts +25 -25
  336. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  337. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  338. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  339. package/src/module/workflow/entity/stage.entity.ts +20 -20
  340. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  341. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  342. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  343. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  344. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  345. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  346. package/src/module/workflow/repository/action-data.repository.ts +333 -333
  347. package/src/module/workflow/repository/action.repository.ts +323 -323
  348. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  349. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  350. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  351. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  352. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  353. package/src/module/workflow/repository/stage.repository.ts +172 -172
  354. package/src/module/workflow/repository/task.repository.ts +127 -127
  355. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  356. package/src/module/workflow/service/action-category.service.ts +33 -33
  357. package/src/module/workflow/service/action-data.service.ts +62 -62
  358. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  359. package/src/module/workflow/service/action-template-mapping.service.ts +106 -106
  360. package/src/module/workflow/service/action.service.ts +279 -279
  361. package/src/module/workflow/service/activity-log.service.ts +107 -107
  362. package/src/module/workflow/service/comm-template.service.ts +180 -180
  363. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  364. package/src/module/workflow/service/form-master.service.ts +35 -35
  365. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  366. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  367. package/src/module/workflow/service/stage-group.service.ts +319 -319
  368. package/src/module/workflow/service/stage.service.ts +199 -199
  369. package/src/module/workflow/service/task.service.ts +560 -560
  370. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  371. package/src/module/workflow/service/workflow-meta.service.ts +640 -654
  372. package/src/module/workflow/service/workflow.service.ts +205 -205
  373. package/src/module/workflow/workflow.module.ts +176 -176
  374. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +21 -21
  375. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  376. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  377. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  378. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  379. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  380. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  381. package/src/module/workflow-automation/service/workflow-automation.service.ts +347 -347
  382. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  383. package/src/resources/dev.properties.yaml +31 -30
  384. package/src/resources/local.properties.yaml +27 -27
  385. package/src/resources/properties.module.ts +12 -12
  386. package/src/resources/properties.yaml.ts +11 -11
  387. package/src/resources/uat.properties.yaml +31 -31
  388. package/src/table.config.ts +126 -126
  389. package/src/utils/dto/excel-data.dto.ts +14 -14
  390. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  391. package/src/utils/service/base64util.service.ts +18 -18
  392. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  393. package/src/utils/service/codeGenerator.service.ts +22 -22
  394. package/src/utils/service/dateUtil.service.ts +17 -17
  395. package/src/utils/service/encryptUtil.service.ts +97 -97
  396. package/src/utils/service/excel-helper.service.ts +72 -72
  397. package/src/utils/service/excelUtil.service.ts +15 -15
  398. package/src/utils/service/file-util.service.ts +11 -11
  399. package/src/utils/service/json-util.service.ts +23 -23
  400. package/src/utils/service/loggingUtil.service.ts +34 -34
  401. package/src/utils/service/reflection-helper.service.ts +62 -62
  402. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  403. package/src/utils/utils.module.ts +25 -25
  404. package/tsconfig.build.json +4 -4
  405. package/tsconfig.json +24 -24
  406. package/.vscode/extensions.json +0 -5
@@ -1,344 +1,344 @@
1
- import { BadRequestException, Injectable } from '@nestjs/common';
2
- import { InjectRepository } from '@nestjs/typeorm';
3
- import { In, Not, Repository, IsNull, DataSource } from 'typeorm';
4
- import { Role } from 'src/module/user/entity/role.entity';
5
- import { ModuleAccess } from '../entity/module-access.entity';
6
- import { ModuleAction } from '../entity/module-action.entity';
7
- import { ModuleData } from '../entity/module.entity';
8
-
9
- @Injectable()
10
- export class ModuleAccessRepository {
11
- constructor(
12
- @InjectRepository(Role)
13
- private readonly roleRepo: Repository<Role>,
14
-
15
- @InjectRepository(ModuleData)
16
- private readonly moduleRepo: Repository<ModuleData>,
17
-
18
- @InjectRepository(ModuleAccess)
19
- private readonly moduleAccessRepo: Repository<ModuleAccess>,
20
-
21
- @InjectRepository(ModuleAction)
22
- private readonly moduleActionRepo: Repository<ModuleAction>,
23
-
24
- private readonly dataSource: DataSource,
25
- ) {}
26
-
27
- async getRoles({
28
- appcode,
29
- level_type,
30
- level_id,
31
- }: {
32
- appcode: string;
33
- level_type?: string;
34
- level_id?: number;
35
- }) {
36
- const query = this.dataSource
37
- .createQueryBuilder()
38
- .select('*')
39
- .from('sso_role', 'role')
40
- .where('role.appcode = :appcode', { appcode })
41
- .andWhere('(role.is_factory IS NULL OR role.is_factory != 1)');
42
-
43
- if (level_type) {
44
- query.andWhere('role.level_type = :level_type', { level_type });
45
- }
46
-
47
- if (level_id !== undefined) {
48
- query.andWhere('role.level_id = :level_id', {
49
- level_id: String(level_id),
50
- });
51
- }
52
-
53
- const roles = await query.getRawMany(); // use getRawMany since you're selecting from a raw table
54
-
55
- return roles.map((role) => ({
56
- label: role.name,
57
- value: role.id,
58
- }));
59
- }
60
-
61
- async getModules({
62
- appcode,
63
- loggedInUser,
64
- }: {
65
- appcode: string;
66
- loggedInUser: any;
67
- }) {
68
- let modules: any[];
69
- if (loggedInUser.level_type == 'SCH') {
70
- modules = await this.moduleRepo.find({
71
- where: { module_level: 'MAINMOD', appcode, level_type: 'SCH' },
72
- });
73
- } else {
74
- modules = await this.moduleRepo.find({
75
- where: { module_level: 'MAINMOD', appcode },
76
- });
77
- }
78
-
79
- return modules
80
- .map((mod) => ({
81
- label: mod.name,
82
- value: mod.id,
83
- group: mod.level_type,
84
- }))
85
- .sort((a, b) => a.group.localeCompare(b.group));
86
- }
87
-
88
- async getAccessListing(
89
- roleIds: (number | string)[],
90
- appcode: string,
91
- levelType: string,
92
- levelId?: number, // add levelId as input so we can fetch roles based on it
93
- ) {
94
- let roles;
95
-
96
- if (roleIds.length === 1 && roleIds[0] === -1) {
97
- // Internally call getRoles
98
- const fetchedRoles = await this.getRoles({
99
- appcode,
100
- level_type: levelType,
101
- level_id: levelId,
102
- });
103
-
104
- const fetchedRoleIds = fetchedRoles.map((r) => r.value);
105
- roles = await this.roleRepo.find({
106
- where: {
107
- id: In(fetchedRoleIds),
108
- appcode,
109
- },
110
- });
111
- } else {
112
- roles = await this.roleRepo.find({
113
- where: {
114
- id: In(roleIds.map((id) => Number(id))),
115
- appcode,
116
- },
117
- });
118
- }
119
-
120
- if (!roles.length) return [];
121
-
122
- const roleCodes = roles.map((role) => role.code);
123
-
124
- const moduleAccesses = await this.moduleAccessRepo.find({
125
- where: {
126
- role_code: In(roleCodes),
127
- appcode,
128
- },
129
- });
130
-
131
- return roles.map((role) => ({
132
- role_code: role.code,
133
- name: role.name,
134
- permission: moduleAccesses
135
- .filter((access) => access.role_code === role.code)
136
- .map((access) => ({
137
- action: access.action_type,
138
- access: access.access_flag,
139
- code: access.module_code,
140
- level_type: access.level_type,
141
- appcode: access.appcode,
142
- })),
143
- }));
144
- }
145
-
146
- async getAllModulesByLevel(mainModIds: string[], appcode: string, levelType) {
147
- const mainModules =
148
- mainModIds.length === 1 && mainModIds[0] === '-1'
149
- ? await this.moduleRepo.find({
150
- where: { module_level: 'MAINMOD', appcode },
151
- })
152
- : await this.moduleRepo.find({
153
- where: { id: In(mainModIds), module_level: 'MAINMOD', appcode },
154
- });
155
-
156
- if (!mainModules.length) return {};
157
-
158
- const wbsCodes = mainModules.map((mod) => mod.wbs_code);
159
-
160
- let allModules = await this.moduleRepo
161
- .createQueryBuilder('module')
162
- .where(
163
- wbsCodes
164
- .map((code) => `module.wbs_code LIKE :code${code}`)
165
- .join(' OR '),
166
- Object.fromEntries(wbsCodes.map((code) => [`code${code}`, `${code}%`])),
167
- )
168
- .andWhere('module.appcode = :appcode', { appcode })
169
- .andWhere('module.module_code != :excludedCode', {
170
- excludedCode: 'all_organization_adm_org',
171
- })
172
- .getMany();
173
-
174
- allModules = allModules.filter(
175
- (mod) => mod.module_code != 'all_organization_adm_org',
176
- );
177
-
178
- const moduleCodes = allModules.map((m) => m.module_code);
179
-
180
- const allActions = await this.moduleActionRepo.find({
181
- where: { module_code: In(moduleCodes) },
182
- });
183
-
184
- // Map actions by module_code with VIEW action first
185
- const actionMap = allActions.reduce(
186
- (acc, action) => {
187
- if (!acc[action.module_code]) acc[action.module_code] = [];
188
-
189
- const actionItem = {
190
- action: action.action_type,
191
- name: action.action_name,
192
- };
193
-
194
- if (action.action_type === 'VIEW') {
195
- acc[action.module_code].unshift(actionItem); // ➕ Add VIEW at start
196
- } else {
197
- acc[action.module_code].push(actionItem); // ➕ Add others at end
198
- }
199
-
200
- return acc;
201
- },
202
- {} as Record<string, { action: string; name: string }[]>,
203
- );
204
-
205
- const levelsToReturn = levelType === 'ORG' ? ['ORG', 'SCH'] : ['SCH'];
206
-
207
- const groupedByLevel: Record<string, any[]> = {};
208
-
209
- for (const lvl of levelsToReturn) {
210
- const filteredModules = allModules.filter((m) => m.level_type === lvl);
211
-
212
- const buildHierarchy = (parentWbs: string): any[] =>
213
- filteredModules
214
- .filter(
215
- (mod) =>
216
- mod.wbs_code.startsWith(`${parentWbs}.`) &&
217
- mod.wbs_code.split('.').length ===
218
- parentWbs.split('.').length + 1,
219
- )
220
- .map((mod) => ({
221
- name: mod.name,
222
- code: mod.module_code,
223
- permission: actionMap[mod.module_code] || [],
224
- submod: buildHierarchy(mod.wbs_code),
225
- }));
226
-
227
- const levelModules = mainModules
228
- .filter((mod) => mod.level_type === lvl)
229
- .map((mod) => ({
230
- name: mod.name,
231
- code: mod.module_code,
232
- permission: actionMap[mod.module_code] || [],
233
- submod: buildHierarchy(mod.wbs_code),
234
- }));
235
-
236
- if (levelModules.length) {
237
- groupedByLevel[lvl] = levelModules;
238
- }
239
- }
240
- return groupedByLevel;
241
- }
242
-
243
- async updateModuleAccess(
244
- accessList: {
245
- role_code: string;
246
- module_code: string;
247
- action_type: string;
248
- access_flag: number;
249
- appcode: string;
250
- level_type: string;
251
- }[],
252
- ): Promise<boolean> {
253
- try {
254
- for (const access of accessList) {
255
- const existing = await this.moduleAccessRepo.findOne({
256
- where: {
257
- role_code: access.role_code,
258
- module_code: access.module_code,
259
- action_type: access.action_type,
260
- appcode: access.appcode,
261
- level_type: access.level_type,
262
- },
263
- });
264
-
265
- if (existing) {
266
- existing.access_flag = access.access_flag;
267
- await this.moduleAccessRepo.save(existing);
268
- } else {
269
- await this.moduleAccessRepo.save(
270
- await this.moduleAccessRepo.create(access),
271
- );
272
- }
273
- }
274
- return true;
275
- } catch (error) {
276
- console.error('Error updating module access:', error);
277
- return false;
278
- }
279
- }
280
-
281
- async getModuleUIConfig(moduleCode: string, roleIds: number[]) {
282
- const module = await this.moduleRepo.findOne({
283
- where: { module_code: moduleCode },
284
- });
285
-
286
- if (!module) throw new BadRequestException('Module not found');
287
-
288
- const roles = await this.roleRepo.find({ where: { id: In(roleIds) } });
289
- const roleCodes = roles.map((role) => role.code);
290
-
291
- const actions = await this.moduleAccessRepo.find({
292
- where: {
293
- module_code: moduleCode,
294
- role_code: In(roleCodes),
295
- access_flag: 1,
296
- },
297
- });
298
-
299
- const uniqueActions = [...new Set(actions.map((a) => a.action_type))];
300
-
301
- return {
302
- entity_type: module.entity_type,
303
- title: module.title,
304
- ui_config: module.ui_config || {},
305
- action: uniqueActions,
306
- };
307
- }
308
- async getModuleAccessByRoles(roleIds: number[], appcode: string) {
309
- // Step 1: Get role codes from sso_role
310
- const roles = await this.roleRepo.find({
311
- where: {
312
- id: In(roleIds),
313
- appcode,
314
- },
315
- select: ['id', 'code'],
316
- });
317
-
318
- const roleCodes = roles.map((r) => r.code);
319
- if (!roleCodes.length) return [];
320
-
321
- // Step 2: Fetch full access data
322
- const accessRecords = await this.moduleAccessRepo
323
- .createQueryBuilder('access')
324
- .select([
325
- 'access.module_code AS module_code',
326
- 'access.action_type AS action_type',
327
- 'access.access_flag AS access_flag',
328
- 'access.level_type AS level_type',
329
- 'access.appcode AS appcode',
330
- ])
331
- .where('access.role_code IN (:...roleCodes)', { roleCodes })
332
- .andWhere('access.appcode = :appcode', { appcode })
333
- .getRawMany();
334
-
335
- // Step 3: Format output
336
- return accessRecords.map((record) => ({
337
- action: record.action_type,
338
- access: record.access_flag,
339
- code: record.module_code,
340
- level_type: record.level_type,
341
- appcode: record.appcode,
342
- }));
343
- }
344
- }
1
+ import { BadRequestException, Injectable } from '@nestjs/common';
2
+ import { InjectRepository } from '@nestjs/typeorm';
3
+ import { In, Not, Repository, IsNull, DataSource } from 'typeorm';
4
+ import { Role } from 'src/module/user/entity/role.entity';
5
+ import { ModuleAccess } from '../entity/module-access.entity';
6
+ import { ModuleAction } from '../entity/module-action.entity';
7
+ import { ModuleData } from '../entity/module.entity';
8
+
9
+ @Injectable()
10
+ export class ModuleAccessRepository {
11
+ constructor(
12
+ @InjectRepository(Role)
13
+ private readonly roleRepo: Repository<Role>,
14
+
15
+ @InjectRepository(ModuleData)
16
+ private readonly moduleRepo: Repository<ModuleData>,
17
+
18
+ @InjectRepository(ModuleAccess)
19
+ private readonly moduleAccessRepo: Repository<ModuleAccess>,
20
+
21
+ @InjectRepository(ModuleAction)
22
+ private readonly moduleActionRepo: Repository<ModuleAction>,
23
+
24
+ private readonly dataSource: DataSource,
25
+ ) {}
26
+
27
+ async getRoles({
28
+ appcode,
29
+ level_type,
30
+ level_id,
31
+ }: {
32
+ appcode: string;
33
+ level_type?: string;
34
+ level_id?: number;
35
+ }) {
36
+ const query = this.dataSource
37
+ .createQueryBuilder()
38
+ .select('*')
39
+ .from('sso_role', 'role')
40
+ .where('role.appcode = :appcode', { appcode })
41
+ .andWhere('(role.is_factory IS NULL OR role.is_factory != 1)');
42
+
43
+ if (level_type) {
44
+ query.andWhere('role.level_type = :level_type', { level_type });
45
+ }
46
+
47
+ if (level_id !== undefined) {
48
+ query.andWhere('role.level_id = :level_id', {
49
+ level_id: String(level_id),
50
+ });
51
+ }
52
+
53
+ const roles = await query.getRawMany(); // use getRawMany since you're selecting from a raw table
54
+
55
+ return roles.map((role) => ({
56
+ label: role.name,
57
+ value: role.id,
58
+ }));
59
+ }
60
+
61
+ async getModules({
62
+ appcode,
63
+ loggedInUser,
64
+ }: {
65
+ appcode: string;
66
+ loggedInUser: any;
67
+ }) {
68
+ let modules: any[];
69
+ if (loggedInUser.level_type == 'SCH') {
70
+ modules = await this.moduleRepo.find({
71
+ where: { module_level: 'MAINMOD', appcode, level_type: 'SCH' },
72
+ });
73
+ } else {
74
+ modules = await this.moduleRepo.find({
75
+ where: { module_level: 'MAINMOD', appcode },
76
+ });
77
+ }
78
+
79
+ return modules
80
+ .map((mod) => ({
81
+ label: mod.name,
82
+ value: mod.id,
83
+ group: mod.level_type,
84
+ }))
85
+ .sort((a, b) => a.group.localeCompare(b.group));
86
+ }
87
+
88
+ async getAccessListing(
89
+ roleIds: (number | string)[],
90
+ appcode: string,
91
+ levelType: string,
92
+ levelId?: number, // add levelId as input so we can fetch roles based on it
93
+ ) {
94
+ let roles;
95
+
96
+ if (roleIds.length === 1 && roleIds[0] === -1) {
97
+ // Internally call getRoles
98
+ const fetchedRoles = await this.getRoles({
99
+ appcode,
100
+ level_type: levelType,
101
+ level_id: levelId,
102
+ });
103
+
104
+ const fetchedRoleIds = fetchedRoles.map((r) => r.value);
105
+ roles = await this.roleRepo.find({
106
+ where: {
107
+ id: In(fetchedRoleIds),
108
+ appcode,
109
+ },
110
+ });
111
+ } else {
112
+ roles = await this.roleRepo.find({
113
+ where: {
114
+ id: In(roleIds.map((id) => Number(id))),
115
+ appcode,
116
+ },
117
+ });
118
+ }
119
+
120
+ if (!roles.length) return [];
121
+
122
+ const roleCodes = roles.map((role) => role.code);
123
+
124
+ const moduleAccesses = await this.moduleAccessRepo.find({
125
+ where: {
126
+ role_code: In(roleCodes),
127
+ appcode,
128
+ },
129
+ });
130
+
131
+ return roles.map((role) => ({
132
+ role_code: role.code,
133
+ name: role.name,
134
+ permission: moduleAccesses
135
+ .filter((access) => access.role_code === role.code)
136
+ .map((access) => ({
137
+ action: access.action_type,
138
+ access: access.access_flag,
139
+ code: access.module_code,
140
+ level_type: access.level_type,
141
+ appcode: access.appcode,
142
+ })),
143
+ }));
144
+ }
145
+
146
+ async getAllModulesByLevel(mainModIds: string[], appcode: string, levelType) {
147
+ const mainModules =
148
+ mainModIds.length === 1 && mainModIds[0] === '-1'
149
+ ? await this.moduleRepo.find({
150
+ where: { module_level: 'MAINMOD', appcode },
151
+ })
152
+ : await this.moduleRepo.find({
153
+ where: { id: In(mainModIds), module_level: 'MAINMOD', appcode },
154
+ });
155
+
156
+ if (!mainModules.length) return {};
157
+
158
+ const wbsCodes = mainModules.map((mod) => mod.wbs_code);
159
+
160
+ let allModules = await this.moduleRepo
161
+ .createQueryBuilder('module')
162
+ .where(
163
+ wbsCodes
164
+ .map((code) => `module.wbs_code LIKE :code${code}`)
165
+ .join(' OR '),
166
+ Object.fromEntries(wbsCodes.map((code) => [`code${code}`, `${code}%`])),
167
+ )
168
+ .andWhere('module.appcode = :appcode', { appcode })
169
+ .andWhere('module.module_code != :excludedCode', {
170
+ excludedCode: 'all_organization_adm_org',
171
+ })
172
+ .getMany();
173
+
174
+ allModules = allModules.filter(
175
+ (mod) => mod.module_code != 'all_organization_adm_org',
176
+ );
177
+
178
+ const moduleCodes = allModules.map((m) => m.module_code);
179
+
180
+ const allActions = await this.moduleActionRepo.find({
181
+ where: { module_code: In(moduleCodes) },
182
+ });
183
+
184
+ // Map actions by module_code with VIEW action first
185
+ const actionMap = allActions.reduce(
186
+ (acc, action) => {
187
+ if (!acc[action.module_code]) acc[action.module_code] = [];
188
+
189
+ const actionItem = {
190
+ action: action.action_type,
191
+ name: action.action_name,
192
+ };
193
+
194
+ if (action.action_type === 'VIEW') {
195
+ acc[action.module_code].unshift(actionItem); // ➕ Add VIEW at start
196
+ } else {
197
+ acc[action.module_code].push(actionItem); // ➕ Add others at end
198
+ }
199
+
200
+ return acc;
201
+ },
202
+ {} as Record<string, { action: string; name: string }[]>,
203
+ );
204
+
205
+ const levelsToReturn = levelType === 'ORG' ? ['ORG', 'SCH'] : ['SCH'];
206
+
207
+ const groupedByLevel: Record<string, any[]> = {};
208
+
209
+ for (const lvl of levelsToReturn) {
210
+ const filteredModules = allModules.filter((m) => m.level_type === lvl);
211
+
212
+ const buildHierarchy = (parentWbs: string): any[] =>
213
+ filteredModules
214
+ .filter(
215
+ (mod) =>
216
+ mod.wbs_code.startsWith(`${parentWbs}.`) &&
217
+ mod.wbs_code.split('.').length ===
218
+ parentWbs.split('.').length + 1,
219
+ )
220
+ .map((mod) => ({
221
+ name: mod.name,
222
+ code: mod.module_code,
223
+ permission: actionMap[mod.module_code] || [],
224
+ submod: buildHierarchy(mod.wbs_code),
225
+ }));
226
+
227
+ const levelModules = mainModules
228
+ .filter((mod) => mod.level_type === lvl)
229
+ .map((mod) => ({
230
+ name: mod.name,
231
+ code: mod.module_code,
232
+ permission: actionMap[mod.module_code] || [],
233
+ submod: buildHierarchy(mod.wbs_code),
234
+ }));
235
+
236
+ if (levelModules.length) {
237
+ groupedByLevel[lvl] = levelModules;
238
+ }
239
+ }
240
+ return groupedByLevel;
241
+ }
242
+
243
+ async updateModuleAccess(
244
+ accessList: {
245
+ role_code: string;
246
+ module_code: string;
247
+ action_type: string;
248
+ access_flag: number;
249
+ appcode: string;
250
+ level_type: string;
251
+ }[],
252
+ ): Promise<boolean> {
253
+ try {
254
+ for (const access of accessList) {
255
+ const existing = await this.moduleAccessRepo.findOne({
256
+ where: {
257
+ role_code: access.role_code,
258
+ module_code: access.module_code,
259
+ action_type: access.action_type,
260
+ appcode: access.appcode,
261
+ level_type: access.level_type,
262
+ },
263
+ });
264
+
265
+ if (existing) {
266
+ existing.access_flag = access.access_flag;
267
+ await this.moduleAccessRepo.save(existing);
268
+ } else {
269
+ await this.moduleAccessRepo.save(
270
+ await this.moduleAccessRepo.create(access),
271
+ );
272
+ }
273
+ }
274
+ return true;
275
+ } catch (error) {
276
+ console.error('Error updating module access:', error);
277
+ return false;
278
+ }
279
+ }
280
+
281
+ async getModuleUIConfig(moduleCode: string, roleIds: number[]) {
282
+ const module = await this.moduleRepo.findOne({
283
+ where: { module_code: moduleCode },
284
+ });
285
+
286
+ if (!module) throw new BadRequestException('Module not found');
287
+
288
+ const roles = await this.roleRepo.find({ where: { id: In(roleIds) } });
289
+ const roleCodes = roles.map((role) => role.code);
290
+
291
+ const actions = await this.moduleAccessRepo.find({
292
+ where: {
293
+ module_code: moduleCode,
294
+ role_code: In(roleCodes),
295
+ access_flag: 1,
296
+ },
297
+ });
298
+
299
+ const uniqueActions = [...new Set(actions.map((a) => a.action_type))];
300
+
301
+ return {
302
+ entity_type: module.entity_type,
303
+ title: module.title,
304
+ ui_config: module.ui_config || {},
305
+ action: uniqueActions,
306
+ };
307
+ }
308
+ async getModuleAccessByRoles(roleIds: number[], appcode: string) {
309
+ // Step 1: Get role codes from sso_role
310
+ const roles = await this.roleRepo.find({
311
+ where: {
312
+ id: In(roleIds),
313
+ appcode,
314
+ },
315
+ select: ['id', 'code'],
316
+ });
317
+
318
+ const roleCodes = roles.map((r) => r.code);
319
+ if (!roleCodes.length) return [];
320
+
321
+ // Step 2: Fetch full access data
322
+ const accessRecords = await this.moduleAccessRepo
323
+ .createQueryBuilder('access')
324
+ .select([
325
+ 'access.module_code AS module_code',
326
+ 'access.action_type AS action_type',
327
+ 'access.access_flag AS access_flag',
328
+ 'access.level_type AS level_type',
329
+ 'access.appcode AS appcode',
330
+ ])
331
+ .where('access.role_code IN (:...roleCodes)', { roleCodes })
332
+ .andWhere('access.appcode = :appcode', { appcode })
333
+ .getRawMany();
334
+
335
+ // Step 3: Format output
336
+ return accessRecords.map((record) => ({
337
+ action: record.action_type,
338
+ access: record.access_flag,
339
+ code: record.module_code,
340
+ level_type: record.level_type,
341
+ appcode: record.appcode,
342
+ }));
343
+ }
344
+ }