rez_core 0.0.1

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 (345) hide show
  1. package/.env +6 -0
  2. package/.husky/pre-commit +0 -0
  3. package/.prettierrc +4 -0
  4. package/README.md +99 -0
  5. package/dist/app.controller.d.ts +6 -0
  6. package/dist/app.controller.js +34 -0
  7. package/dist/app.controller.js.map +1 -0
  8. package/dist/app.module.d.ts +2 -0
  9. package/dist/app.module.js +32 -0
  10. package/dist/app.module.js.map +1 -0
  11. package/dist/app.service.d.ts +3 -0
  12. package/dist/app.service.js +20 -0
  13. package/dist/app.service.js.map +1 -0
  14. package/dist/config/config.module.d.ts +2 -0
  15. package/dist/config/config.module.js +29 -0
  16. package/dist/config/config.module.js.map +1 -0
  17. package/dist/config/database.config.d.ts +4 -0
  18. package/dist/config/database.config.js +30 -0
  19. package/dist/config/database.config.js.map +1 -0
  20. package/dist/constant/global.constant.d.ts +9 -0
  21. package/dist/constant/global.constant.js +13 -0
  22. package/dist/constant/global.constant.js.map +1 -0
  23. package/dist/constant/status.constant.d.ts +4 -0
  24. package/dist/constant/status.constant.js +9 -0
  25. package/dist/constant/status.constant.js.map +1 -0
  26. package/dist/core.module.d.ts +4 -0
  27. package/dist/core.module.js +51 -0
  28. package/dist/core.module.js.map +1 -0
  29. package/dist/decorators/roles.decorator.d.ts +1 -0
  30. package/dist/decorators/roles.decorator.js +7 -0
  31. package/dist/decorators/roles.decorator.js.map +1 -0
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.js +18 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/main.d.ts +1 -0
  36. package/dist/main.js +36 -0
  37. package/dist/main.js.map +1 -0
  38. package/dist/module/auth/auth.module.d.ts +2 -0
  39. package/dist/module/auth/auth.module.js +49 -0
  40. package/dist/module/auth/auth.module.js.map +1 -0
  41. package/dist/module/auth/guards/google-auth.guard.d.ts +6 -0
  42. package/dist/module/auth/guards/google-auth.guard.js +21 -0
  43. package/dist/module/auth/guards/google-auth.guard.js.map +1 -0
  44. package/dist/module/auth/guards/jwt.guard.d.ts +10 -0
  45. package/dist/module/auth/guards/jwt.guard.js +36 -0
  46. package/dist/module/auth/guards/jwt.guard.js.map +1 -0
  47. package/dist/module/auth/guards/role.guard.d.ts +9 -0
  48. package/dist/module/auth/guards/role.guard.js +59 -0
  49. package/dist/module/auth/guards/role.guard.js.map +1 -0
  50. package/dist/module/auth/services/auth.service.d.ts +12 -0
  51. package/dist/module/auth/services/auth.service.js +43 -0
  52. package/dist/module/auth/services/auth.service.js.map +1 -0
  53. package/dist/module/auth/services/jwt.service.d.ts +6 -0
  54. package/dist/module/auth/services/jwt.service.js +28 -0
  55. package/dist/module/auth/services/jwt.service.js.map +1 -0
  56. package/dist/module/auth/strategies/google.strategy.d.ts +7 -0
  57. package/dist/module/auth/strategies/google.strategy.js +36 -0
  58. package/dist/module/auth/strategies/google.strategy.js.map +1 -0
  59. package/dist/module/auth/strategies/jwt.strategy.d.ts +14 -0
  60. package/dist/module/auth/strategies/jwt.strategy.js +54 -0
  61. package/dist/module/auth/strategies/jwt.strategy.js.map +1 -0
  62. package/dist/module/auth/strategies/local.strategy.d.ts +7 -0
  63. package/dist/module/auth/strategies/local.strategy.js +30 -0
  64. package/dist/module/auth/strategies/local.strategy.js.map +1 -0
  65. package/dist/module/dev/dev.module.d.ts +2 -0
  66. package/dist/module/dev/dev.module.js +25 -0
  67. package/dist/module/dev/dev.module.js.map +1 -0
  68. package/dist/module/dev/service/dev.service.d.ts +5 -0
  69. package/dist/module/dev/service/dev.service.js +25 -0
  70. package/dist/module/dev/service/dev.service.js.map +1 -0
  71. package/dist/module/enterprise/enterprise.module.d.ts +2 -0
  72. package/dist/module/enterprise/enterprise.module.js +19 -0
  73. package/dist/module/enterprise/enterprise.module.js.map +1 -0
  74. package/dist/module/enterprise/entity/enterprise.entity.d.ts +13 -0
  75. package/dist/module/enterprise/entity/enterprise.entity.js +64 -0
  76. package/dist/module/enterprise/entity/enterprise.entity.js.map +1 -0
  77. package/dist/module/enterprise/entity/organization.entity.d.ts +26 -0
  78. package/dist/module/enterprise/entity/organization.entity.js +120 -0
  79. package/dist/module/enterprise/entity/organization.entity.js.map +1 -0
  80. package/dist/module/master/controller/master.controller.d.ts +6 -0
  81. package/dist/module/master/controller/master.controller.js +43 -0
  82. package/dist/module/master/controller/master.controller.js.map +1 -0
  83. package/dist/module/master/service/master.service.d.ts +9 -0
  84. package/dist/module/master/service/master.service.js +50 -0
  85. package/dist/module/master/service/master.service.js.map +1 -0
  86. package/dist/module/meta/controller/entity.controller.d.ts +14 -0
  87. package/dist/module/meta/controller/entity.controller.js +98 -0
  88. package/dist/module/meta/controller/entity.controller.js.map +1 -0
  89. package/dist/module/meta/dto/entity-list-data.dto.d.ts +5 -0
  90. package/dist/module/meta/dto/entity-list-data.dto.js +7 -0
  91. package/dist/module/meta/dto/entity-list-data.dto.js.map +1 -0
  92. package/dist/module/meta/dto/entity-tab.dto.d.ts +4 -0
  93. package/dist/module/meta/dto/entity-tab.dto.js +7 -0
  94. package/dist/module/meta/dto/entity-tab.dto.js.map +1 -0
  95. package/dist/module/meta/entity/attribute-master.entity.d.ts +17 -0
  96. package/dist/module/meta/entity/attribute-master.entity.js +97 -0
  97. package/dist/module/meta/entity/attribute-master.entity.js.map +1 -0
  98. package/dist/module/meta/entity/base-entity.entity.d.ts +17 -0
  99. package/dist/module/meta/entity/base-entity.entity.js +91 -0
  100. package/dist/module/meta/entity/base-entity.entity.js.map +1 -0
  101. package/dist/module/meta/entity/entity-master.entity.d.ts +12 -0
  102. package/dist/module/meta/entity/entity-master.entity.js +86 -0
  103. package/dist/module/meta/entity/entity-master.entity.js.map +1 -0
  104. package/dist/module/meta/entity/entity-table-column.entity.d.ts +0 -0
  105. package/dist/module/meta/entity/entity-table-column.entity.js +1 -0
  106. package/dist/module/meta/entity/entity-table-column.entity.js.map +1 -0
  107. package/dist/module/meta/entity/entity-table.entity.d.ts +0 -0
  108. package/dist/module/meta/entity/entity-table.entity.js +1 -0
  109. package/dist/module/meta/entity/entity-table.entity.js.map +1 -0
  110. package/dist/module/meta/entity/preference.entity.d.ts +12 -0
  111. package/dist/module/meta/entity/preference.entity.js +89 -0
  112. package/dist/module/meta/entity/preference.entity.js.map +1 -0
  113. package/dist/module/meta/entity.module.d.ts +2 -0
  114. package/dist/module/meta/entity.module.js +45 -0
  115. package/dist/module/meta/entity.module.js.map +1 -0
  116. package/dist/module/meta/repository/attribute-master.repository.d.ts +7 -0
  117. package/dist/module/meta/repository/attribute-master.repository.js +41 -0
  118. package/dist/module/meta/repository/attribute-master.repository.js.map +1 -0
  119. package/dist/module/meta/repository/entity-table-column.repository.d.ts +7 -0
  120. package/dist/module/meta/repository/entity-table-column.repository.js +39 -0
  121. package/dist/module/meta/repository/entity-table-column.repository.js.map +1 -0
  122. package/dist/module/meta/repository/entity-table.repository.d.ts +7 -0
  123. package/dist/module/meta/repository/entity-table.repository.js +36 -0
  124. package/dist/module/meta/repository/entity-table.repository.js.map +1 -0
  125. package/dist/module/meta/repository/preference.repository.d.ts +7 -0
  126. package/dist/module/meta/repository/preference.repository.js +36 -0
  127. package/dist/module/meta/repository/preference.repository.js.map +1 -0
  128. package/dist/module/meta/service/entity-list.service.d.ts +15 -0
  129. package/dist/module/meta/service/entity-list.service.js +111 -0
  130. package/dist/module/meta/service/entity-list.service.js.map +1 -0
  131. package/dist/module/meta/service/entity-master.service.d.ts +7 -0
  132. package/dist/module/meta/service/entity-master.service.js +40 -0
  133. package/dist/module/meta/service/entity-master.service.js.map +1 -0
  134. package/dist/module/meta/service/entity-service-impl.service.d.ts +17 -0
  135. package/dist/module/meta/service/entity-service-impl.service.js +87 -0
  136. package/dist/module/meta/service/entity-service-impl.service.js.map +1 -0
  137. package/dist/module/meta/service/entity-table-column.service.d.ts +6 -0
  138. package/dist/module/meta/service/entity-table-column.service.js +33 -0
  139. package/dist/module/meta/service/entity-table-column.service.js.map +1 -0
  140. package/dist/module/meta/service/entity-table.service.d.ts +6 -0
  141. package/dist/module/meta/service/entity-table.service.js +28 -0
  142. package/dist/module/meta/service/entity-table.service.js.map +1 -0
  143. package/dist/module/meta/service/entity.service.d.ts +10 -0
  144. package/dist/module/meta/service/entity.service.js +3 -0
  145. package/dist/module/meta/service/entity.service.js.map +1 -0
  146. package/dist/module/meta/service/preference.service.d.ts +10 -0
  147. package/dist/module/meta/service/preference.service.js +37 -0
  148. package/dist/module/meta/service/preference.service.js.map +1 -0
  149. package/dist/module/module/controller/menu.controller.d.ts +8 -0
  150. package/dist/module/module/controller/menu.controller.js +41 -0
  151. package/dist/module/module/controller/menu.controller.js.map +1 -0
  152. package/dist/module/module/controller/module-access.controller.d.ts +13 -0
  153. package/dist/module/module/controller/module-access.controller.js +49 -0
  154. package/dist/module/module/controller/module-access.controller.js.map +1 -0
  155. package/dist/module/module/entity/menu.entity.d.ts +14 -0
  156. package/dist/module/module/entity/menu.entity.js +65 -0
  157. package/dist/module/module/entity/menu.entity.js.map +1 -0
  158. package/dist/module/module/entity/module-access.entity.d.ts +8 -0
  159. package/dist/module/module/entity/module-access.entity.js +44 -0
  160. package/dist/module/module/entity/module-access.entity.js.map +1 -0
  161. package/dist/module/module/entity/module-action.entity.d.ts +7 -0
  162. package/dist/module/module/entity/module-action.entity.js +40 -0
  163. package/dist/module/module/entity/module-action.entity.js.map +1 -0
  164. package/dist/module/module/entity/module.entity.d.ts +11 -0
  165. package/dist/module/module/entity/module.entity.js +53 -0
  166. package/dist/module/module/entity/module.entity.js.map +1 -0
  167. package/dist/module/module/module.module.d.ts +2 -0
  168. package/dist/module/module/module.module.js +53 -0
  169. package/dist/module/module/module.module.js.map +1 -0
  170. package/dist/module/module/repository/menu.repository.d.ts +9 -0
  171. package/dist/module/module/repository/menu.repository.js +64 -0
  172. package/dist/module/module/repository/menu.repository.js.map +1 -0
  173. package/dist/module/module/repository/module-access.repository.d.ts +15 -0
  174. package/dist/module/module/repository/module-access.repository.js +82 -0
  175. package/dist/module/module/repository/module-access.repository.js.map +1 -0
  176. package/dist/module/module/service/menu.service.d.ts +9 -0
  177. package/dist/module/module/service/menu.service.js +55 -0
  178. package/dist/module/module/service/menu.service.js.map +1 -0
  179. package/dist/module/module/service/module-access.service.d.ts +13 -0
  180. package/dist/module/module/service/module-access.service.js +40 -0
  181. package/dist/module/module/service/module-access.service.js.map +1 -0
  182. package/dist/module/user/controller/login.controller.d.ts +14 -0
  183. package/dist/module/user/controller/login.controller.js +80 -0
  184. package/dist/module/user/controller/login.controller.js.map +1 -0
  185. package/dist/module/user/controller/user.controller.d.ts +8 -0
  186. package/dist/module/user/controller/user.controller.js +42 -0
  187. package/dist/module/user/controller/user.controller.js.map +1 -0
  188. package/dist/module/user/dto/create-user.dto.d.ts +10 -0
  189. package/dist/module/user/dto/create-user.dto.js +64 -0
  190. package/dist/module/user/dto/create-user.dto.js.map +1 -0
  191. package/dist/module/user/entity/role.entity.d.ts +7 -0
  192. package/dist/module/user/entity/role.entity.js +39 -0
  193. package/dist/module/user/entity/role.entity.js.map +1 -0
  194. package/dist/module/user/entity/user-role-mapping.entity.d.ts +7 -0
  195. package/dist/module/user/entity/user-role-mapping.entity.js +41 -0
  196. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -0
  197. package/dist/module/user/entity/user-session.entity.d.ts +11 -0
  198. package/dist/module/user/entity/user-session.entity.js +86 -0
  199. package/dist/module/user/entity/user-session.entity.js.map +1 -0
  200. package/dist/module/user/entity/user.entity.d.ts +12 -0
  201. package/dist/module/user/entity/user.entity.js +59 -0
  202. package/dist/module/user/entity/user.entity.js.map +1 -0
  203. package/dist/module/user/repository/role.repository.d.ts +7 -0
  204. package/dist/module/user/repository/role.repository.js +34 -0
  205. package/dist/module/user/repository/role.repository.js.map +1 -0
  206. package/dist/module/user/repository/user-role-mapping.repository.d.ts +12 -0
  207. package/dist/module/user/repository/user-role-mapping.repository.js +55 -0
  208. package/dist/module/user/repository/user-role-mapping.repository.js.map +1 -0
  209. package/dist/module/user/repository/user.repository.d.ts +10 -0
  210. package/dist/module/user/repository/user.repository.js +49 -0
  211. package/dist/module/user/repository/user.repository.js.map +1 -0
  212. package/dist/module/user/repository/userSession.repository.d.ts +10 -0
  213. package/dist/module/user/repository/userSession.repository.js +45 -0
  214. package/dist/module/user/repository/userSession.repository.js.map +1 -0
  215. package/dist/module/user/service/login.service.d.ts +18 -0
  216. package/dist/module/user/service/login.service.js +69 -0
  217. package/dist/module/user/service/login.service.js.map +1 -0
  218. package/dist/module/user/service/role.service.d.ts +10 -0
  219. package/dist/module/user/service/role.service.js +34 -0
  220. package/dist/module/user/service/role.service.js.map +1 -0
  221. package/dist/module/user/service/user-role-mapping.service.d.ts +9 -0
  222. package/dist/module/user/service/user-role-mapping.service.js +37 -0
  223. package/dist/module/user/service/user-role-mapping.service.js.map +1 -0
  224. package/dist/module/user/service/user-session.service.d.ts +13 -0
  225. package/dist/module/user/service/user-session.service.js +51 -0
  226. package/dist/module/user/service/user-session.service.js.map +1 -0
  227. package/dist/module/user/service/user.service.d.ts +17 -0
  228. package/dist/module/user/service/user.service.js +112 -0
  229. package/dist/module/user/service/user.service.js.map +1 -0
  230. package/dist/module/user/user.module.d.ts +2 -0
  231. package/dist/module/user/user.module.js +64 -0
  232. package/dist/module/user/user.module.js.map +1 -0
  233. package/dist/tsconfig.build.tsbuildinfo +1 -0
  234. package/dist/utils/service/base64util.service.d.ts +4 -0
  235. package/dist/utils/service/base64util.service.js +21 -0
  236. package/dist/utils/service/base64util.service.js.map +1 -0
  237. package/dist/utils/service/clockIDGenUtil.service.d.ts +8 -0
  238. package/dist/utils/service/clockIDGenUtil.service.js +31 -0
  239. package/dist/utils/service/clockIDGenUtil.service.js.map +1 -0
  240. package/dist/utils/service/dateUtil.service.d.ts +3 -0
  241. package/dist/utils/service/dateUtil.service.js +28 -0
  242. package/dist/utils/service/dateUtil.service.js.map +1 -0
  243. package/dist/utils/service/encryptUtil.service.d.ts +9 -0
  244. package/dist/utils/service/encryptUtil.service.js +112 -0
  245. package/dist/utils/service/encryptUtil.service.js.map +1 -0
  246. package/dist/utils/service/excel-helper.service.d.ts +7 -0
  247. package/dist/utils/service/excel-helper.service.js +44 -0
  248. package/dist/utils/service/excel-helper.service.js.map +1 -0
  249. package/dist/utils/service/excelUtil.service.d.ts +3 -0
  250. package/dist/utils/service/excelUtil.service.js +17 -0
  251. package/dist/utils/service/excelUtil.service.js.map +1 -0
  252. package/dist/utils/service/json-util.service.d.ts +3 -0
  253. package/dist/utils/service/json-util.service.js +24 -0
  254. package/dist/utils/service/json-util.service.js.map +1 -0
  255. package/dist/utils/service/loggingUtil.service.d.ts +4 -0
  256. package/dist/utils/service/loggingUtil.service.js +49 -0
  257. package/dist/utils/service/loggingUtil.service.js.map +1 -0
  258. package/dist/utils/service/reflection-helper.service.d.ts +9 -0
  259. package/dist/utils/service/reflection-helper.service.js +60 -0
  260. package/dist/utils/service/reflection-helper.service.js.map +1 -0
  261. package/dist/utils/utils.module.d.ts +2 -0
  262. package/dist/utils/utils.module.js +26 -0
  263. package/dist/utils/utils.module.js.map +1 -0
  264. package/eslint.config.mjs +35 -0
  265. package/nest-cli.json +8 -0
  266. package/package.json +97 -0
  267. package/src/app.controller.ts +12 -0
  268. package/src/app.service.ts +8 -0
  269. package/src/config/config.module.ts +18 -0
  270. package/src/config/database.config.ts +20 -0
  271. package/src/constant/global.constant.ts +10 -0
  272. package/src/constant/status.constant.ts +3 -0
  273. package/src/core.module.ts +40 -0
  274. package/src/decorators/roles.decorator.ts +4 -0
  275. package/src/index.ts +1 -0
  276. package/src/module/auth/auth.module.ts +36 -0
  277. package/src/module/auth/guards/google-auth.guard.ts +9 -0
  278. package/src/module/auth/guards/jwt.guard.ts +22 -0
  279. package/src/module/auth/guards/role.guard.ts +68 -0
  280. package/src/module/auth/services/auth.service.ts +29 -0
  281. package/src/module/auth/services/jwt.service.ts +11 -0
  282. package/src/module/auth/strategies/google.strategy.ts +29 -0
  283. package/src/module/auth/strategies/jwt.strategy.ts +43 -0
  284. package/src/module/auth/strategies/local.strategy.ts +13 -0
  285. package/src/module/dev/dev.module.ts +12 -0
  286. package/src/module/dev/service/dev.service.ts +7 -0
  287. package/src/module/enterprise/enterprise.module.ts +8 -0
  288. package/src/module/enterprise/entity/enterprise.entity.ts +37 -0
  289. package/src/module/enterprise/entity/organization.entity.ts +80 -0
  290. package/src/module/master/controller/master.controller.ts +22 -0
  291. package/src/module/master/service/master.service.ts +37 -0
  292. package/src/module/meta/controller/entity.controller.ts +108 -0
  293. package/src/module/meta/entity/attribute-master.entity.ts +67 -0
  294. package/src/module/meta/entity/base-entity.entity.ts +53 -0
  295. package/src/module/meta/entity/entity-master.entity.ts +62 -0
  296. package/src/module/meta/entity/entity-table-column.entity.ts +0 -0
  297. package/src/module/meta/entity/entity-table.entity.ts +0 -0
  298. package/src/module/meta/entity/preference.entity.ts +65 -0
  299. package/src/module/meta/entity.module.ts +32 -0
  300. package/src/module/meta/repository/attribute-master.repository.ts +28 -0
  301. package/src/module/meta/repository/preference.repository.ts +20 -0
  302. package/src/module/meta/service/entity-master.service.ts +26 -0
  303. package/src/module/meta/service/entity-service-impl.service.ts +131 -0
  304. package/src/module/meta/service/entity.service.ts +23 -0
  305. package/src/module/meta/service/preference.service.ts +24 -0
  306. package/src/module/module/controller/menu.controller.ts +15 -0
  307. package/src/module/module/controller/module-access.controller.ts +20 -0
  308. package/src/module/module/entity/menu.entity.ts +38 -0
  309. package/src/module/module/entity/module-access.entity.ts +22 -0
  310. package/src/module/module/entity/module-action.entity.ts +19 -0
  311. package/src/module/module/entity/module.entity.ts +29 -0
  312. package/src/module/module/module.module.ts +42 -0
  313. package/src/module/module/repository/menu.repository.ts +69 -0
  314. package/src/module/module/repository/module-access.repository.ts +66 -0
  315. package/src/module/module/service/menu.service.ts +61 -0
  316. package/src/module/module/service/module-access.service.ts +25 -0
  317. package/src/module/user/controller/login.controller.ts +55 -0
  318. package/src/module/user/controller/user.controller.ts +28 -0
  319. package/src/module/user/dto/create-user.dto.ts +52 -0
  320. package/src/module/user/entity/role.entity.ts +20 -0
  321. package/src/module/user/entity/user-role-mapping.entity.ts +21 -0
  322. package/src/module/user/entity/user-session.entity.ts +61 -0
  323. package/src/module/user/entity/user.entity.ts +35 -0
  324. package/src/module/user/repository/role.repository.ts +16 -0
  325. package/src/module/user/repository/user-role-mapping.repository.ts +44 -0
  326. package/src/module/user/repository/user.repository.ts +33 -0
  327. package/src/module/user/repository/userSession.repository.ts +33 -0
  328. package/src/module/user/service/login.service.ts +66 -0
  329. package/src/module/user/service/role.service.ts +29 -0
  330. package/src/module/user/service/user-role-mapping.service.ts +29 -0
  331. package/src/module/user/service/user-session.service.ts +41 -0
  332. package/src/module/user/service/user.service.ts +141 -0
  333. package/src/module/user/user.module.ts +51 -0
  334. package/src/utils/service/base64util.service.ts +19 -0
  335. package/src/utils/service/clockIDGenUtil.service.ts +21 -0
  336. package/src/utils/service/dateUtil.service.ts +17 -0
  337. package/src/utils/service/encryptUtil.service.ts +97 -0
  338. package/src/utils/service/excel-helper.service.ts +56 -0
  339. package/src/utils/service/excelUtil.service.ts +15 -0
  340. package/src/utils/service/json-util.service.ts +23 -0
  341. package/src/utils/service/loggingUtil.service.ts +56 -0
  342. package/src/utils/service/reflection-helper.service.ts +53 -0
  343. package/src/utils/utils.module.ts +14 -0
  344. package/tsconfig.build.json +4 -0
  345. package/tsconfig.json +23 -0
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "rez_core",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "author": "",
6
+ "private": false,
7
+ "license": "UNLICENSED",
8
+ "scripts": {
9
+ "build": "nest build",
10
+ "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
11
+ "start": "nest start",
12
+ "start:dev": "nest start --watch",
13
+ "start:debug": "nest start --debug --watch",
14
+ "start:prod": "node dist/main",
15
+ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
16
+ "test": "jest",
17
+ "test:watch": "jest --watch",
18
+ "test:cov": "jest --coverage",
19
+ "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
20
+ "test:e2e": "jest --config ./test/jest-e2e.json",
21
+ "prepare": "husky"
22
+ },
23
+ "dependencies": {
24
+ "@nestjs/common": "^11.0.1",
25
+ "@nestjs/config": "^4.0.1",
26
+ "@nestjs/core": "^11.0.1",
27
+ "@nestjs/jwt": "^11.0.0",
28
+ "@nestjs/passport": "^11.0.5",
29
+ "@nestjs/platform-express": "^11.0.1",
30
+ "@nestjs/swagger": "^11.0.3",
31
+ "@nestjs/typeorm": "^11.0.0",
32
+ "250218_nodejs_core": "file:",
33
+ "bcrypt": "^5.1.1",
34
+ "class-transformer": "^0.5.1",
35
+ "class-validator": "^0.14.1",
36
+ "crypto": "^1.0.1",
37
+ "crypto-js": "^4.2.0",
38
+ "dotenv": "^16.4.7",
39
+ "exceljs": "^4.4.0",
40
+ "moment": "^2.30.1",
41
+ "mysql2": "^3.12.0",
42
+ "passport": "^0.7.0",
43
+ "passport-google-oauth20": "^2.0.0",
44
+ "passport-jwt": "^4.0.1",
45
+ "passport-local": "^1.0.0",
46
+ "reflect-metadata": "^0.2.2",
47
+ "rxjs": "^7.8.1",
48
+ "typeorm": "^0.3.20",
49
+ "winston": "^3.17.0",
50
+ "xlsx": "^0.18.5"
51
+ },
52
+ "devDependencies": {
53
+ "@eslint/eslintrc": "^3.2.0",
54
+ "@eslint/js": "^9.18.0",
55
+ "@nestjs/cli": "^11.0.0",
56
+ "@nestjs/schematics": "^11.0.0",
57
+ "@nestjs/testing": "^11.0.1",
58
+ "@swc/cli": "^0.6.0",
59
+ "@swc/core": "^1.10.7",
60
+ "@types/express": "^5.0.0",
61
+ "@types/jest": "^29.5.14",
62
+ "@types/node": "^22.10.7",
63
+ "@types/supertest": "^6.0.2",
64
+ "eslint": "^9.18.0",
65
+ "eslint-config-prettier": "^10.0.1",
66
+ "eslint-plugin-prettier": "^5.2.2",
67
+ "globals": "^15.14.0",
68
+ "husky": "^9.1.7",
69
+ "jest": "^29.7.0",
70
+ "prettier": "^3.4.2",
71
+ "source-map-support": "^0.5.21",
72
+ "supertest": "^7.0.0",
73
+ "ts-jest": "^29.2.5",
74
+ "ts-loader": "^9.5.2",
75
+ "ts-node": "^10.9.2",
76
+ "tsconfig-paths": "^4.2.0",
77
+ "typescript": "^5.7.3",
78
+ "typescript-eslint": "^8.20.0"
79
+ },
80
+ "jest": {
81
+ "moduleFileExtensions": [
82
+ "js",
83
+ "json",
84
+ "ts"
85
+ ],
86
+ "rootDir": "src",
87
+ "testRegex": ".*\\.spec\\.ts$",
88
+ "transform": {
89
+ "^.+\\.(t|j)s$": "ts-jest"
90
+ },
91
+ "collectCoverageFrom": [
92
+ "**/*.(t|j)s"
93
+ ],
94
+ "coverageDirectory": "../coverage",
95
+ "testEnvironment": "node"
96
+ }
97
+ }
@@ -0,0 +1,12 @@
1
+ import { Controller, Get } from '@nestjs/common';
2
+ import { AppService } from './app.service';
3
+
4
+ @Controller()
5
+ export class AppController {
6
+ constructor(private readonly appService: AppService) {}
7
+
8
+ @Get()
9
+ getHello(): string {
10
+ return this.appService.getHello();
11
+ }
12
+ }
@@ -0,0 +1,8 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ @Injectable()
4
+ export class AppService {
5
+ getHello(): string {
6
+ return 'Hello World!';
7
+ }
8
+ }
@@ -0,0 +1,18 @@
1
+ import { Global, Module } from '@nestjs/common';
2
+ import { TypeOrmModule } from '@nestjs/typeorm';
3
+ // import { MySqlConfiguration } from './database.config';
4
+ import {ConfigModule} from "@nestjs/config";
5
+ import { MySqlConfiguration } from './database.config';
6
+
7
+ @Global()
8
+ @Module({
9
+ imports: [
10
+ TypeOrmModule.forRootAsync({
11
+ useClass: MySqlConfiguration,
12
+ }),
13
+ ConfigModule.forRoot({isGlobal: true})
14
+ ],
15
+ // providers: [MySqlConfiguration],
16
+ exports: [TypeOrmModule],
17
+ })
18
+ export class DatabaseModule {}
@@ -0,0 +1,20 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm';
3
+
4
+ @Injectable()
5
+ export class MySqlConfiguration implements TypeOrmOptionsFactory {
6
+
7
+ createTypeOrmOptions(): TypeOrmModuleOptions {
8
+ return {
9
+ type: 'mysql',
10
+ host: process.env.DB_HOST || 'localhost',
11
+ port: parseInt(process.env.DB_PORT || '3306', 10),
12
+ username: process.env.DB_USER || 'root',
13
+ password: process.env.DB_PASS || 'root',
14
+ database: process.env.DB_NAME || 'core',
15
+ entities: [__dirname + '/../module/**/*.entity.{ts,js}'],
16
+ synchronize: true,
17
+ autoLoadEntities: true,
18
+ };
19
+ }
20
+ }
@@ -0,0 +1,10 @@
1
+ // Entity Types
2
+ export const ENTITYTYPE_USER = 'USR';
3
+ export const ENTITYTYPE_ENTITYMASTER = 'EMS';
4
+ export const ENTITYTYPE_ROLE = 'ROL';
5
+ export const ENTITYTYPE_ENTITYTABLE = 'ETB';
6
+ export const ENTITYTYPE_ENTITYTABLECOLUMN = 'ETM';
7
+ export const ENTITYTYPE_PREFERENCEMASTER = 'PRM'
8
+ export const masterKey: string = process.env.master_key || '';
9
+ export const masterIv: string = process.env.master_iv || '';
10
+ export const secretKey: string = process.env.secret_key || '';
@@ -0,0 +1,3 @@
1
+ export enum StatusType{
2
+ ACTIVE, INACTIVE
3
+ }
@@ -0,0 +1,40 @@
1
+ import { Module, DynamicModule, Global } from '@nestjs/common';
2
+ import { ConfigModule } from '@nestjs/config'; // Import ConfigModule
3
+ import { EnterpriseModule } from './module/enterprise/enterprise.module';
4
+ import { UtilsModule } from './utils/utils.module';
5
+ import { UserModule } from './module/user/user.module';
6
+ import { EntityModule } from './module/meta/entity.module';
7
+ import { ModuleModule } from './module/module/module.module';
8
+
9
+ @Global()
10
+ @Module({})
11
+ export class CoreModule {
12
+ static forRootAsync(dbModule: DynamicModule): DynamicModule {
13
+ if (!dbModule) {
14
+ throw new Error('Database module must be provided.');
15
+ }
16
+
17
+ return {
18
+ module: CoreModule,
19
+ imports: [
20
+ ConfigModule.forRoot({ isGlobal: true }),
21
+ dbModule, // ✅ Make sure it's resolved
22
+ EntityModule,
23
+ EnterpriseModule,
24
+ UtilsModule,
25
+ UserModule,
26
+ ModuleModule,
27
+ ],
28
+ exports: [
29
+ ConfigModule,
30
+ dbModule,
31
+ EntityModule,
32
+ EnterpriseModule,
33
+ UtilsModule,
34
+ UserModule,
35
+ ModuleModule,
36
+ ],
37
+ };
38
+ }
39
+
40
+ }
@@ -0,0 +1,4 @@
1
+ import {applyDecorators, SetMetadata} from "@nestjs/common";
2
+
3
+ export const Roles = (moduleCode: string, actions: string) =>
4
+ applyDecorators(SetMetadata('moduleCode', moduleCode), SetMetadata('actions', actions));
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './core.module'
@@ -0,0 +1,36 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { ConfigModule, ConfigService } from '@nestjs/config';
3
+ import { JwtModule } from '@nestjs/jwt';
4
+ import { TypeOrmModule } from '@nestjs/typeorm';
5
+ import { JwtStrategy } from './strategies/jwt.strategy';
6
+ import { JwtAuthService } from './services/jwt.service';
7
+ import { JwtAuthGuard } from './guards/jwt.guard';
8
+ import { PassportModule } from '@nestjs/passport';
9
+ import { UserSession } from '../user/entity/user-session.entity';
10
+ import { GoogleStrategy } from './strategies/google.strategy';
11
+ import { RolesGuard } from './guards/role.guard';
12
+
13
+ @Module({
14
+ imports: [
15
+ ConfigModule, // ✅ Ensure ConfigModule is imported
16
+ PassportModule.register({ defaultStrategy: 'jwt' }),
17
+ JwtModule.registerAsync({
18
+ imports: [ConfigModule], // ✅ Ensure ConfigModule is available
19
+ inject: [ConfigService],
20
+ useFactory: async (configService: ConfigService) => ({
21
+ secret: configService.get<string>('secret_key', 'defaultSecret'), // ✅ Use ConfigService
22
+ signOptions: { expiresIn: '1800s' },
23
+ }),
24
+ }),
25
+ TypeOrmModule.forFeature([UserSession]),
26
+ ],
27
+ providers: [
28
+ JwtAuthService,
29
+ JwtStrategy,
30
+ JwtAuthGuard,
31
+ GoogleStrategy,
32
+ RolesGuard,
33
+ ],
34
+ exports: [JwtAuthService, JwtAuthGuard, RolesGuard],
35
+ })
36
+ export class AuthModule {}
@@ -0,0 +1,9 @@
1
+ import { Injectable, ExecutionContext } from '@nestjs/common';
2
+ import { AuthGuard } from '@nestjs/passport';
3
+
4
+ @Injectable()
5
+ export class GoogleAuthGuard extends AuthGuard('google') {
6
+ canActivate(context: ExecutionContext) {
7
+ return super.canActivate(context);
8
+ }
9
+ }
@@ -0,0 +1,22 @@
1
+ import { ExecutionContext, Injectable } from '@nestjs/common';
2
+ import { AuthGuard } from '@nestjs/passport';
3
+ import { Reflector } from '@nestjs/core';
4
+ import { Observable } from 'rxjs';
5
+
6
+ @Injectable()
7
+ export class JwtAuthGuard extends AuthGuard('jwt') {
8
+ constructor(private reflector: Reflector) {
9
+ super();
10
+ }
11
+
12
+ canActivate(
13
+ context: ExecutionContext,
14
+ ): Promise<boolean> | boolean | Observable<boolean> {
15
+ const isPublic = this.reflector.getAllAndOverride('isPublic', [
16
+ context.getHandler(),
17
+ context.getClass(),
18
+ ]);
19
+ if (isPublic) return true;
20
+ return super.canActivate(context);
21
+ }
22
+ }
@@ -0,0 +1,68 @@
1
+ import {
2
+ CanActivate,
3
+ ExecutionContext,
4
+ ForbiddenException,
5
+ Injectable,
6
+ UnauthorizedException,
7
+ } from '@nestjs/common';
8
+ import { Reflector } from '@nestjs/core';
9
+ import { UserData } from '../../user/entity/user.entity';
10
+ import { InjectEntityManager } from '@nestjs/typeorm';
11
+ import { EntityManager } from 'typeorm';
12
+
13
+ @Injectable()
14
+ export class RolesGuard implements CanActivate {
15
+ constructor(
16
+ private reflector: Reflector,
17
+ @InjectEntityManager() private entityManager: EntityManager,
18
+ ) {}
19
+
20
+ async canActivate(context: ExecutionContext) {
21
+ const request = context
22
+ .switchToHttp()
23
+ .getRequest<Request & { user: any }>();
24
+ const object = request.user;
25
+
26
+ const users: UserData = await this.entityManager.query(
27
+ `SELECT * FROM cr_user WHERE id = ${object.userId} LIMIT 1`,
28
+ );
29
+
30
+ const user = users[0];
31
+ if (!user || !user['role_id']) {
32
+ throw new UnauthorizedException('User not authorized');
33
+ }
34
+
35
+ const requiredModule = this.reflector.get<string>(
36
+ 'moduleCode',
37
+ context.getHandler(),
38
+ );
39
+ const requiredActions = this.reflector.get<string>(
40
+ 'actions',
41
+ context.getHandler(),
42
+ );
43
+
44
+ const roleAccess = await this.entityManager.query(
45
+ `SELECT *
46
+ FROM cr_module_access
47
+ WHERE role_id = ${user['role_id']}
48
+ AND module_code = '${requiredModule}'`,
49
+ );
50
+
51
+ if (!roleAccess || roleAccess.length === 0) {
52
+ throw new ForbiddenException(
53
+ 'Access denied: No permissions found for this module',
54
+ );
55
+ }
56
+
57
+ const hasAccess = roleAccess.some(
58
+ (access) =>
59
+ requiredActions.includes(access.action_type) &&
60
+ access.access_flag === 1,
61
+ );
62
+
63
+ if (!hasAccess) {
64
+ throw new ForbiddenException('Access denied: Insufficient permissions.');
65
+ }
66
+ return true;
67
+ }
68
+ }
@@ -0,0 +1,29 @@
1
+ import { BadRequestException, Injectable } from '@nestjs/common';
2
+ import { UserService } from '../../user/service/user.service';
3
+ import { JwtService } from '@nestjs/jwt';
4
+ import { UserData } from '../../user/entity/user.entity';
5
+
6
+ @Injectable()
7
+ export class AuthService {
8
+ constructor(
9
+ private userService: UserService,
10
+ private jwtService: JwtService,
11
+ ) {}
12
+
13
+ async validateUser(email: string, password: string): Promise<UserData> {
14
+ const user = await this.userService.findByEmailId(email);
15
+ if (!user) {
16
+ throw new BadRequestException('User not found');
17
+ }
18
+ const isMatch: boolean = password === user.password;
19
+ if (!isMatch) {
20
+ throw new BadRequestException('Password does not match');
21
+ }
22
+ return user;
23
+ }
24
+
25
+ async login(user: UserData) {
26
+ const payload = { email: user.email_id, id: user.id };
27
+ return { access_token: this.jwtService.sign(payload) };
28
+ }
29
+ }
@@ -0,0 +1,11 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { JwtService } from '@nestjs/jwt';
3
+
4
+ @Injectable()
5
+ export class JwtAuthService {
6
+ constructor(private readonly jwtService: JwtService) {}
7
+
8
+ generateJwt(payload: any): string {
9
+ return this.jwtService.sign(payload);
10
+ }
11
+ }
@@ -0,0 +1,29 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { PassportStrategy } from '@nestjs/passport';
3
+ import { Strategy, VerifyCallback } from 'passport-google-oauth20';
4
+
5
+ @Injectable()
6
+ export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
7
+ constructor() {
8
+ super({
9
+ clientID: process.env.clientID,
10
+ clientSecret: process.env.clientSecret,
11
+ callbackURL: process.env.callbackURL,
12
+ scope: ['email', 'profile'],
13
+ });
14
+ }
15
+
16
+ async validate(
17
+ accessToken: string,
18
+ refreshToken: string,
19
+ profile: any,
20
+ done: VerifyCallback,
21
+ ) {
22
+ // console.log(profile)
23
+ const { emails, name } = profile;
24
+ const email = emails?.[0]?.value;
25
+
26
+ // Pass extracted user data to the controller (No dependencies here)
27
+ return done(null, { email, name });
28
+ }
29
+ }
@@ -0,0 +1,43 @@
1
+ import { ExtractJwt, Strategy } from 'passport-jwt';
2
+ import { PassportStrategy } from '@nestjs/passport';
3
+ import { Injectable, UnauthorizedException } from '@nestjs/common';
4
+ import { InjectRepository } from '@nestjs/typeorm';
5
+ import { ConfigService } from '@nestjs/config'; // ✅ Import ConfigService
6
+ import { UserSession } from '../../../module/user/entity/user-session.entity';
7
+ import { Repository } from 'typeorm';
8
+
9
+ @Injectable()
10
+ export class JwtStrategy extends PassportStrategy(Strategy) {
11
+ constructor(
12
+ private readonly configService: ConfigService, // ✅ Inject ConfigService
13
+ @InjectRepository(UserSession)
14
+ private userSessionRepository: Repository<UserSession>,
15
+ ) {
16
+ super({
17
+ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
18
+ ignoreExpiration: false,
19
+ secretOrKey: configService.get<string>('secret_key'), // ✅ Use ConfigService
20
+ });
21
+
22
+ console.log('Loaded JWT Secret:', configService.get<string>('secret_key')); // Debugging
23
+ }
24
+
25
+ async validate(payload) {
26
+ const { userId, sessionToken } = payload;
27
+
28
+ // Check if session exists and is valid
29
+ const userSession = await this.userSessionRepository.findOne({
30
+ where: { session_key: sessionToken },
31
+ });
32
+
33
+ if (
34
+ !userSession ||
35
+ userSession.is_session_loggedout ||
36
+ new Date(userSession.expiry_date) < new Date()
37
+ ) {
38
+ throw new UnauthorizedException('Invalid or expired session');
39
+ }
40
+
41
+ return { userId, sessionToken };
42
+ }
43
+ }
@@ -0,0 +1,13 @@
1
+ import { PassportStrategy } from '@nestjs/passport';
2
+ import { AuthService } from '../services/auth.service';
3
+ import { Injectable } from '@nestjs/common';
4
+ import { Strategy } from 'passport-jwt';
5
+
6
+ @Injectable()
7
+ export class LocalStrategy extends PassportStrategy(Strategy) {
8
+ constructor(private authService: AuthService) {
9
+ super({
10
+ usernameField: 'email',
11
+ });
12
+ }
13
+ }
@@ -0,0 +1,12 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { EntityModule } from '../meta/entity.module';
3
+ import { UserModule } from '../user/user.module';
4
+ import { ModuleModule } from '../module/module.module';
5
+ import { DevService } from './service/dev.service';
6
+
7
+ @Module({
8
+ imports: [EntityModule, UserModule, ModuleModule],
9
+ controllers: [],
10
+ providers: [DevService],
11
+ })
12
+ export class DevModule {}
@@ -0,0 +1,7 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { UserService } from '../../user/service/user.service';
3
+
4
+ @Injectable()
5
+ export class DevService {
6
+ constructor(private readonly userService: UserService) {}
7
+ }
@@ -0,0 +1,8 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { TypeOrmModule } from '@nestjs/typeorm';
3
+ import { UserData } from '../user/entity/user.entity';
4
+
5
+ @Module({
6
+ imports: [],
7
+ })
8
+ export class EnterpriseModule {}
@@ -0,0 +1,37 @@
1
+ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
2
+
3
+ @Entity({ name: 'cr_enterprise' })
4
+ export class EnterpriseData {
5
+ @PrimaryGeneratedColumn({ name: 'id', type: 'bigint' })
6
+ id: number;
7
+
8
+ @Column({ name: 'entity_type', type: 'varchar', nullable: true, length: 50 })
9
+ entityType: string;
10
+
11
+ @Column({ name: 'code', type: 'varchar', nullable: true, length: 50 })
12
+ code: string;
13
+
14
+ @Column({ name: 'name', type: 'varchar', nullable: true, length: 50 })
15
+ name: string;
16
+
17
+ @Column({ name: 'status', type: 'varchar', nullable: true, length: 50 })
18
+ status: string;
19
+
20
+ @Column({ name: 'created_by', type: 'int', nullable: true })
21
+ createdBy: number;
22
+
23
+ @Column({ name: 'modified_by', type: 'int', nullable: true })
24
+ modifiedBy: number;
25
+
26
+ @Column({ name: 'created_date', type: 'datetime', nullable: true })
27
+ createdDate: Date;
28
+
29
+ @Column({ name: 'modified_date', type: 'datetime', nullable: true })
30
+ modifiedDate: Date;
31
+
32
+ @Column({ name: 'app_code', type: 'varchar', nullable: true, length: 50 })
33
+ appCode: string;
34
+
35
+ @Column({ name: 'app_url_name', type: 'varchar', nullable: true, length: 50 })
36
+ appUrlName: string;
37
+ }
@@ -0,0 +1,80 @@
1
+ import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
2
+
3
+ @Entity({ name: 'cr_organization' })
4
+ export class OrganizationData {
5
+ @PrimaryGeneratedColumn({ name: 'id', type: 'int' })
6
+ id: number;
7
+
8
+ @Column({ name: 'enterprise_id', type: 'int' })
9
+ enterprise_id: number;
10
+
11
+ @Column({ name: 'code', nullable: true })
12
+ code: string;
13
+
14
+ @Column({ name: 'app_code', nullable: true })
15
+ appCode: string;
16
+
17
+ @Column({ name: 'name', nullable: true })
18
+ name: string;
19
+
20
+ @Column({ name: 'status', type: 'varchar', nullable: true })
21
+ status: string;
22
+
23
+ @Column({ name: 'seq_no', nullable: true })
24
+ seq_no: number;
25
+
26
+ @Column({ name: 'created_by', nullable: true })
27
+ created_by: number;
28
+
29
+ @Column({ name: 'modified_by', nullable: true })
30
+ modified_by: number;
31
+
32
+ @Column({ name: 'created_date', nullable: true })
33
+ created_date: Date;
34
+
35
+ @Column({ name: 'parent_id', nullable: true })
36
+ parent_id: number;
37
+
38
+ @Column({ name: 'modified_date', nullable: true })
39
+ modified_date: Date;
40
+
41
+ @Column({ name: 'contact_number', nullable: true })
42
+ contact_number: string;
43
+
44
+ @Column({ name: 'email', nullable: true })
45
+ emailId: string;
46
+
47
+ @Column({ name: 'entity_type', nullable: true })
48
+ entity_type: string;
49
+
50
+ @Column({ name: 'primary_contact_name', nullable: true })
51
+ primary_contact_name: string;
52
+
53
+ @Column({ name: 'address', nullable: true })
54
+ address: string;
55
+
56
+ @Column({ name: 'gstin', nullable: true })
57
+ gstin: string;
58
+
59
+ @Column({ name: 'company_pan_number', nullable: true })
60
+ company_pan_number: string;
61
+
62
+ @Column({ name: 'bankacc_benef_name', nullable: true })
63
+ bankacc_benef_name: string;
64
+
65
+ @Column({ name: 'bankacc_bank_name', nullable: true })
66
+ bankacc_bank_name: string;
67
+
68
+ @Column({ name: 'bankacc_account_number', nullable: true })
69
+ bankaccAccountNumber: string;
70
+
71
+ @Column({ name: 'bankacc_branch_IFSC', nullable: true })
72
+ bankacc_account_number: string;
73
+
74
+ @Column({
75
+ name: 'organization_type',
76
+ type: 'varchar',
77
+ nullable: true,
78
+ })
79
+ organization_type: string;
80
+ }
@@ -0,0 +1,22 @@
1
+ import {
2
+ Controller,
3
+ Post,
4
+ UploadedFile,
5
+ UseInterceptors,
6
+ } from '@nestjs/common';
7
+ import { FileInterceptor } from '@nestjs/platform-express';
8
+ import { MasterService } from '../service/master.service';
9
+
10
+ @Controller('master')
11
+ export class MasterController {
12
+ constructor(private readonly masterService: MasterService) {}
13
+
14
+ @Post('upload')
15
+ @UseInterceptors(FileInterceptor('file'))
16
+ async uploadFile(@UploadedFile() file) {
17
+ if (!file) {
18
+ throw new Error('File is required');
19
+ }
20
+ return this.masterService.processExcel(file);
21
+ }
22
+ }