rez_core 5.0.16 → 5.0.18

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