rez_core 4.0.141 → 4.0.145

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 (448) hide show
  1. package/.idea/250218_nodejs_core.iml +11 -8
  2. package/.idea/codeStyles/Project.xml +58 -58
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/inspectionProfiles/Project_Default.xml +1 -1
  5. package/.idea/modules.xml +7 -7
  6. package/.idea/prettier.xml +5 -5
  7. package/.idea/vcs.xml +5 -5
  8. package/.prettierrc +3 -3
  9. package/README.md +99 -99
  10. package/dist/config/config.module.js +2 -2
  11. package/dist/config/config.module.js.map +1 -1
  12. package/dist/config/database.config.d.ts +1 -1
  13. package/dist/config/database.config.js +12 -15
  14. package/dist/config/database.config.js.map +1 -1
  15. package/dist/module/auth/guards/role.guard.js +3 -3
  16. package/dist/module/auth/services/auth.service.js +3 -3
  17. package/dist/module/auth/services/auth.service.js.map +1 -1
  18. package/dist/module/enterprise/entity/organization.entity.js +1 -1
  19. package/dist/module/enterprise/repository/school.repository.js +3 -3
  20. package/dist/module/enterprise/repository/school.repository.js.map +1 -1
  21. package/dist/module/filter/repository/saved-filter.repository.js +4 -4
  22. package/dist/module/filter/service/filter-evaluator.service.js +2 -2
  23. package/dist/module/filter/service/filter.service.js +22 -22
  24. package/dist/module/integration/entity/integration-config.entity.js +6 -6
  25. package/dist/module/integration/entity/integration-config.entity.js.map +1 -1
  26. package/dist/module/integration/entity/integration-entity-mapper.entity.js +1 -1
  27. package/dist/module/integration/entity/integration-entity-mapper.entity.js.map +1 -1
  28. package/dist/module/integration/entity/integration-source.entity.js +4 -4
  29. package/dist/module/integration/entity/integration-source.entity.js.map +1 -1
  30. package/dist/module/integration/entity/user-integration.entity.js +4 -4
  31. package/dist/module/integration/entity/user-integration.entity.js.map +1 -1
  32. package/dist/module/integration/examples/usage.example.js +9 -9
  33. package/dist/module/integration/service/integration.service.js +1 -1
  34. package/dist/module/integration/service/wrapper.service.d.ts +3 -1
  35. package/dist/module/integration/service/wrapper.service.js +64 -61
  36. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  37. package/dist/module/listmaster/entity/list-master-items.entity.js +3 -3
  38. package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
  39. package/dist/module/listmaster/entity/list-master.entity.js +4 -4
  40. package/dist/module/listmaster/entity/list-master.entity.js.map +1 -1
  41. package/dist/module/listmaster/service/list-master-item.service.js +2 -2
  42. package/dist/module/mapper/entity/field-mapper.entity.js +6 -6
  43. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  44. package/dist/module/mapper/service/field-mapper.service.js +6 -6
  45. package/dist/module/mapper/service/field-mapper.service.js.map +1 -1
  46. package/dist/module/mapper/service/mapper.service.js +2 -2
  47. package/dist/module/meta/entity/entity-master.entity.js +1 -1
  48. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  49. package/dist/module/meta/entity/view-master.entity.js +1 -1
  50. package/dist/module/meta/entity/view-master.entity.js.map +1 -1
  51. package/dist/module/meta/service/attribute-master.service.js +1 -1
  52. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  53. package/dist/module/meta/service/entity-dynamic.service.js +9 -9
  54. package/dist/module/meta/service/entity-list.service.js +3 -3
  55. package/dist/module/meta/service/entity-master.service.js +3 -3
  56. package/dist/module/meta/service/entity-relation.service.js +11 -11
  57. package/dist/module/meta/service/entity-service-impl.service.js +3 -3
  58. package/dist/module/meta/service/resolver.service.js +5 -5
  59. package/dist/module/meta/service/resolver.service.js.map +1 -1
  60. package/dist/module/module/repository/menu.repository.js +12 -12
  61. package/dist/module/notification/entity/otp.entity.js +1 -1
  62. package/dist/module/notification/entity/otp.entity.js.map +1 -1
  63. package/dist/module/notification/service/notification.service.js +9 -9
  64. package/dist/module/user/controller/login.controller.js +18 -18
  65. package/dist/module/user/entity/user-role-mapping.entity.js +1 -1
  66. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  67. package/dist/module/user/service/role.service.js +4 -4
  68. package/dist/module/user/service/user-session.service.js +2 -2
  69. package/dist/module/workflow/entity/action-data.entity.js +1 -1
  70. package/dist/module/workflow/entity/action-data.entity.js.map +1 -1
  71. package/dist/module/workflow/entity/action.entity.js +1 -1
  72. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  73. package/dist/module/workflow/entity/comm-template.entity.js +1 -1
  74. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  75. package/dist/module/workflow/repository/action.repository.js +20 -20
  76. package/dist/module/workflow/repository/comm-template.repository.js +6 -6
  77. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  78. package/dist/module/workflow/repository/stage-group.repository.js +23 -23
  79. package/dist/module/workflow/repository/stage-movement.repository.js +15 -15
  80. package/dist/module/workflow/repository/stage.repository.js +8 -8
  81. package/dist/module/workflow/repository/task.repository.d.ts +3 -1
  82. package/dist/module/workflow/repository/task.repository.js +8 -3
  83. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  84. package/dist/module/workflow/service/action-template-mapping.service.js +22 -22
  85. package/dist/module/workflow/service/action.service.js +7 -7
  86. package/dist/module/workflow/service/entity-modification.service.js +6 -6
  87. package/dist/module/workflow/service/stage-group.service.js +2 -2
  88. package/dist/module/workflow/service/stage.service.js +2 -2
  89. package/dist/module/workflow/service/task.service.js +36 -41
  90. package/dist/module/workflow/service/task.service.js.map +1 -1
  91. package/dist/module/workflow/service/workflow-list-master.service.js +15 -15
  92. package/dist/module/workflow/service/workflow-meta.service.js +49 -47
  93. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  94. package/dist/module/workflow/service/workflow.service.js +2 -2
  95. package/dist/module/workflow-automation/controller/workflow-automation.controller.d.ts +6 -0
  96. package/dist/module/workflow-automation/controller/workflow-automation.controller.js +16 -0
  97. package/dist/module/workflow-automation/controller/workflow-automation.controller.js.map +1 -1
  98. package/dist/module/workflow-automation/entity/workflow-automation.entity.d.ts +1 -0
  99. package/dist/module/workflow-automation/entity/workflow-automation.entity.js +4 -0
  100. package/dist/module/workflow-automation/entity/workflow-automation.entity.js.map +1 -1
  101. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +5 -0
  102. package/dist/module/workflow-automation/service/workflow-automation.service.js +45 -0
  103. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  104. package/dist/tsconfig.build.tsbuildinfo +1 -1
  105. package/dist/utils/service/loggingUtil.service.d.ts +9 -2
  106. package/dist/utils/service/loggingUtil.service.js +65 -14
  107. package/dist/utils/service/loggingUtil.service.js.map +1 -1
  108. package/dist/utils/service/reflection-helper.service.js +2 -2
  109. package/dist/utils/utils.module.js +2 -0
  110. package/dist/utils/utils.module.js.map +1 -1
  111. package/docs/modules/event-driven-integration-design.md +91 -91
  112. package/docs/modules/integration.md +250 -250
  113. package/eslint.config.mjs +34 -34
  114. package/nest-cli.json +14 -14
  115. package/package.json +119 -120
  116. package/src/app.controller.ts +12 -12
  117. package/src/app.module.ts +52 -52
  118. package/src/app.service.ts +8 -8
  119. package/src/config/config.module.ts +18 -17
  120. package/src/config/database.config.ts +23 -47
  121. package/src/constant/global.constant.ts +67 -67
  122. package/src/core.module.ts +81 -81
  123. package/src/decorators/roles.decorator.ts +7 -7
  124. package/src/dtos/response.dto.ts +6 -6
  125. package/src/dtos/response.ts +5 -5
  126. package/src/index.ts +1 -1
  127. package/src/module/auth/auth.module.ts +49 -49
  128. package/src/module/auth/controller/auth.controller.ts +28 -28
  129. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  130. package/src/module/auth/guards/jwt.guard.ts +22 -22
  131. package/src/module/auth/guards/role.guard.ts +68 -68
  132. package/src/module/auth/services/auth.service.ts +50 -50
  133. package/src/module/auth/services/jwt.service.ts +11 -11
  134. package/src/module/auth/strategies/google.strategy.ts +54 -54
  135. package/src/module/auth/strategies/jwt.strategy.ts +58 -58
  136. package/src/module/auth/strategies/local.strategy.ts +13 -13
  137. package/src/module/dashboard/controller/dashboard.controller.ts +36 -36
  138. package/src/module/dashboard/dashboard.module.ts +21 -21
  139. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
  140. package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
  141. package/src/module/dashboard/repository/dashboard.repository.ts +42 -42
  142. package/src/module/dashboard/service/dashboard.service.ts +73 -73
  143. package/src/module/dev/dev.module.ts +12 -12
  144. package/src/module/dev/service/dev.service.ts +7 -7
  145. package/src/module/enterprise/controller/organization.controller.ts +36 -36
  146. package/src/module/enterprise/enterprise.module.ts +30 -30
  147. package/src/module/enterprise/entity/enterprise.entity.ts +37 -37
  148. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
  149. package/src/module/enterprise/entity/organization.entity.ts +92 -92
  150. package/src/module/enterprise/repository/enterprise.repository.ts +31 -31
  151. package/src/module/enterprise/repository/organization.repository.ts +26 -26
  152. package/src/module/enterprise/repository/school.repository.ts +278 -278
  153. package/src/module/enterprise/service/brand.service.ts +5 -5
  154. package/src/module/enterprise/service/enterprise.service.ts +16 -16
  155. package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
  156. package/src/module/enterprise/service/organization.service.ts +145 -145
  157. package/src/module/filter/controller/filter.controller.ts +84 -84
  158. package/src/module/filter/dto/filter-request.dto.ts +38 -38
  159. package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
  160. package/src/module/filter/entity/saved-filter-master.entity.ts +23 -23
  161. package/src/module/filter/filter.module.ts +31 -31
  162. package/src/module/filter/repository/saved-filter.repository.ts +168 -168
  163. package/src/module/filter/service/filter-evaluator.service.ts +86 -86
  164. package/src/module/filter/service/filter.service.ts +1005 -1005
  165. package/src/module/filter/service/saved-filter.service.ts +170 -170
  166. package/src/module/ics/controller/ics.controller.ts +21 -21
  167. package/src/module/ics/dto/ics.dto.ts +55 -55
  168. package/src/module/ics/ics.module.ts +13 -13
  169. package/src/module/ics/service/ics.service.ts +57 -57
  170. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  171. package/src/module/integration/controller/integration.controller.ts +662 -662
  172. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  173. package/src/module/integration/dto/create-config.dto.ts +526 -526
  174. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  175. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  176. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  177. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  178. package/src/module/integration/examples/usage.example.ts +338 -338
  179. package/src/module/integration/factories/base.factory.ts +7 -7
  180. package/src/module/integration/factories/email.factory.ts +49 -49
  181. package/src/module/integration/factories/integration.factory.ts +121 -121
  182. package/src/module/integration/factories/sms.factory.ts +51 -51
  183. package/src/module/integration/factories/telephone.factory.ts +41 -41
  184. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  185. package/src/module/integration/integration.module.ts +110 -110
  186. package/src/module/integration/service/calendar-event.service.ts +118 -118
  187. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  188. package/src/module/integration/service/integration-queue.service.ts +229 -229
  189. package/src/module/integration/service/integration.service.ts +2633 -2633
  190. package/src/module/integration/service/oauth.service.ts +224 -224
  191. package/src/module/integration/service/wrapper.service.ts +700 -493
  192. package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
  193. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  194. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  195. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
  196. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  197. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  198. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  199. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  200. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  201. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  202. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  203. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  204. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  205. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  206. package/src/module/layout/controller/layout.controller.ts +47 -47
  207. package/src/module/layout/entity/header-items.entity.ts +28 -28
  208. package/src/module/layout/entity/header-section.entity.ts +19 -19
  209. package/src/module/layout/layout.module.ts +21 -21
  210. package/src/module/layout/repository/header-items.repository.ts +18 -18
  211. package/src/module/layout/repository/header-section.repository.ts +22 -22
  212. package/src/module/layout/service/header-section.service.ts +25 -25
  213. package/src/module/layout_preference/controller/layout_preference.controller.ts +73 -73
  214. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  215. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  216. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  217. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  218. package/src/module/lead/controller/lead.controller.ts +30 -30
  219. package/src/module/lead/lead.module.ts +14 -14
  220. package/src/module/lead/repository/lead.repository.ts +41 -41
  221. package/src/module/lead/service/lead.service.ts +54 -54
  222. package/src/module/listmaster/controller/list-master.controller.ts +230 -230
  223. package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
  224. package/src/module/listmaster/entity/list-master.entity.ts +33 -33
  225. package/src/module/listmaster/listmaster.module.ts +46 -46
  226. package/src/module/listmaster/repository/list-master-items.repository.ts +169 -169
  227. package/src/module/listmaster/repository/list-master.repository.ts +46 -46
  228. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  229. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  230. package/src/module/listmaster/service/list-master-item.service.ts +292 -292
  231. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  232. package/src/module/listmaster/service/list-master.service.ts +535 -535
  233. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  234. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  235. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  236. package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
  237. package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
  238. package/src/module/mapper/entity/mapper.entity.ts +16 -16
  239. package/src/module/mapper/mapper.module.ts +34 -34
  240. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  241. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  242. package/src/module/mapper/repository/mapper.repository.ts +15 -15
  243. package/src/module/mapper/service/field-mapper.service.ts +271 -266
  244. package/src/module/mapper/service/mapper.service.ts +79 -79
  245. package/src/module/master/controller/master.controller.ts +74 -74
  246. package/src/module/master/service/master.service.ts +483 -483
  247. package/src/module/meta/controller/app-master.controller.ts +38 -38
  248. package/src/module/meta/controller/attribute-master.controller.ts +66 -66
  249. package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
  250. package/src/module/meta/controller/entity-master.controller.ts +28 -28
  251. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  252. package/src/module/meta/controller/entity.controller.ts +392 -392
  253. package/src/module/meta/controller/entity.public.controller.ts +75 -75
  254. package/src/module/meta/controller/media.controller.ts +107 -107
  255. package/src/module/meta/controller/meta.controller.ts +96 -96
  256. package/src/module/meta/controller/view-master.controller.ts +86 -86
  257. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  258. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  259. package/src/module/meta/dto/entity-table.dto.ts +9 -9
  260. package/src/module/meta/entity/app-master.entity.ts +34 -34
  261. package/src/module/meta/entity/attribute-master.entity.ts +89 -89
  262. package/src/module/meta/entity/base-entity.entity.ts +75 -75
  263. package/src/module/meta/entity/entity-master.entity.ts +85 -85
  264. package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
  265. package/src/module/meta/entity/entity-relation.entity.ts +23 -23
  266. package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
  267. package/src/module/meta/entity/entity-table.entity.ts +50 -50
  268. package/src/module/meta/entity/media-data.entity.ts +32 -32
  269. package/src/module/meta/entity/preference.entity.ts +62 -62
  270. package/src/module/meta/entity/view-master.entity.ts +41 -41
  271. package/src/module/meta/entity.module.ts +158 -158
  272. package/src/module/meta/repository/app-master.repository.ts +20 -20
  273. package/src/module/meta/repository/attribute-master.repository.ts +118 -118
  274. package/src/module/meta/repository/entity-master.repository.ts +69 -69
  275. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  276. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  277. package/src/module/meta/repository/media-data.repository.ts +50 -50
  278. package/src/module/meta/repository/preference.repository.ts +20 -20
  279. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  280. package/src/module/meta/repository/view-master.repository.ts +42 -42
  281. package/src/module/meta/service/app-master.service.ts +37 -37
  282. package/src/module/meta/service/attribute-master.service.ts +126 -126
  283. package/src/module/meta/service/common.service.ts +9 -9
  284. package/src/module/meta/service/entity-dynamic.service.ts +819 -819
  285. package/src/module/meta/service/entity-list.service.ts +205 -205
  286. package/src/module/meta/service/entity-master.service.ts +169 -169
  287. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  288. package/src/module/meta/service/entity-relation.service.ts +69 -69
  289. package/src/module/meta/service/entity-service-impl.service.ts +525 -525
  290. package/src/module/meta/service/entity-table-column.service.ts +39 -39
  291. package/src/module/meta/service/entity-table.service.ts +150 -150
  292. package/src/module/meta/service/entity-validation.service.ts +187 -187
  293. package/src/module/meta/service/entity.service.ts +67 -67
  294. package/src/module/meta/service/field-group.service.ts +103 -103
  295. package/src/module/meta/service/media-data.service.ts +507 -507
  296. package/src/module/meta/service/populate-meta.service.ts +193 -193
  297. package/src/module/meta/service/preference.service.ts +16 -16
  298. package/src/module/meta/service/resolver.service.ts +267 -267
  299. package/src/module/meta/service/section-master.service.ts +104 -104
  300. package/src/module/meta/service/update-form-json.service.ts +22 -22
  301. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  302. package/src/module/meta/service/view-master.service.ts +127 -127
  303. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  304. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  305. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  306. package/src/module/module/controller/menu.controller.ts +15 -15
  307. package/src/module/module/controller/module-access.controller.ts +134 -134
  308. package/src/module/module/entity/menu.entity.ts +43 -43
  309. package/src/module/module/entity/module-access.entity.ts +25 -25
  310. package/src/module/module/entity/module-action.entity.ts +17 -17
  311. package/src/module/module/entity/module.entity.ts +52 -52
  312. package/src/module/module/module.module.ts +42 -42
  313. package/src/module/module/repository/menu.repository.ts +184 -184
  314. package/src/module/module/repository/module-access.repository.ts +344 -344
  315. package/src/module/module/service/menu.service.ts +82 -82
  316. package/src/module/module/service/module-access.service.ts +209 -209
  317. package/src/module/notification/controller/notification.controller.ts +58 -58
  318. package/src/module/notification/controller/otp.controller.ts +117 -117
  319. package/src/module/notification/entity/notification.entity.ts +26 -26
  320. package/src/module/notification/entity/otp.entity.ts +28 -28
  321. package/src/module/notification/firebase-admin.config.ts +22 -22
  322. package/src/module/notification/notification.module.ts +69 -69
  323. package/src/module/notification/repository/otp.repository.ts +27 -27
  324. package/src/module/notification/service/email.service.ts +127 -127
  325. package/src/module/notification/service/notification.service.ts +163 -163
  326. package/src/module/notification/service/otp.service.ts +132 -132
  327. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  328. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  329. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  330. package/src/module/third-party-module/third-party.module.ts +12 -12
  331. package/src/module/user/controller/login.controller.ts +197 -197
  332. package/src/module/user/controller/user.controller.ts +40 -40
  333. package/src/module/user/dto/create-user.dto.ts +62 -62
  334. package/src/module/user/dto/update-user.dto.ts +4 -4
  335. package/src/module/user/entity/role.entity.ts +33 -33
  336. package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
  337. package/src/module/user/entity/user-session.entity.ts +73 -73
  338. package/src/module/user/entity/user.entity.ts +59 -59
  339. package/src/module/user/repository/role.repository.ts +96 -96
  340. package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
  341. package/src/module/user/repository/user.repository.ts +50 -50
  342. package/src/module/user/repository/userSession.repository.ts +33 -33
  343. package/src/module/user/service/login.service.ts +304 -304
  344. package/src/module/user/service/role.service.ts +189 -189
  345. package/src/module/user/service/user-role-mapping.service.ts +98 -98
  346. package/src/module/user/service/user-session.service.ts +168 -168
  347. package/src/module/user/service/user.service.ts +365 -365
  348. package/src/module/user/user.module.ts +65 -65
  349. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  350. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  351. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  352. package/src/module/workflow/controller/action.controller.ts +111 -111
  353. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  354. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  355. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  356. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  357. package/src/module/workflow/controller/stage-group.controller.ts +48 -48
  358. package/src/module/workflow/controller/stage.controller.ts +50 -50
  359. package/src/module/workflow/controller/task.controller.ts +77 -77
  360. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  361. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  362. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  363. package/src/module/workflow/entity/action-category.entity.ts +38 -38
  364. package/src/module/workflow/entity/action-data.entity.ts +55 -55
  365. package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
  366. package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
  367. package/src/module/workflow/entity/action.entity.ts +50 -50
  368. package/src/module/workflow/entity/activity-log.entity.ts +43 -43
  369. package/src/module/workflow/entity/comm-template.entity.ts +43 -43
  370. package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
  371. package/src/module/workflow/entity/form.entity.ts +25 -25
  372. package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
  373. package/src/module/workflow/entity/stage-group.entity.ts +23 -23
  374. package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
  375. package/src/module/workflow/entity/stage.entity.ts +20 -20
  376. package/src/module/workflow/entity/task-data.entity.ts +88 -88
  377. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  378. package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
  379. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  380. package/src/module/workflow/entity/workflow.entity.ts +20 -20
  381. package/src/module/workflow/repository/action-category.repository.ts +79 -79
  382. package/src/module/workflow/repository/action-data.repository.ts +333 -333
  383. package/src/module/workflow/repository/action.repository.ts +323 -323
  384. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  385. package/src/module/workflow/repository/comm-template.repository.ts +149 -149
  386. package/src/module/workflow/repository/form-master.repository.ts +59 -59
  387. package/src/module/workflow/repository/stage-group.repository.ts +176 -176
  388. package/src/module/workflow/repository/stage-movement.repository.ts +244 -244
  389. package/src/module/workflow/repository/stage.repository.ts +172 -172
  390. package/src/module/workflow/repository/task.repository.ts +134 -127
  391. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  392. package/src/module/workflow/service/action-category.service.ts +33 -33
  393. package/src/module/workflow/service/action-data.service.ts +62 -62
  394. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  395. package/src/module/workflow/service/action-template-mapping.service.ts +106 -106
  396. package/src/module/workflow/service/action.service.ts +279 -279
  397. package/src/module/workflow/service/activity-log.service.ts +107 -107
  398. package/src/module/workflow/service/comm-template.service.ts +180 -180
  399. package/src/module/workflow/service/entity-modification.service.ts +67 -67
  400. package/src/module/workflow/service/form-master.service.ts +35 -35
  401. package/src/module/workflow/service/populate-workflow.service.ts +303 -303
  402. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  403. package/src/module/workflow/service/stage-group.service.ts +319 -319
  404. package/src/module/workflow/service/stage.service.ts +199 -199
  405. package/src/module/workflow/service/task.service.ts +547 -560
  406. package/src/module/workflow/service/workflow-list-master.service.ts +60 -60
  407. package/src/module/workflow/service/workflow-meta.service.ts +654 -640
  408. package/src/module/workflow/service/workflow.service.ts +205 -205
  409. package/src/module/workflow/workflow.module.ts +176 -176
  410. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -21
  411. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  412. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +38 -35
  413. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  414. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  415. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  416. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +214 -214
  417. package/src/module/workflow-automation/service/workflow-automation.service.ts +421 -347
  418. package/src/module/workflow-automation/workflow-automation.module.ts +34 -34
  419. package/src/resources/dev.properties.yaml +30 -31
  420. package/src/resources/local.properties.yaml +27 -27
  421. package/src/resources/properties.module.ts +12 -12
  422. package/src/resources/properties.yaml.ts +11 -11
  423. package/src/resources/uat.properties.yaml +31 -31
  424. package/src/table.config.ts +126 -126
  425. package/src/utils/dto/excel-data.dto.ts +14 -14
  426. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  427. package/src/utils/service/base64util.service.ts +18 -18
  428. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  429. package/src/utils/service/codeGenerator.service.ts +22 -22
  430. package/src/utils/service/dateUtil.service.ts +17 -17
  431. package/src/utils/service/encryptUtil.service.ts +97 -97
  432. package/src/utils/service/excel-helper.service.ts +72 -72
  433. package/src/utils/service/excelUtil.service.ts +15 -15
  434. package/src/utils/service/file-util.service.ts +11 -11
  435. package/src/utils/service/json-util.service.ts +23 -23
  436. package/src/utils/service/loggingUtil.service.ts +88 -34
  437. package/src/utils/service/reflection-helper.service.ts +62 -62
  438. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  439. package/src/utils/utils.module.ts +27 -25
  440. package/tsconfig.build.json +4 -4
  441. package/tsconfig.json +24 -24
  442. package/.claude/settings.local.json +0 -26
  443. package/.idea/copilot.data.migration.agent.xml +0 -6
  444. package/.idea/copilot.data.migration.ask.xml +0 -6
  445. package/.idea/copilot.data.migration.ask2agent.xml +0 -6
  446. package/.idea/copilot.data.migration.edit.xml +0 -6
  447. package/.idea/misc.xml +0 -6
  448. package/server.log +0 -850
