rez_core 4.0.114 → 4.0.115

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