rez_core 3.1.180 → 3.1.181

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