@@ -1,525 +1,525 @@
1
- import { EntityService } from './entity.service';
2
- import {
3
- BadRequestException,
4
- forwardRef,
5
- Inject,
6
- Injectable,
7
- NotFoundException,
8
- } from '@nestjs/common';
9
- import { UserData } from '../../user/entity/user.entity';
10
- import { EntityMasterService } from './entity-master.service';
11
- import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
12
- import { BaseEntity } from '../entity/base-entity.entity';
13
- import { LoggingService } from '../../../utils/service/loggingUtil.service';
14
- import { EntityListData } from '../dto/entity-list-data.dto';
15
- import { EntityListService } from './entity-list.service';
16
- import { EntityManager } from 'typeorm';
17
- import { ExcelData } from '../../../utils/dto/excel-data.dto';
18
- import * as fs from 'fs';
19
- import * as path from 'path';
20
- import { ExcelHelper } from '../../../utils/service/excel-helper.service';
21
- import { ExcelsheetData } from '../../../utils/dto/excelsheet-data.dto';
22
- import { EntityTableService } from './entity-table.service';
23
- import { EntityTableColumnService } from './entity-table-column.service';
24
- import {
25
- ENTITYTYPE_ENTITYMASTER,
26
- STATUS_ACTIVE,
27
- } from '../../../constant/global.constant';
28
- import { EntityValidationService } from './entity-validation.service';
29
- import { AttributeMasterService } from './attribute-master.service';
30
- import { ResolverService } from './resolver.service';
31
-
32
- @Injectable()
33
- export class EntityServiceImpl implements EntityService<BaseEntity> {
34
- @Inject() protected readonly entityMasterService: EntityMasterService;
35
- @Inject()
36
- protected readonly entityTableColumnService: EntityTableColumnService;
37
- @Inject() protected readonly entityTableService: EntityTableService;
38
- @Inject() protected readonly reflectionHelper: ReflectionHelper;
39
- @Inject() protected readonly entityListService: EntityListService;
40
- @Inject() protected readonly loggingService: LoggingService;
41
- @Inject()
42
- protected readonly entityValidationService: EntityValidationService;
43
- protected readonly attributeMasterService: AttributeMasterService;
44
- @Inject(forwardRef(() => ResolverService))
45
- protected readonly resolverService: ResolverService;
46
-
47
- async createEntity(
48
- entityData: BaseEntity,
49
- loggedInUser: UserData | null,
50
- manager?: EntityManager | null,
51
- appcode?: string,
52
- ) {
53
- if (!entityData.entity_type) {
54
- throw new BadRequestException(`EntityType is missing`);
55
- }
56
- const entityMaster = await this.entityMasterService.getEntityData(
57
- entityData.entity_type,
58
- loggedInUser,
59
- );
60
-
61
- const validationErrors =
62
- await this.entityValidationService.validateEntityData(
63
- entityData,
64
- entityMaster,
65
- loggedInUser,
66
- );
67
- console.log('Validation Errors:', validationErrors); // Debug log
68
- if (validationErrors && validationErrors.length > 0) {
69
- return {
70
- success: false,
71
- message: 'Validation failed',
72
- errors: validationErrors,
73
- };
74
- }
75
-
76
- const repo = manager
77
- ? manager.getRepository(entityMaster.entity_data_class) // <-- Use transaction-safe repo
78
- : this.reflectionHelper.getRepoService(entityMaster.entity_data_class);
79
-
80
- if (!repo) {
81
- throw new Error(
82
- `Repository service not found for entityType: ${entityData.entity_type}`,
83
- );
84
- }
85
-
86
- if (!entityData.code && loggedInUser) {
87
- let maxSeqNo = await this.getMaxSequenceNumber(
88
- entityData.entity_type,
89
- entityData.parent_id,
90
- entityData.parent_type,
91
- loggedInUser,
92
- );
93
- maxSeqNo = Number(maxSeqNo) + 1;
94
- entityData.code = entityData.entity_type + maxSeqNo;
95
- }
96
-
97
- // const resolveStatus = await this.listMasterService.getResolvedListCode(
98
- // STATUS_ACTIVE,
99
- // loggedInUser?.organization_id || 0,
100
- // );
101
-
102
- const statusList = await repo.query(
103
- `SELECT id
104
- FROM frm_list_master_items
105
- WHERE code = ?
106
- AND organization_id = ?`,
107
- [STATUS_ACTIVE, loggedInUser?.organization_id || -1],
108
- );
109
-
110
- console.log('Status List:', statusList); // Debug log
111
- console.log(
112
- `status_code,${STATUS_ACTIVE},statusList, ${loggedInUser?.organization_id}`,
113
- ); // Debug log
114
-
115
- entityData.created_date = new Date();
116
- if (loggedInUser) {
117
- entityData.created_by = loggedInUser.id;
118
- if (!entityData.organization_id)
119
- entityData.organization_id = loggedInUser.organization_id;
120
- if (!entityData.enterprise_id)
121
- entityData.enterprise_id = loggedInUser.enterprise_id;
122
- if (!entityData.level_type)
123
- entityData.level_type = loggedInUser.level_type;
124
- if (!entityData.level_id) entityData.level_id = loggedInUser.level_id;
125
- if (!entityData.status) entityData.status = statusList[0].id;
126
- }
127
-
128
- let savedData = repo.save(entityData);
129
-
130
- return savedData;
131
- }
132
-
133
- async deleteEntity(entityType: string, entityId: number, loggedInUser) {
134
- const entityMaster = await this.entityMasterService.getEntityData(
135
- entityType,
136
- loggedInUser,
137
- );
138
-
139
- const repoService = this.reflectionHelper.getRepoService(
140
- entityMaster.entity_data_class,
141
- );
142
- if (!repoService) {
143
- throw new Error(
144
- `Repository service not found for entityType: ${entityType}`,
145
- );
146
- }
147
-
148
- const entityData = await repoService.findOne({ where: { id: entityId } });
149
-
150
- if (!entityData) {
151
- throw new Error(`Entity not found for entityType: ${entityType}`);
152
- }
153
-
154
- await repoService.delete(entityId);
155
-
156
- return {
157
- success: true,
158
- message: `Entity with id ${entityId} deleted successfully.`,
159
- };
160
- }
161
-
162
- async findByCode(
163
- entityType: string,
164
- code: string,
165
- loggedInUser,
166
- ): Promise<BaseEntity> {
167
- const entityData = await this.entityMasterService.getEntityData(
168
- entityType,
169
- loggedInUser,
170
- );
171
-
172
- const repoService = this.reflectionHelper.getRepoService(
173
- entityData.entity_data_class,
174
- );
175
- if (!repoService) {
176
- throw new Error(
177
- `Repository service not found for entityType: ${entityType}`,
178
- );
179
- }
180
- const result = await repoService?.findOne({ where: { code: code } });
181
-
182
- if (!result) {
183
- throw new Error(`Entity not found for entityType: ${entityType}`);
184
- }
185
- return result;
186
- }
187
-
188
- async getEntityData(
189
- entityType: string,
190
- id: number,
191
- loggedInUser,
192
- ): Promise<any> {
193
- const entityData = await this.entityMasterService.getEntityData(
194
- entityType,
195
- loggedInUser,
196
- );
197
-
198
- const repoService = this.reflectionHelper.getRepoService(
199
- entityData.entity_data_class,
200
- );
201
- if (!repoService) {
202
- throw new Error(
203
- `Repository service not found for entityType: ${entityType}`,
204
- );
205
- }
206
- return await repoService.findOne({ where: { id: id } });
207
- }
208
-
209
- async getEntityDataAll(
210
- entityType: string,
211
- type: {},
212
- loggedInUser: UserData,
213
- ): Promise<BaseEntity[] | null> {
214
- const entityData = await this.entityMasterService.getEntityData(
215
- entityType,
216
- loggedInUser,
217
- );
218
-
219
- const repoService = this.reflectionHelper.getRepoService(
220
- entityData.entity_data_class,
221
- );
222
- if (!repoService) {
223
- throw new Error(
224
- `Repository service not found for entityType: ${entityType}`,
225
- );
226
- }
227
- return await repoService.find({ where: type });
228
- }
229
-
230
- async getEntityDataByCode(
231
- entityType: string,
232
- code: string,
233
- loggedInUser: UserData,
234
- ): Promise<BaseEntity | null> {
235
- const entityData = await this.entityMasterService.getEntityData(
236
- entityType,
237
- loggedInUser,
238
- );
239
-
240
- const repoService = this.reflectionHelper.getRepoService(
241
- entityData.entity_data_class,
242
- );
243
- if (!repoService) {
244
- throw new BadRequestException(
245
- `Repository service not found for entityType: ${entityType}`,
246
- );
247
- }
248
- const data = await repoService.findOne({ where: { code: code } });
249
-
250
- if (!data) {
251
- throw new NotFoundException(`Data not found for Code: ${code}`);
252
- }
253
- return data;
254
- }
255
-
256
- async getEntityList(
257
- entityType: string,
258
- filters: Record<string, any> = {},
259
- loggedInUser: UserData,
260
- ): Promise<BaseEntity[]> {
261
- const entityData = await this.entityMasterService.getEntityData(
262
- entityType,
263
- loggedInUser,
264
- );
265
- const repoService = this.reflectionHelper.getRepoService(
266
- entityData.entity_data_class,
267
- );
268
-
269
- if (!repoService) {
270
- throw new Error(
271
- `Repository service not found for entityType: ${entityType}`,
272
- );
273
- }
274
-
275
- const result = await repoService.find({
276
- where: filters,
277
- });
278
-
279
- return result;
280
- }
281
-
282
- async updateEntity(
283
- entityData: BaseEntity,
284
- loggedInUser: UserData,
285
- appcode?: string,
286
- ) {
287
- const entityMaster = await this.entityMasterService.getEntityData(
288
- entityData.entity_type,
289
- loggedInUser,
290
- );
291
-
292
- const validationErrors =
293
- await this.entityValidationService.validateEntityData(
294
- entityData,
295
- entityMaster,
296
- loggedInUser,
297
- );
298
- console.log('Validation Errors For Update:', validationErrors); // Debug log
299
- if (validationErrors && validationErrors.length > 0) {
300
- return {
301
- success: false,
302
- message: 'Validation failed',
303
- errors: validationErrors,
304
- };
305
- }
306
-
307
- const repoService = this.reflectionHelper.getRepoService(
308
- entityMaster.entity_data_class,
309
- );
310
- if (!repoService) {
311
- throw new Error(
312
- `Repository service not found for entityType: ${entityData.entity_type}`,
313
- );
314
- }
315
-
316
- entityData.modified_date = new Date();
317
- if (loggedInUser) {
318
- entityData.modified_by = loggedInUser.id;
319
- if (!entityData.organization_id && entityData.entity_type !== 'ORG')
320
- entityData.organization_id = loggedInUser.organization_id;
321
- if (!entityData.enterprise_id)
322
- entityData.enterprise_id = loggedInUser.enterprise_id;
323
- }
324
- await repoService.update(entityData.id, entityData);
325
- return await repoService.findOne({ where: { id: entityData.id } });
326
- }
327
-
328
- async getFilterDataWithTabs(
329
- entityType: string,
330
- listType: string,
331
- filters: Record<string, any>,
332
- sortColumn: string | undefined,
333
- sortOrder: string | undefined,
334
- pageNumber: number,
335
- pageSize: number,
336
- tabColumn?: string,
337
- tabValue?: string,
338
- appcode?: string,
339
- ): Promise<EntityListData> {
340
- return await this.entityListService.getFilterDataWithTabs(
341
- entityType,
342
- listType,
343
- filters,
344
- sortColumn,
345
- sortOrder,
346
- pageNumber,
347
- pageSize,
348
- tabColumn,
349
- tabValue,
350
- appcode,
351
- );
352
- }
353
-
354
- async generateExcelReport(
355
- entityType: string,
356
- filterCriteria: Record<string, any>,
357
- listEntityType: string,
358
- displayType: string,
359
- sampleExport: boolean,
360
- loggedInUser: UserData,
361
- ): Promise<string | null> {
362
- let fileName: string;
363
- try {
364
- const excelData = new ExcelData();
365
- await this.populateExcelData(
366
- excelData,
367
- entityType,
368
- filterCriteria,
369
- listEntityType,
370
- displayType,
371
- sampleExport,
372
- loggedInUser,
373
- );
374
-
375
- const modifiedDate = new Date().toISOString().replace(/[-T:.Z]/g, '');
376
- const tempDir = path.join(__dirname, '../../temp');
377
- if (!fs.existsSync(tempDir)) {
378
- fs.mkdirSync(tempDir, { recursive: true });
379
- }
380
- fileName = path.join(tempDir, `export_${modifiedDate}.xlsx`);
381
- excelData.filePath = fileName;
382
- ExcelHelper.writeExcel(excelData);
383
- } catch (error) {
384
- throw error;
385
- }
386
- return fileName;
387
- }
388
-
389
- private async populateExcelData(
390
- excelData: ExcelData,
391
- entityType: string,
392
- filterCriteria: Record<string, any>,
393
- listEntityType: string,
394
- displayType: string,
395
- sampleExport: boolean,
396
- loggedInUser: UserData,
397
- ) {
398
- const entityTable =
399
- await this.entityTableService.findByEntityTypeAndListTypeAndDisplayType(
400
- entityType,
401
- listEntityType,
402
- displayType,
403
- loggedInUser.organization_id,
404
- );
405
- const sheet: ExcelsheetData = {
406
- sheetName: entityTable?.data_source || 'sheet',
407
- headers: [],
408
- rowList: [],
409
- };
410
-
411
- if (entityTable) {
412
- const entityTableColumnList =
413
- await this.entityTableColumnService.findByParentIdAndParentType(
414
- entityTable.id,
415
- entityTable.entity_type,
416
- loggedInUser.organization_id,
417
- );
418
-
419
- sheet.headers = entityTableColumnList.map((col) => col.name);
420
- const attributeList = entityTableColumnList.map(
421
- (col) => col.attribute_key,
422
- );
423
-
424
- let filteredList: any[] = [];
425
- if (!sampleExport) {
426
- filteredList = await this.entityListService.getFilteredList(
427
- entityTable,
428
- filterCriteria,
429
- undefined,
430
- undefined,
431
- undefined,
432
- undefined,
433
- );
434
- }
435
-
436
- sheet.rowList = filteredList.map((item) =>
437
- attributeList.map((attr) =>
438
- item[attr] !== undefined ? item[attr] : null,
439
- ),
440
- );
441
- excelData.addSheet(sheet);
442
- }
443
- }
444
-
445
- private async getMaxSequenceNumber(
446
- entityType: string,
447
- parentId: number,
448
- parentType: string,
449
- loggedInUser: UserData,
450
- ): Promise<number> {
451
- let tableName: string;
452
- if (ENTITYTYPE_ENTITYMASTER === entityType) {
453
- tableName = 'frm_entity_master';
454
- } else {
455
- const entityMaster = await this.entityMasterService.getEntityData(
456
- entityType,
457
- loggedInUser,
458
- );
459
- tableName = entityMaster.db_table_name;
460
- }
461
- return await this.entityListService.getMaxSequenceNumber(
462
- tableName,
463
- parentType,
464
- parentId,
465
- );
466
- }
467
-
468
- async getSingleResolvedData(
469
- loggedInUser: UserData,
470
- entityData: any,
471
- entityType: string,
472
- ): Promise<any> {
473
- return this.resolverService.getResolvedData(
474
- loggedInUser,
475
- entityData,
476
- entityType,
477
- );
478
- }
479
-
480
- async getResolvedEntityData(
481
- entityType: string,
482
- entityId: number,
483
- loggedInUser: UserData,
484
- ): Promise<any> {
485
- const entityData = await this.entityMasterService.getEntityData(
486
- entityType,
487
- loggedInUser,
488
- );
489
-
490
- const repoService = this.reflectionHelper.getRepoService(
491
- entityData.entity_data_class,
492
- );
493
-
494
- if (!repoService) {
495
- throw new Error(
496
- `Repository service not found for entityType: ${entityType}`,
497
- );
498
- }
499
- const data = await repoService.findOne({ where: { id: entityId } });
500
-
501
- return this.resolverService.getResolvedData(loggedInUser, data, entityType);
502
- }
503
-
504
- async getResolvedEntityDataByDataSource(
505
- entityType: string,
506
- entityId: number,
507
- loggedInUser: UserData,
508
- ): Promise<any> {
509
- const entityData = await this.entityMasterService.getEntityData(
510
- entityType,
511
- loggedInUser,
512
- );
513
-
514
- if (!entityData.data_source) {
515
- throw new Error('Database table name is missing in entity master.');
516
- }
517
-
518
- const data = await this.reflectionHelper.getEntityData(
519
- entityId,
520
- entityData.data_source,
521
- );
522
-
523
- return this.resolverService.getResolvedData(loggedInUser, data, entityType);
524
- }
525
- }
1
+ import { EntityService } from './entity.service';
2
+ import {
3
+ BadRequestException,
4
+ forwardRef,
5
+ Inject,
6
+ Injectable,
7
+ NotFoundException,
8
+ } from '@nestjs/common';
9
+ import { UserData } from '../../user/entity/user.entity';
10
+ import { EntityMasterService } from './entity-master.service';
11
+ import { ReflectionHelper } from '../../../utils/service/reflection-helper.service';
12
+ import { BaseEntity } from '../entity/base-entity.entity';
13
+ import { LoggingService } from '../../../utils/service/loggingUtil.service';
14
+ import { EntityListData } from '../dto/entity-list-data.dto';
15
+ import { EntityListService } from './entity-list.service';
16
+ import { EntityManager } from 'typeorm';
17
+ import { ExcelData } from '../../../utils/dto/excel-data.dto';
18
+ import * as fs from 'fs';
19
+ import * as path from 'path';
20
+ import { ExcelHelper } from '../../../utils/service/excel-helper.service';
21
+ import { ExcelsheetData } from '../../../utils/dto/excelsheet-data.dto';
22
+ import { EntityTableService } from './entity-table.service';
23
+ import { EntityTableColumnService } from './entity-table-column.service';
24
+ import {
25
+ ENTITYTYPE_ENTITYMASTER,
26
+ STATUS_ACTIVE,
27
+ } from '../../../constant/global.constant';
28
+ import { EntityValidationService } from './entity-validation.service';
29
+ import { AttributeMasterService } from './attribute-master.service';
30
+ import { ResolverService } from './resolver.service';
31
+
32
+ @Injectable()
33
+ export class EntityServiceImpl implements EntityService<BaseEntity> {
34
+ @Inject() protected readonly entityMasterService: EntityMasterService;
35
+ @Inject()
36
+ protected readonly entityTableColumnService: EntityTableColumnService;
37
+ @Inject() protected readonly entityTableService: EntityTableService;
38
+ @Inject() protected readonly reflectionHelper: ReflectionHelper;
39
+ @Inject() protected readonly entityListService: EntityListService;
40
+ @Inject() protected readonly loggingService: LoggingService;
41
+ @Inject()
42
+ protected readonly entityValidationService: EntityValidationService;
43
+ protected readonly attributeMasterService: AttributeMasterService;
44
+ @Inject(forwardRef(() => ResolverService))
45
+ protected readonly resolverService: ResolverService;
46
+
47
+ async createEntity(
48
+ entityData: BaseEntity,
49
+ loggedInUser: UserData | null,
50
+ manager?: EntityManager | null,
51
+ appcode?: string,
52
+ ) {
53
+ if (!entityData.entity_type) {
54
+ throw new BadRequestException(`EntityType is missing`);
55
+ }
56
+ const entityMaster = await this.entityMasterService.getEntityData(
57
+ entityData.entity_type,
58
+ loggedInUser,
59
+ );
60
+
61
+ const validationErrors =
62
+ await this.entityValidationService.validateEntityData(
63
+ entityData,
64
+ entityMaster,
65
+ loggedInUser,
66
+ );
67
+ console.log('Validation Errors:', validationErrors); // Debug log
68
+ if (validationErrors && validationErrors.length > 0) {
69
+ return {
70
+ success: false,
71
+ message: 'Validation failed',
72
+ errors: validationErrors,
73
+ };
74
+ }
75
+
76
+ const repo = manager
77
+ ? manager.getRepository(entityMaster.entity_data_class) // <-- Use transaction-safe repo
78
+ : this.reflectionHelper.getRepoService(entityMaster.entity_data_class);
79
+
80
+ if (!repo) {
81
+ throw new Error(
82
+ `Repository service not found for entityType: ${entityData.entity_type}`,
83
+ );
84
+ }
85
+
86
+ if (!entityData.code && loggedInUser) {
87
+ let maxSeqNo = await this.getMaxSequenceNumber(
88
+ entityData.entity_type,
89
+ entityData.parent_id,
90
+ entityData.parent_type,
91
+ loggedInUser,
92
+ );
93
+ maxSeqNo = Number(maxSeqNo) + 1;
94
+ entityData.code = entityData.entity_type + maxSeqNo;
95
+ }
96
+
97
+ // const resolveStatus = await this.listMasterService.getResolvedListCode(
98
+ // STATUS_ACTIVE,
99
+ // loggedInUser?.organization_id || 0,
100
+ // );
101
+
102
+ const statusList = await repo.query(
103
+ `SELECT id
104
+ FROM frm_list_master_items
105
+ WHERE code = ?
106
+ AND organization_id = ?`,
107
+ [STATUS_ACTIVE, loggedInUser?.organization_id || -1],
108
+ );
109
+
110
+ console.log('Status List:', statusList); // Debug log
111
+ console.log(
112
+ `status_code,${STATUS_ACTIVE},statusList, ${loggedInUser?.organization_id}`,
113
+ ); // Debug log
114
+
115
+ entityData.created_date = new Date();
116
+ if (loggedInUser) {
117
+ entityData.created_by = loggedInUser.id;
118
+ if (!entityData.organization_id)
119
+ entityData.organization_id = loggedInUser.organization_id;
120
+ if (!entityData.enterprise_id)
121
+ entityData.enterprise_id = loggedInUser.enterprise_id;
122
+ if (!entityData.level_type)
123
+ entityData.level_type = loggedInUser.level_type;
124
+ if (!entityData.level_id) entityData.level_id = loggedInUser.level_id;
125
+ if (!entityData.status) entityData.status = statusList[0].id;
126
+ }
127
+
128
+ let savedData = repo.save(entityData);
129
+
130
+ return savedData;
131
+ }
132
+
133
+ async deleteEntity(entityType: string, entityId: number, loggedInUser) {
134
+ const entityMaster = await this.entityMasterService.getEntityData(
135
+ entityType,
136
+ loggedInUser,
137
+ );
138
+
139
+ const repoService = this.reflectionHelper.getRepoService(
140
+ entityMaster.entity_data_class,
141
+ );
142
+ if (!repoService) {
143
+ throw new Error(
144
+ `Repository service not found for entityType: ${entityType}`,
145
+ );
146
+ }
147
+
148
+ const entityData = await repoService.findOne({ where: { id: entityId } });
149
+
150
+ if (!entityData) {
151
+ throw new Error(`Entity not found for entityType: ${entityType}`);
152
+ }
153
+
154
+ await repoService.delete(entityId);
155
+
156
+ return {
157
+ success: true,
158
+ message: `Entity with id ${entityId} deleted successfully.`,
159
+ };
160
+ }
161
+
162
+ async findByCode(
163
+ entityType: string,
164
+ code: string,
165
+ loggedInUser,
166
+ ): Promise<BaseEntity> {
167
+ const entityData = await this.entityMasterService.getEntityData(
168
+ entityType,
169
+ loggedInUser,
170
+ );
171
+
172
+ const repoService = this.reflectionHelper.getRepoService(
173
+ entityData.entity_data_class,
174
+ );
175
+ if (!repoService) {
176
+ throw new Error(
177
+ `Repository service not found for entityType: ${entityType}`,
178
+ );
179
+ }
180
+ const result = await repoService?.findOne({ where: { code: code } });
181
+
182
+ if (!result) {
183
+ throw new Error(`Entity not found for entityType: ${entityType}`);
184
+ }
185
+ return result;
186
+ }
187
+
188
+ async getEntityData(
189
+ entityType: string,
190
+ id: number,
191
+ loggedInUser,
192
+ ): Promise<any> {
193
+ const entityData = await this.entityMasterService.getEntityData(
194
+ entityType,
195
+ loggedInUser,
196
+ );
197
+
198
+ const repoService = this.reflectionHelper.getRepoService(
199
+ entityData.entity_data_class,
200
+ );
201
+ if (!repoService) {
202
+ throw new Error(
203
+ `Repository service not found for entityType: ${entityType}`,
204
+ );
205
+ }
206
+ return await repoService.findOne({ where: { id: id } });
207
+ }
208
+
209
+ async getEntityDataAll(
210
+ entityType: string,
211
+ type: {},
212
+ loggedInUser: UserData,
213
+ ): Promise<BaseEntity[] | null> {
214
+ const entityData = await this.entityMasterService.getEntityData(
215
+ entityType,
216
+ loggedInUser,
217
+ );
218
+
219
+ const repoService = this.reflectionHelper.getRepoService(
220
+ entityData.entity_data_class,
221
+ );
222
+ if (!repoService) {
223
+ throw new Error(
224
+ `Repository service not found for entityType: ${entityType}`,
225
+ );
226
+ }
227
+ return await repoService.find({ where: type });
228
+ }
229
+
230
+ async getEntityDataByCode(
231
+ entityType: string,
232
+ code: string,
233
+ loggedInUser: UserData,
234
+ ): Promise<BaseEntity | null> {
235
+ const entityData = await this.entityMasterService.getEntityData(
236
+ entityType,
237
+ loggedInUser,
238
+ );
239
+
240
+ const repoService = this.reflectionHelper.getRepoService(
241
+ entityData.entity_data_class,
242
+ );
243
+ if (!repoService) {
244
+ throw new BadRequestException(
245
+ `Repository service not found for entityType: ${entityType}`,
246
+ );
247
+ }
248
+ const data = await repoService.findOne({ where: { code: code } });
249
+
250
+ if (!data) {
251
+ throw new NotFoundException(`Data not found for Code: ${code}`);
252
+ }
253
+ return data;
254
+ }
255
+
256
+ async getEntityList(
257
+ entityType: string,
258
+ filters: Record<string, any> = {},
259
+ loggedInUser: UserData,
260
+ ): Promise<BaseEntity[]> {
261
+ const entityData = await this.entityMasterService.getEntityData(
262
+ entityType,
263
+ loggedInUser,
264
+ );
265
+ const repoService = this.reflectionHelper.getRepoService(
266
+ entityData.entity_data_class,
267
+ );
268
+
269
+ if (!repoService) {
270
+ throw new Error(
271
+ `Repository service not found for entityType: ${entityType}`,
272
+ );
273
+ }
274
+
275
+ const result = await repoService.find({
276
+ where: filters,
277
+ });
278
+
279
+ return result;
280
+ }
281
+
282
+ async updateEntity(
283
+ entityData: BaseEntity,
284
+ loggedInUser: UserData,
285
+ appcode?: string,
286
+ ) {
287
+ const entityMaster = await this.entityMasterService.getEntityData(
288
+ entityData.entity_type,
289
+ loggedInUser,
290
+ );
291
+
292
+ const validationErrors =
293
+ await this.entityValidationService.validateEntityData(
294
+ entityData,
295
+ entityMaster,
296
+ loggedInUser,
297
+ );
298
+ console.log('Validation Errors For Update:', validationErrors); // Debug log
299
+ if (validationErrors && validationErrors.length > 0) {
300
+ return {
301
+ success: false,
302
+ message: 'Validation failed',
303
+ errors: validationErrors,
304
+ };
305
+ }
306
+
307
+ const repoService = this.reflectionHelper.getRepoService(
308
+ entityMaster.entity_data_class,
309
+ );
310
+ if (!repoService) {
311
+ throw new Error(
312
+ `Repository service not found for entityType: ${entityData.entity_type}`,
313
+ );
314
+ }
315
+
316
+ entityData.modified_date = new Date();
317
+ if (loggedInUser) {
318
+ entityData.modified_by = loggedInUser.id;
319
+ if (!entityData.organization_id && entityData.entity_type !== 'ORG')
320
+ entityData.organization_id = loggedInUser.organization_id;
321
+ if (!entityData.enterprise_id)
322
+ entityData.enterprise_id = loggedInUser.enterprise_id;
323
+ }
324
+ await repoService.update(entityData.id, entityData);
325
+ return await repoService.findOne({ where: { id: entityData.id } });
326
+ }
327
+
328
+ async getFilterDataWithTabs(
329
+ entityType: string,
330
+ listType: string,
331
+ filters: Record<string, any>,
332
+ sortColumn: string | undefined,
333
+ sortOrder: string | undefined,
334
+ pageNumber: number,
335
+ pageSize: number,
336
+ tabColumn?: string,
337
+ tabValue?: string,
338
+ appcode?: string,
339
+ ): Promise<EntityListData> {
340
+ return await this.entityListService.getFilterDataWithTabs(
341
+ entityType,
342
+ listType,
343
+ filters,
344
+ sortColumn,
345
+ sortOrder,
346
+ pageNumber,
347
+ pageSize,
348
+ tabColumn,
349
+ tabValue,
350
+ appcode,
351
+ );
352
+ }
353
+
354
+ async generateExcelReport(
355
+ entityType: string,
356
+ filterCriteria: Record<string, any>,
357
+ listEntityType: string,
358
+ displayType: string,
359
+ sampleExport: boolean,
360
+ loggedInUser: UserData,
361
+ ): Promise<string | null> {
362
+ let fileName: string;
363
+ try {
364
+ const excelData = new ExcelData();
365
+ await this.populateExcelData(
366
+ excelData,
367
+ entityType,
368
+ filterCriteria,
369
+ listEntityType,
370
+ displayType,
371
+ sampleExport,
372
+ loggedInUser,
373
+ );
374
+
375
+ const modifiedDate = new Date().toISOString().replace(/[-T:.Z]/g, '');
376
+ const tempDir = path.join(__dirname, '../../temp');
377
+ if (!fs.existsSync(tempDir)) {
378
+ fs.mkdirSync(tempDir, { recursive: true });
379
+ }
380
+ fileName = path.join(tempDir, `export_${modifiedDate}.xlsx`);
381
+ excelData.filePath = fileName;
382
+ ExcelHelper.writeExcel(excelData);
383
+ } catch (error) {
384
+ throw error;
385
+ }
386
+ return fileName;
387
+ }
388
+
389
+ private async populateExcelData(
390
+ excelData: ExcelData,
391
+ entityType: string,
392
+ filterCriteria: Record<string, any>,
393
+ listEntityType: string,
394
+ displayType: string,
395
+ sampleExport: boolean,
396
+ loggedInUser: UserData,
397
+ ) {
398
+ const entityTable =
399
+ await this.entityTableService.findByEntityTypeAndListTypeAndDisplayType(
400
+ entityType,
401
+ listEntityType,
402
+ displayType,
403
+ loggedInUser.organization_id,
404
+ );
405
+ const sheet: ExcelsheetData = {
406
+ sheetName: entityTable?.data_source || 'sheet',
407
+ headers: [],
408
+ rowList: [],
409
+ };
410
+
411
+ if (entityTable) {
412
+ const entityTableColumnList =
413
+ await this.entityTableColumnService.findByParentIdAndParentType(
414
+ entityTable.id,
415
+ entityTable.entity_type,
416
+ loggedInUser.organization_id,
417
+ );
418
+
419
+ sheet.headers = entityTableColumnList.map((col) => col.name);
420
+ const attributeList = entityTableColumnList.map(
421
+ (col) => col.attribute_key,
422
+ );
423
+
424
+ let filteredList: any[] = [];
425
+ if (!sampleExport) {
426
+ filteredList = await this.entityListService.getFilteredList(
427
+ entityTable,
428
+ filterCriteria,
429
+ undefined,
430
+ undefined,
431
+ undefined,
432
+ undefined,
433
+ );
434
+ }
435
+
436
+ sheet.rowList = filteredList.map((item) =>
437
+ attributeList.map((attr) =>
438
+ item[attr] !== undefined ? item[attr] : null,
439
+ ),
440
+ );
441
+ excelData.addSheet(sheet);
442
+ }
443
+ }
444
+
445
+ private async getMaxSequenceNumber(
446
+ entityType: string,
447
+ parentId: number,
448
+ parentType: string,
449
+ loggedInUser: UserData,
450
+ ): Promise<number> {
451
+ let tableName: string;
452
+ if (ENTITYTYPE_ENTITYMASTER === entityType) {
453
+ tableName = 'frm_entity_master';
454
+ } else {
455
+ const entityMaster = await this.entityMasterService.getEntityData(
456
+ entityType,
457
+ loggedInUser,
458
+ );
459
+ tableName = entityMaster.db_table_name;
460
+ }
461
+ return await this.entityListService.getMaxSequenceNumber(
462
+ tableName,
463
+ parentType,
464
+ parentId,
465
+ );
466
+ }
467
+
468
+ async getSingleResolvedData(
469
+ loggedInUser: UserData,
470
+ entityData: any,
471
+ entityType: string,
472
+ ): Promise<any> {
473
+ return this.resolverService.getResolvedData(
474
+ loggedInUser,
475
+ entityData,
476
+ entityType,
477
+ );
478
+ }
479
+
480
+ async getResolvedEntityData(
481
+ entityType: string,
482
+ entityId: number,
483
+ loggedInUser: UserData,
484
+ ): Promise<any> {
485
+ const entityData = await this.entityMasterService.getEntityData(
486
+ entityType,
487
+ loggedInUser,
488
+ );
489
+
490
+ const repoService = this.reflectionHelper.getRepoService(
491
+ entityData.entity_data_class,
492
+ );
493
+
494
+ if (!repoService) {
495
+ throw new Error(
496
+ `Repository service not found for entityType: ${entityType}`,
497
+ );
498
+ }
499
+ const data = await repoService.findOne({ where: { id: entityId } });
500
+
501
+ return this.resolverService.getResolvedData(loggedInUser, data, entityType);
502
+ }
503
+
504
+ async getResolvedEntityDataByDataSource(
505
+ entityType: string,
506
+ entityId: number,
507
+ loggedInUser: UserData,
508
+ ): Promise<any> {
509
+ const entityData = await this.entityMasterService.getEntityData(
510
+ entityType,
511
+ loggedInUser,
512
+ );
513
+
514
+ if (!entityData.data_source) {
515
+ throw new Error('Database table name is missing in entity master.');
516
+ }
517
+
518
+ const data = await this.reflectionHelper.getEntityData(
519
+ entityId,
520
+ entityData.data_source,
521
+ );
522
+
523
+ return this.resolverService.getResolvedData(loggedInUser, data, entityType);
524
+ }
525
+ }