rez_core 3.1.176 → 3.1.178

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