@gennext/lb-infra 0.1.5 → 0.2.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 (435) hide show
  1. package/README.md +264 -135
  2. package/dist/base/applications/base.application.d.ts +62 -0
  3. package/dist/base/applications/base.application.d.ts.map +1 -0
  4. package/dist/base/applications/base.application.js +54 -0
  5. package/dist/base/applications/base.application.js.map +1 -0
  6. package/dist/base/applications/index.d.ts +2 -0
  7. package/dist/base/applications/index.d.ts.map +1 -0
  8. package/dist/base/{migration → applications}/index.js +1 -2
  9. package/dist/base/applications/index.js.map +1 -0
  10. package/dist/base/controllers/base.controller.d.ts +23 -0
  11. package/dist/base/controllers/base.controller.d.ts.map +1 -0
  12. package/dist/base/controllers/base.controller.js +24 -0
  13. package/dist/base/controllers/base.controller.js.map +1 -0
  14. package/dist/base/controllers/decorators.d.ts +4 -0
  15. package/dist/base/controllers/decorators.d.ts.map +1 -0
  16. package/dist/base/controllers/decorators.js +9 -0
  17. package/dist/base/controllers/decorators.js.map +1 -0
  18. package/dist/base/controllers/index.d.ts +3 -0
  19. package/dist/base/controllers/index.d.ts.map +1 -0
  20. package/dist/{helpers/migrate → base/controllers}/index.js +2 -3
  21. package/dist/base/controllers/index.js.map +1 -0
  22. package/dist/base/datasources/base.datasource.d.ts +23 -9
  23. package/dist/base/datasources/base.datasource.d.ts.map +1 -1
  24. package/dist/base/datasources/base.datasource.js +10 -14
  25. package/dist/base/datasources/base.datasource.js.map +1 -1
  26. package/dist/base/drizzle/index.d.ts +3 -0
  27. package/dist/base/drizzle/index.d.ts.map +1 -0
  28. package/dist/{helpers/logger/transports → base/drizzle}/index.js +1 -1
  29. package/dist/base/drizzle/index.js.map +1 -0
  30. package/dist/base/drizzle/pg.d.ts +5 -0
  31. package/dist/base/drizzle/pg.d.ts.map +1 -0
  32. package/dist/base/drizzle/pg.js +19 -0
  33. package/dist/base/drizzle/pg.js.map +1 -0
  34. package/dist/base/hono/index.d.ts +3 -0
  35. package/dist/base/hono/index.d.ts.map +1 -0
  36. package/dist/{helpers/logger/common → base/hono}/index.js +1 -1
  37. package/dist/base/hono/index.js.map +1 -0
  38. package/dist/base/hono/zod-openapi.d.ts +3 -0
  39. package/dist/base/hono/zod-openapi.d.ts.map +1 -0
  40. package/dist/base/hono/zod-openapi.js +18 -0
  41. package/dist/base/hono/zod-openapi.js.map +1 -0
  42. package/dist/base/http/index.d.ts +4 -0
  43. package/dist/base/http/index.d.ts.map +1 -0
  44. package/dist/base/http/index.js +20 -0
  45. package/dist/base/http/index.js.map +1 -0
  46. package/dist/base/http/openapi.helpers.d.ts +30 -0
  47. package/dist/base/http/openapi.helpers.d.ts.map +1 -0
  48. package/dist/base/http/openapi.helpers.js +22 -0
  49. package/dist/base/http/openapi.helpers.js.map +1 -0
  50. package/dist/base/http/server.d.ts +14 -0
  51. package/dist/base/http/server.d.ts.map +1 -0
  52. package/dist/base/http/server.js +27 -0
  53. package/dist/base/http/server.js.map +1 -0
  54. package/dist/base/http/types.d.ts +27 -0
  55. package/dist/base/http/types.d.ts.map +1 -0
  56. package/dist/base/http/types.js.map +1 -0
  57. package/dist/base/index.d.ts +6 -2
  58. package/dist/base/index.d.ts.map +1 -1
  59. package/dist/base/index.js +33 -2
  60. package/dist/base/index.js.map +1 -1
  61. package/dist/base/models/base.model.d.ts +8 -29
  62. package/dist/base/models/base.model.d.ts.map +1 -1
  63. package/dist/base/models/base.model.js +6 -50
  64. package/dist/base/models/base.model.js.map +1 -1
  65. package/dist/base/models/column-defs.d.ts +37 -0
  66. package/dist/base/models/column-defs.d.ts.map +1 -0
  67. package/dist/base/models/column-defs.js +52 -0
  68. package/dist/base/models/column-defs.js.map +1 -0
  69. package/dist/base/models/drizzle.types.d.ts +6 -0
  70. package/dist/base/models/drizzle.types.d.ts.map +1 -0
  71. package/dist/{helpers/migrate/type.js → base/models/drizzle.types.js} +1 -1
  72. package/dist/base/models/drizzle.types.js.map +1 -0
  73. package/dist/base/models/index.d.ts +3 -1
  74. package/dist/base/models/index.d.ts.map +1 -1
  75. package/dist/base/models/index.js +2 -1
  76. package/dist/base/models/index.js.map +1 -1
  77. package/dist/base/pg/index.d.ts +3 -0
  78. package/dist/base/pg/index.d.ts.map +1 -0
  79. package/dist/base/pg/index.js +12 -0
  80. package/dist/base/pg/index.js.map +1 -0
  81. package/dist/base/repository/default-crud.repository.d.ts +12 -0
  82. package/dist/base/repository/default-crud.repository.d.ts.map +1 -0
  83. package/dist/base/repository/default-crud.repository.js +61 -0
  84. package/dist/base/repository/default-crud.repository.js.map +1 -0
  85. package/dist/base/repository/index.d.ts +3 -2
  86. package/dist/base/repository/index.d.ts.map +1 -1
  87. package/dist/base/repository/index.js +3 -2
  88. package/dist/base/repository/index.js.map +1 -1
  89. package/dist/base/repository/readable.repository.d.ts +23 -0
  90. package/dist/base/repository/readable.repository.d.ts.map +1 -0
  91. package/dist/base/repository/readable.repository.js +55 -0
  92. package/dist/base/repository/readable.repository.js.map +1 -0
  93. package/dist/base/repository/soft-deletable.repository.d.ts +27 -0
  94. package/dist/base/repository/soft-deletable.repository.d.ts.map +1 -0
  95. package/dist/base/repository/soft-deletable.repository.js +79 -0
  96. package/dist/base/repository/soft-deletable.repository.js.map +1 -0
  97. package/dist/base/repository/soft-delete.repository.d.ts +8 -0
  98. package/dist/base/repository/soft-delete.repository.d.ts.map +1 -1
  99. package/dist/base/repository/soft-delete.repository.js +13 -0
  100. package/dist/base/repository/soft-delete.repository.js.map +1 -1
  101. package/dist/base/services/base.service.d.ts +8 -0
  102. package/dist/base/services/base.service.d.ts.map +1 -0
  103. package/dist/base/services/base.service.js +11 -0
  104. package/dist/base/services/base.service.js.map +1 -0
  105. package/dist/base/services/index.d.ts +2 -0
  106. package/dist/base/services/index.d.ts.map +1 -0
  107. package/dist/base/services/index.js +18 -0
  108. package/dist/base/services/index.js.map +1 -0
  109. package/dist/boot/base/base-artifact-booter.d.ts +9 -0
  110. package/dist/boot/base/base-artifact-booter.d.ts.map +1 -0
  111. package/dist/boot/base/base-artifact-booter.js +11 -0
  112. package/dist/boot/base/base-artifact-booter.js.map +1 -0
  113. package/dist/boot/boot.mixin.d.ts +7 -0
  114. package/dist/boot/boot.mixin.d.ts.map +1 -0
  115. package/dist/boot/boot.mixin.js +14 -0
  116. package/dist/boot/boot.mixin.js.map +1 -0
  117. package/dist/boot/booters/controller.booter.d.ts +8 -0
  118. package/dist/boot/booters/controller.booter.d.ts.map +1 -0
  119. package/dist/boot/booters/controller.booter.js +15 -0
  120. package/dist/boot/booters/controller.booter.js.map +1 -0
  121. package/dist/boot/booters/datasource.booter.d.ts +8 -0
  122. package/dist/boot/booters/datasource.booter.d.ts.map +1 -0
  123. package/dist/boot/booters/datasource.booter.js +15 -0
  124. package/dist/boot/booters/datasource.booter.js.map +1 -0
  125. package/dist/boot/booters/index.d.ts +5 -0
  126. package/dist/boot/booters/index.d.ts.map +1 -0
  127. package/dist/boot/booters/index.js +21 -0
  128. package/dist/boot/booters/index.js.map +1 -0
  129. package/dist/boot/booters/repository.booter.d.ts +8 -0
  130. package/dist/boot/booters/repository.booter.d.ts.map +1 -0
  131. package/dist/boot/booters/repository.booter.js +15 -0
  132. package/dist/boot/booters/repository.booter.js.map +1 -0
  133. package/dist/boot/booters/service.booter.d.ts +8 -0
  134. package/dist/boot/booters/service.booter.d.ts.map +1 -0
  135. package/dist/boot/booters/service.booter.js +15 -0
  136. package/dist/boot/booters/service.booter.js.map +1 -0
  137. package/dist/boot/boots-trapper.d.ts +3 -0
  138. package/dist/boot/boots-trapper.d.ts.map +1 -0
  139. package/dist/boot/boots-trapper.js +9 -0
  140. package/dist/boot/boots-trapper.js.map +1 -0
  141. package/dist/boot/index.d.ts +5 -0
  142. package/dist/boot/index.d.ts.map +1 -0
  143. package/dist/boot/index.js +21 -0
  144. package/dist/boot/index.js.map +1 -0
  145. package/dist/common/bindings.d.ts +17 -0
  146. package/dist/common/bindings.d.ts.map +1 -0
  147. package/dist/common/bindings.js +22 -0
  148. package/dist/common/bindings.js.map +1 -0
  149. package/dist/common/index.d.ts +1 -0
  150. package/dist/common/index.d.ts.map +1 -1
  151. package/dist/common/index.js +1 -0
  152. package/dist/common/index.js.map +1 -1
  153. package/dist/common/types.d.ts +10 -13
  154. package/dist/common/types.d.ts.map +1 -1
  155. package/dist/components/auth/authenticate/common/constants.d.ts +12 -0
  156. package/dist/components/auth/authenticate/common/constants.d.ts.map +1 -0
  157. package/dist/components/auth/authenticate/common/constants.js +17 -0
  158. package/dist/components/auth/authenticate/common/constants.js.map +1 -0
  159. package/dist/components/auth/authenticate/component.d.ts +3 -0
  160. package/dist/components/auth/authenticate/component.d.ts.map +1 -0
  161. package/dist/components/auth/authenticate/component.js +7 -0
  162. package/dist/components/auth/authenticate/component.js.map +1 -0
  163. package/dist/components/auth/authenticate/middlewares/authenticate.middleware.d.ts +3 -0
  164. package/dist/components/auth/authenticate/middlewares/authenticate.middleware.d.ts.map +1 -0
  165. package/dist/components/auth/authenticate/middlewares/authenticate.middleware.js +8 -0
  166. package/dist/components/auth/authenticate/middlewares/authenticate.middleware.js.map +1 -0
  167. package/dist/components/auth/authenticate/strategies/base.strategy.d.ts +10 -0
  168. package/dist/components/auth/authenticate/strategies/base.strategy.d.ts.map +1 -0
  169. package/dist/{base/migration/migration.interface.js → components/auth/authenticate/strategies/base.strategy.js} +1 -1
  170. package/dist/components/auth/authenticate/strategies/base.strategy.js.map +1 -0
  171. package/dist/components/auth/authenticate/strategies/basic.strategy.d.ts +7 -0
  172. package/dist/components/auth/authenticate/strategies/basic.strategy.d.ts.map +1 -0
  173. package/dist/components/auth/authenticate/strategies/basic.strategy.js +14 -0
  174. package/dist/components/auth/authenticate/strategies/basic.strategy.js.map +1 -0
  175. package/dist/components/auth/authenticate/strategies/jwt.strategy.d.ts +7 -0
  176. package/dist/components/auth/authenticate/strategies/jwt.strategy.d.ts.map +1 -0
  177. package/dist/components/auth/authenticate/strategies/jwt.strategy.js +14 -0
  178. package/dist/components/auth/authenticate/strategies/jwt.strategy.js.map +1 -0
  179. package/dist/components/auth/authenticate/strategies/strategy-registry.d.ts +8 -0
  180. package/dist/components/auth/authenticate/strategies/strategy-registry.d.ts.map +1 -0
  181. package/dist/components/auth/authenticate/strategies/strategy-registry.js +17 -0
  182. package/dist/components/auth/authenticate/strategies/strategy-registry.js.map +1 -0
  183. package/dist/components/auth/authorize/adapters/drizzle-casbin.d.ts +7 -0
  184. package/dist/components/auth/authorize/adapters/drizzle-casbin.d.ts.map +1 -0
  185. package/dist/components/auth/authorize/adapters/drizzle-casbin.js +11 -0
  186. package/dist/components/auth/authorize/adapters/drizzle-casbin.js.map +1 -0
  187. package/dist/components/auth/authorize/component.d.ts +8 -0
  188. package/dist/components/auth/authorize/component.d.ts.map +1 -0
  189. package/dist/components/auth/authorize/component.js +13 -0
  190. package/dist/components/auth/authorize/component.js.map +1 -0
  191. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts +8 -0
  192. package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts.map +1 -0
  193. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js +22 -0
  194. package/dist/components/auth/authorize/enforcers/casbin.enforcer.js.map +1 -0
  195. package/dist/components/auth/authorize/index.d.ts +5 -0
  196. package/dist/components/auth/authorize/index.d.ts.map +1 -0
  197. package/dist/components/auth/authorize/index.js +21 -0
  198. package/dist/components/auth/authorize/index.js.map +1 -0
  199. package/dist/components/auth/authorize/middlewares/authorize.middleware.d.ts +3 -0
  200. package/dist/components/auth/authorize/middlewares/authorize.middleware.d.ts.map +1 -0
  201. package/dist/components/auth/authorize/middlewares/authorize.middleware.js +8 -0
  202. package/dist/components/auth/authorize/middlewares/authorize.middleware.js.map +1 -0
  203. package/dist/components/auth/index.d.ts +9 -0
  204. package/dist/components/auth/index.d.ts.map +1 -0
  205. package/dist/{helpers/logger/http → components/auth}/index.js +8 -5
  206. package/dist/components/auth/index.js.map +1 -0
  207. package/dist/components/grpc/base/abstract.d.ts +10 -0
  208. package/dist/components/grpc/base/abstract.d.ts.map +1 -0
  209. package/dist/components/grpc/base/abstract.js +11 -0
  210. package/dist/components/grpc/base/abstract.js.map +1 -0
  211. package/dist/components/grpc/component.d.ts +3 -0
  212. package/dist/components/grpc/component.d.ts.map +1 -0
  213. package/dist/components/grpc/component.js +7 -0
  214. package/dist/components/grpc/component.js.map +1 -0
  215. package/dist/components/grpc/decorators.d.ts +4 -0
  216. package/dist/components/grpc/decorators.d.ts.map +1 -0
  217. package/dist/components/grpc/decorators.js +9 -0
  218. package/dist/components/grpc/decorators.js.map +1 -0
  219. package/dist/components/grpc/index.d.ts +4 -0
  220. package/dist/components/grpc/index.d.ts.map +1 -0
  221. package/dist/components/grpc/index.js +20 -0
  222. package/dist/components/grpc/index.js.map +1 -0
  223. package/dist/components/health-check/index.d.ts +9 -0
  224. package/dist/components/health-check/index.d.ts.map +1 -0
  225. package/dist/components/health-check/index.js +8 -0
  226. package/dist/components/health-check/index.js.map +1 -0
  227. package/dist/components/socket-io/component.d.ts +7 -0
  228. package/dist/components/socket-io/component.d.ts.map +1 -0
  229. package/dist/components/socket-io/component.js +12 -0
  230. package/dist/components/socket-io/component.js.map +1 -0
  231. package/dist/components/socket-io/helpers/server.helper.d.ts +33 -0
  232. package/dist/components/socket-io/helpers/server.helper.d.ts.map +1 -0
  233. package/dist/components/socket-io/helpers/server.helper.js +22 -0
  234. package/dist/components/socket-io/helpers/server.helper.js.map +1 -0
  235. package/dist/components/socket-io/index.d.ts +3 -0
  236. package/dist/components/socket-io/index.d.ts.map +1 -0
  237. package/dist/components/socket-io/index.js +19 -0
  238. package/dist/components/socket-io/index.js.map +1 -0
  239. package/dist/components/swagger/index.d.ts +26 -0
  240. package/dist/components/swagger/index.d.ts.map +1 -0
  241. package/dist/components/swagger/index.js +8 -0
  242. package/dist/components/swagger/index.js.map +1 -0
  243. package/dist/datasources/postgres/datasource.d.ts +7 -3
  244. package/dist/datasources/postgres/datasource.d.ts.map +1 -1
  245. package/dist/datasources/postgres/datasource.js +27 -18
  246. package/dist/datasources/postgres/datasource.js.map +1 -1
  247. package/dist/datasources/postgres/types.d.ts +1 -1
  248. package/dist/datasources/postgres/types.d.ts.map +1 -1
  249. package/dist/datasources/redis/connector.d.ts +2 -2
  250. package/dist/datasources/redis/connector.d.ts.map +1 -1
  251. package/dist/datasources/redis/connector.js +20 -14
  252. package/dist/datasources/redis/connector.js.map +1 -1
  253. package/dist/datasources/redis/datasource.d.ts +4 -2
  254. package/dist/datasources/redis/datasource.d.ts.map +1 -1
  255. package/dist/datasources/redis/datasource.js +6 -2
  256. package/dist/datasources/redis/datasource.js.map +1 -1
  257. package/dist/datasources/redis/index.d.ts +1 -1
  258. package/dist/datasources/redis/index.d.ts.map +1 -1
  259. package/dist/datasources/redis/index.js +1 -1
  260. package/dist/datasources/redis/index.js.map +1 -1
  261. package/dist/datasources/redis/types.d.ts +2 -2
  262. package/dist/datasources/redis/types.d.ts.map +1 -1
  263. package/dist/helpers/index.d.ts +0 -1
  264. package/dist/helpers/index.d.ts.map +1 -1
  265. package/dist/helpers/index.js +0 -1
  266. package/dist/helpers/index.js.map +1 -1
  267. package/dist/helpers/logger/config.d.ts +28 -11
  268. package/dist/helpers/logger/config.d.ts.map +1 -1
  269. package/dist/helpers/logger/config.js +140 -28
  270. package/dist/helpers/logger/config.js.map +1 -1
  271. package/dist/helpers/logger/factory.d.ts +14 -7
  272. package/dist/helpers/logger/factory.d.ts.map +1 -1
  273. package/dist/helpers/logger/factory.js +36 -16
  274. package/dist/helpers/logger/factory.js.map +1 -1
  275. package/dist/helpers/logger/http.d.ts +38 -0
  276. package/dist/helpers/logger/http.d.ts.map +1 -0
  277. package/dist/helpers/logger/http.js +217 -0
  278. package/dist/helpers/logger/http.js.map +1 -0
  279. package/dist/helpers/logger/index.d.ts +3 -5
  280. package/dist/helpers/logger/index.d.ts.map +1 -1
  281. package/dist/helpers/logger/index.js +3 -5
  282. package/dist/helpers/logger/index.js.map +1 -1
  283. package/dist/helpers/logger/logger.d.ts +28 -0
  284. package/dist/helpers/logger/logger.d.ts.map +1 -0
  285. package/dist/helpers/logger/logger.js +84 -0
  286. package/dist/helpers/logger/logger.js.map +1 -0
  287. package/dist/helpers/logger/{transports/dgram.transport.d.ts → transport.d.ts} +3 -3
  288. package/dist/helpers/logger/transport.d.ts.map +1 -0
  289. package/dist/helpers/logger/{transports/dgram.transport.js → transport.js} +20 -21
  290. package/dist/helpers/logger/transport.js.map +1 -0
  291. package/dist/helpers/logger/{http/types.d.ts → types.d.ts} +32 -21
  292. package/dist/helpers/logger/types.d.ts.map +1 -0
  293. package/dist/helpers/logger/{common/types.js → types.js} +4 -10
  294. package/dist/helpers/logger/types.js.map +1 -0
  295. package/dist/helpers/redis/default.helper.d.ts +1 -1
  296. package/dist/helpers/redis/default.helper.d.ts.map +1 -1
  297. package/dist/helpers/redis/default.helper.js +4 -5
  298. package/dist/helpers/redis/default.helper.js.map +1 -1
  299. package/dist/helpers/redis/index.d.ts +1 -1
  300. package/dist/helpers/redis/index.d.ts.map +1 -1
  301. package/dist/helpers/redis/index.js +1 -1
  302. package/dist/helpers/redis/index.js.map +1 -1
  303. package/dist/helpers/redis/redis-cluster.helper.d.ts +1 -1
  304. package/dist/helpers/redis/redis-cluster.helper.d.ts.map +1 -1
  305. package/dist/helpers/redis/redis.helper.d.ts +1 -1
  306. package/dist/helpers/redis/redis.helper.d.ts.map +1 -1
  307. package/dist/helpers/redis/types.d.ts +1 -1
  308. package/dist/helpers/redis/types.d.ts.map +1 -1
  309. package/dist/index.d.ts +9 -5
  310. package/dist/index.d.ts.map +1 -1
  311. package/dist/index.js +15 -5
  312. package/dist/index.js.map +1 -1
  313. package/dist/utilities/axios.utility.d.ts +1 -0
  314. package/dist/utilities/axios.utility.d.ts.map +1 -1
  315. package/dist/utilities/index.d.ts +6 -3
  316. package/dist/utilities/index.d.ts.map +1 -1
  317. package/dist/utilities/index.js +33 -3
  318. package/dist/utilities/index.js.map +1 -1
  319. package/dist/utilities/lodash.utility.d.ts +34 -1
  320. package/dist/utilities/lodash.utility.d.ts.map +1 -1
  321. package/dist/utilities/lodash.utility.js +69 -3
  322. package/dist/utilities/lodash.utility.js.map +1 -1
  323. package/dist/utilities/migration.utility.js +2 -2
  324. package/dist/utilities/migration.utility.js.map +1 -1
  325. package/dist/utilities/model.utility.d.ts +1 -1
  326. package/dist/utilities/model.utility.d.ts.map +1 -1
  327. package/dist/utilities/model.utility.js.map +1 -1
  328. package/dist/utilities/parse.utility.d.ts.map +1 -1
  329. package/dist/utilities/parse.utility.js +3 -7
  330. package/dist/utilities/parse.utility.js.map +1 -1
  331. package/dist/utilities/query.utility.d.ts +4 -5
  332. package/dist/utilities/query.utility.d.ts.map +1 -1
  333. package/dist/utilities/query.utility.js +11 -15
  334. package/dist/utilities/query.utility.js.map +1 -1
  335. package/dist/utilities/request.utility.d.ts +2 -2
  336. package/dist/utilities/request.utility.d.ts.map +1 -1
  337. package/dist/utilities/request.utility.js.map +1 -1
  338. package/package.json +47 -7
  339. package/dist/base/migration/index.d.ts +0 -3
  340. package/dist/base/migration/index.d.ts.map +0 -1
  341. package/dist/base/migration/index.js.map +0 -1
  342. package/dist/base/migration/migration.interface.d.ts +0 -5
  343. package/dist/base/migration/migration.interface.d.ts.map +0 -1
  344. package/dist/base/migration/migration.interface.js.map +0 -1
  345. package/dist/base/migration/migration.service.d.ts +0 -9
  346. package/dist/base/migration/migration.service.d.ts.map +0 -1
  347. package/dist/base/migration/migration.service.js +0 -146
  348. package/dist/base/migration/migration.service.js.map +0 -1
  349. package/dist/base/models/migration.model.d.ts +0 -11
  350. package/dist/base/models/migration.model.d.ts.map +0 -1
  351. package/dist/base/models/migration.model.js +0 -38
  352. package/dist/base/models/migration.model.js.map +0 -1
  353. package/dist/base/repository/migration.repository.d.ts +0 -6
  354. package/dist/base/repository/migration.repository.d.ts.map +0 -1
  355. package/dist/base/repository/migration.repository.js +0 -29
  356. package/dist/base/repository/migration.repository.js.map +0 -1
  357. package/dist/helpers/logger/application-logger.d.ts +0 -19
  358. package/dist/helpers/logger/application-logger.d.ts.map +0 -1
  359. package/dist/helpers/logger/application-logger.js +0 -69
  360. package/dist/helpers/logger/application-logger.js.map +0 -1
  361. package/dist/helpers/logger/common/index.d.ts +0 -2
  362. package/dist/helpers/logger/common/index.d.ts.map +0 -1
  363. package/dist/helpers/logger/common/index.js.map +0 -1
  364. package/dist/helpers/logger/common/types.d.ts +0 -24
  365. package/dist/helpers/logger/common/types.d.ts.map +0 -1
  366. package/dist/helpers/logger/common/types.js.map +0 -1
  367. package/dist/helpers/logger/config-merger.d.ts +0 -27
  368. package/dist/helpers/logger/config-merger.d.ts.map +0 -1
  369. package/dist/helpers/logger/config-merger.js +0 -55
  370. package/dist/helpers/logger/config-merger.js.map +0 -1
  371. package/dist/helpers/logger/default-logger.d.ts +0 -34
  372. package/dist/helpers/logger/default-logger.d.ts.map +0 -1
  373. package/dist/helpers/logger/default-logger.js +0 -120
  374. package/dist/helpers/logger/default-logger.js.map +0 -1
  375. package/dist/helpers/logger/enhanced-factory.d.ts +0 -14
  376. package/dist/helpers/logger/enhanced-factory.d.ts.map +0 -1
  377. package/dist/helpers/logger/enhanced-factory.js +0 -43
  378. package/dist/helpers/logger/enhanced-factory.js.map +0 -1
  379. package/dist/helpers/logger/http/access-logger.d.ts +0 -44
  380. package/dist/helpers/logger/http/access-logger.d.ts.map +0 -1
  381. package/dist/helpers/logger/http/access-logger.js +0 -298
  382. package/dist/helpers/logger/http/access-logger.js.map +0 -1
  383. package/dist/helpers/logger/http/client-ip.d.ts +0 -8
  384. package/dist/helpers/logger/http/client-ip.d.ts.map +0 -1
  385. package/dist/helpers/logger/http/client-ip.js +0 -55
  386. package/dist/helpers/logger/http/client-ip.js.map +0 -1
  387. package/dist/helpers/logger/http/index.d.ts +0 -6
  388. package/dist/helpers/logger/http/index.d.ts.map +0 -1
  389. package/dist/helpers/logger/http/index.js.map +0 -1
  390. package/dist/helpers/logger/http/request-context.d.ts +0 -19
  391. package/dist/helpers/logger/http/request-context.d.ts.map +0 -1
  392. package/dist/helpers/logger/http/request-context.js +0 -55
  393. package/dist/helpers/logger/http/request-context.js.map +0 -1
  394. package/dist/helpers/logger/http/request-id-manager.d.ts +0 -22
  395. package/dist/helpers/logger/http/request-id-manager.d.ts.map +0 -1
  396. package/dist/helpers/logger/http/request-id-manager.js +0 -52
  397. package/dist/helpers/logger/http/request-id-manager.js.map +0 -1
  398. package/dist/helpers/logger/http/types.d.ts.map +0 -1
  399. package/dist/helpers/logger/http/types.js.map +0 -1
  400. package/dist/helpers/logger/transports/dgram.transport.d.ts.map +0 -1
  401. package/dist/helpers/logger/transports/dgram.transport.js.map +0 -1
  402. package/dist/helpers/logger/transports/index.d.ts +0 -2
  403. package/dist/helpers/logger/transports/index.d.ts.map +0 -1
  404. package/dist/helpers/logger/transports/index.js.map +0 -1
  405. package/dist/helpers/migrate/index.d.ts +0 -4
  406. package/dist/helpers/migrate/index.d.ts.map +0 -1
  407. package/dist/helpers/migrate/index.js.map +0 -1
  408. package/dist/helpers/migrate/migrate-helper.d.ts +0 -10
  409. package/dist/helpers/migrate/migrate-helper.d.ts.map +0 -1
  410. package/dist/helpers/migrate/migrate-helper.js +0 -40
  411. package/dist/helpers/migrate/migrate-helper.js.map +0 -1
  412. package/dist/helpers/migrate/migration-engine.d.ts +0 -8
  413. package/dist/helpers/migrate/migration-engine.d.ts.map +0 -1
  414. package/dist/helpers/migrate/migration-engine.js +0 -40
  415. package/dist/helpers/migrate/migration-engine.js.map +0 -1
  416. package/dist/helpers/migrate/type.d.ts +0 -10
  417. package/dist/helpers/migrate/type.d.ts.map +0 -1
  418. package/dist/helpers/migrate/type.js.map +0 -1
  419. package/dist/validators/base.schema.d.ts +0 -56
  420. package/dist/validators/base.schema.d.ts.map +0 -1
  421. package/dist/validators/base.schema.js +0 -84
  422. package/dist/validators/base.schema.js.map +0 -1
  423. package/dist/validators/common.schema.d.ts +0 -50
  424. package/dist/validators/common.schema.d.ts.map +0 -1
  425. package/dist/validators/common.schema.js +0 -51
  426. package/dist/validators/common.schema.js.map +0 -1
  427. package/dist/validators/index.d.ts +0 -15
  428. package/dist/validators/index.d.ts.map +0 -1
  429. package/dist/validators/index.js +0 -36
  430. package/dist/validators/index.js.map +0 -1
  431. package/dist/validators/with-zod.d.ts +0 -66
  432. package/dist/validators/with-zod.d.ts.map +0 -1
  433. package/dist/validators/with-zod.js +0 -117
  434. package/dist/validators/with-zod.js.map +0 -1
  435. /package/dist/{helpers/logger → base}/http/types.js +0 -0
package/README.md CHANGED
@@ -1,211 +1,340 @@
1
- # Hướng dẫn sử dụng `@gennext/lb-infra`
1
+ # @gennext/lb-infra
2
2
 
3
- `@gennext/lb-infra` một thư viện Core Infrastructure được thiết kế để chuẩn hóa kiến trúc và các tiện ích dùng chung cho các microservice / project sử dụng framework LoopBack 4 trong hệ sinh thái Gennex.
3
+ Hệ thống thư viện hạ tầng (infrastructure) backend dựa trên TypeScript, tối ưu cho hiệu năng tính chuẩn hóa.
4
4
 
5
- File này tổng hợp **những tính năng chính**, **cách cấu hình** và **cách sử dụng** các thành phần mà thư viện này cung cấp.
5
+ ## 1. Giới thiệu
6
+ `@gennext/lb-infra` là nền tảng xây dựng backend hiện đại tại Gennex, kết hợp các công nghệ:
7
+ - **Hono**: Web framework siêu nhẹ, hỗ trợ TypeScript và OpenAPI native.
8
+ - **Drizzle ORM**: ORM thế hệ mới, type-safe tuyệt đối cho PostgreSQL.
9
+ - **Zod**: Thư viện validation và định nghĩa schema mạnh mẽ.
10
+ - **Winston**: Hệ thống logging đa kênh (Console, File, UDP).
11
+
12
+ **Khi nào nên dùng:** Phù hợp cho các dự án yêu cầu tốc độ phản hồi cao, cấu trúc mã nguồn tường minh (Controller-Service-Repository) và tự động hóa tài liệu API (Swagger/OpenAPI).
6
13
 
7
14
  ---
8
15
 
9
- ## 1. Logger (Quản lý log với Winston)
10
- Hệ thống logger được thiết kế sẵn để ghi log ra console và tự động xoay vòng file log (Daily Rotate File).
16
+ ## 2. Cài đặt
11
17
 
12
- ### Cấu hình & Sử dụng
13
- Bạn không cần cấu hình phức tạp, chỉ cần gọi `LoggerFactory`.
18
+ Cài đặt package chính:
19
+ ```bash
20
+ bun add @gennext/lb-infra
21
+ ```
22
+
23
+ Các peer dependency cần thiết:
24
+ ```bash
25
+ bun add hono @hono/zod-openapi zod drizzle-orm pg winston
26
+ # Nếu dùng Auth/Authorization
27
+ bun add jose casbin
28
+ ```
29
+
30
+ ---
31
+
32
+ ## 3. Khởi tạo ứng dụng
33
+ Sử dụng `BaseApplication` kết hợp với `bootMixin` để tự động quét và đăng ký các thành phần.
14
34
 
15
35
  ```typescript
16
- import { LoggerFactory } from '@gennext/lb-infra';
36
+ import { BaseApplication, bootMixin, bootStrapApplication, IApplicationConfigs } from '@gennext/lb-infra';
37
+
38
+ class OrderApplication extends bootMixin(BaseApplication) {
39
+ getAppInfo() {
40
+ return {
41
+ name: 'Order Service',
42
+ version: '1.0.0',
43
+ };
44
+ }
45
+ }
17
46
 
18
- // Khởi tạo logger cho một class hoặc file cụ thể
19
- // Khuyên dùng truyền array scope để dễ traceback (VD: ['Core', 'AuthController'])
20
- const logger = LoggerFactory.getLogger(['Gateway', 'AuthController']);
47
+ const configs: IApplicationConfigs = {
48
+ port: Number(process.env.PORT) || 3000,
49
+ path: { base: '/api' }
50
+ };
21
51
 
22
- // Các mức độ log
23
- logger.info('User login successful', { userId: 123 });
24
- logger.debug('Debugging details: %j', someObject);
25
- logger.warn('Rate limit warning for IP: %s', ipAddress);
26
- logger.error('Database connection failed | Error: %s', error.message);
52
+ bootStrapApplication(OrderApplication, configs);
27
53
  ```
28
54
 
29
55
  ---
30
56
 
31
- ## 2. Redis (Quản lý Cache & Pub/Sub)
32
- Cung cấp `RedisManager` để quản nhiều instance kết nối Redis `DefaultRedisHelper` chứa các hàm tối ưu cho việc thao tác với Redis.
57
+ ## 4. Data layer
58
+ Sử dụng Drizzle để định nghĩa schema và các Repository để thao tác dữ liệu.
33
59
 
34
- ### Cấu hình kết nối
35
- Thường được gọi khi khởi động ứng dụng (ví dụ trong `application.ts`):
60
+ ### Khai báo Drizzle Schema
61
+ Sử dụng các helper trong `column-defs.ts` để chuẩn hóa cấu trúc bảng.
36
62
 
37
63
  ```typescript
38
- import { RedisManager } from '@gennext/lb-infra';
39
-
40
- RedisManager.getInstance('default', {
41
- scope: 'App',
42
- identifier: 'PrimaryRedis',
43
- client: new Redis({
44
- host: process.env.REDIS_HOST,
45
- port: parseInt(process.env.REDIS_PORT),
46
- password: process.env.REDIS_PASSWORD
47
- }),
48
- onConnected: () => console.log('Redis connected!'),
64
+ import { pgTable, text, integer } from 'drizzle-orm/pg-core';
65
+ import { generateIdColumnDefs, generateSoftDeleteColumnDefs, generateTzColumnDefs } from '@gennext/lb-infra';
66
+
67
+ export const orders = pgTable('orders', {
68
+ ...generateIdColumnDefs({ id: { dataType: 'string' } }),
69
+ orderNumber: text('order_number').notNull(),
70
+ amount: integer('amount'),
71
+ ...generateTzColumnDefs(),
72
+ ...generateSoftDeleteColumnDefs(),
49
73
  });
50
74
  ```
51
75
 
52
- ### Cách sử dụng các hàm tối ưu
53
- ```typescript
54
- const redis = RedisManager.getInstance('default'); // Lấy instance tên 'default'
55
-
56
- // 1. Thao tác chuỗi (String)
57
- await redis.set({ key: 'user:1', value: { name: 'John' }, options: { log: true } });
58
- const user = await redis.getObject({ key: 'user:1' });
59
-
60
- // 2. Thao tác hàng loạt (MGET, MSET) cực nhanh (O(N))
61
- await redis.mset({
62
- payload: [
63
- { key: 'user:1', value: { name: 'A' } },
64
- { key: 'user:2', value: { name: 'B' } }
65
- ]
66
- });
67
- const users = await redis.getObjects({ keys: ['user:1', 'user:2'] });
76
+ ### Repositories
77
+ Sử dụng `DefaultCrudRepository` hoặc `SoftDeletableRepository` để có sẵn các hàm CRUD.
68
78
 
69
- // 3. Pub/Sub (Đã tối ưu hóa nén và gửi đa kênh)
70
- await redis.publish({
71
- topics: ['channel-A', 'channel-B'],
72
- payload: { action: 'RELOAD_CONFIG' },
73
- useCompress: true // Tự động nén zlib để tối ưu băng thông
74
- });
79
+ ```typescript
80
+ import { SoftDeletableRepository } from '@gennext/lb-infra';
81
+ import { orders } from '../models/order.schema';
75
82
 
76
- redis.subscribe({ topic: 'channel-A' });
83
+ export class OrderRepository extends SoftDeletableRepository<typeof orders> {
84
+ constructor() {
85
+ super(orders);
86
+ }
87
+ }
77
88
  ```
78
89
 
79
90
  ---
80
91
 
81
- ## 3. chế Database Migration (Đồng bộ Schema)
82
- Cho phép bạn viết các script để migrate database khi hệ thống khởi động.
83
-
84
- ### Cấu hình & Sử dụng
85
- Trong file `migrate.ts` của project:
92
+ ## 5. Service layer
93
+ Các service kế thừa `BaseService` sử dụng `this.logger` (HFLogger pattern) để ghi log theo phương thức.
86
94
 
87
95
  ```typescript
88
- import { bootstrapMigration, TMigrationProcess } from '@gennext/lb-infra';
89
-
90
- // Định nghĩa các bước migration
91
- const migrations: Array<TMigrationProcess> = [
92
- {
93
- name: 'SeedAdminUser',
94
- options: { alwaysRun: false }, // Chỉ chạy 1 lần, lần sau sẽ bỏ qua
95
- cleanFn: async (app) => {
96
- // Logic chạy nếu args có cờ --rebuild (Xóa data cũ)
97
- const repo = await app.getRepository(UserRepository);
98
- await repo.deleteAll();
99
- },
100
- fn: async (app) => {
101
- // Logic migration chính
102
- const repo = await app.getRepository(UserRepository);
103
- await repo.create({ username: 'admin', role: 'ADMIN' });
96
+ import { BaseService } from '@gennext/lb-infra';
97
+
98
+ export class OrderService extends BaseService {
99
+ async processOrder(orderId: string) {
100
+ const logger = this.logger.for('processOrder');
101
+ logger.info('Starting process', { orderId });
102
+
103
+ try {
104
+ // Logic xử đơn hàng...
105
+ } catch (error) {
106
+ logger.error('Failed to process', error);
107
+ throw error;
104
108
  }
105
109
  }
106
- ];
110
+ }
111
+ ```
112
+
113
+ ---
107
114
 
108
- // Khởi chạy
109
- bootstrapMigration(app, migrations, process.argv).catch(err => {
110
- console.error('Cannot migrate database', err);
111
- process.exit(1);
115
+ ## 6. Controller & Routing
116
+ Controller quản các route và tích hợp Zod để tự động tạo tài liệu OpenAPI qua `defineRoute` hoặc `bindRoute`.
117
+
118
+ ```typescript
119
+ import { BaseController, controller } from '@gennext/lb-infra';
120
+ import { z } from 'zod';
121
+
122
+ const OrderSchema = z.object({
123
+ id: z.string().uuid(),
124
+ amount: z.number().min(1)
112
125
  });
126
+
127
+ @controller({ path: '/orders' })
128
+ export class OrderController extends BaseController {
129
+ async binding() {
130
+ this.bindRoute({
131
+ configs: {
132
+ path: '/',
133
+ method: 'post',
134
+ request: {
135
+ body: { content: { 'application/json': { schema: OrderSchema } } }
136
+ },
137
+ responses: {
138
+ 200: {
139
+ description: 'Order created',
140
+ content: { 'application/json': { schema: OrderSchema } }
141
+ }
142
+ }
143
+ }
144
+ }).to({
145
+ handler: async (c) => {
146
+ const body = await c.req.json();
147
+ return c.json(body);
148
+ }
149
+ });
150
+ }
151
+ }
113
152
  ```
114
153
 
115
154
  ---
116
155
 
117
- ## 4. HTTP Client (Axios Utilities)
118
- Cung cấp các hàm bọc Axios để tự động xử chuẩn hóa các lỗi HTTP.
156
+ ## 7. DataSources
157
+ Cấu hình kết nối sở dữ liệu qua các class kế thừa.
119
158
 
120
- ### Sử dụng
121
159
  ```typescript
122
- import { get, post, put, del } from '@gennext/lb-infra';
123
- import axios from 'axios';
160
+ import { PostgresDataSource, RedisDataSource } from '@gennext/lb-infra/datasources';
124
161
 
125
- const client = axios.create({ baseURL: 'https://api.example.com' });
162
+ export class DbDataSource extends PostgresDataSource {
163
+ static dataSourceName = 'db';
164
+ }
126
165
 
127
- try {
128
- // Không cần xử lý try/catch bên trong, hàm get/post đã tự log và ném lỗi chuẩn hóa
129
- const response = await post(client, '/users', { name: 'John' });
130
- console.log(response.data);
131
- } catch (error) {
132
- // error ở đây đã được trích xuất (error.response.data.error)
166
+ export class CacheDataSource extends RedisDataSource {
167
+ static dataSourceName = 'redis';
133
168
  }
134
169
  ```
135
170
 
136
171
  ---
137
172
 
138
- ## 5. Utilities (Tiện ích dùng chung)
139
- Tất cả các tiện ích đều được gom tại `src/utilities` được export thẳng ra ngoài.
173
+ ## 8. Logger helper
174
+ Hệ thống log mạnh mẽ hỗ trợ `RequestContext` để theo vết Request ID xuyên suốt các layer.
140
175
 
141
- ### 5.1. Xử lý Lỗi (`error.utility`)
142
- Chuẩn hóa lỗi bắn ra cho client.
143
176
  ```typescript
144
- import { getError } from '@gennext/lb-infra';
177
+ import { LoggerFactory, RequestContext } from '@gennext/lb-infra';
178
+
179
+ const logger = LoggerFactory.getLogger(['OrderModule']);
145
180
 
146
- throw getError({
147
- statusCode: 400,
148
- message: 'Invalid email format',
149
- name: 'ValidationError'
181
+ // Sử dụng RequestContext để gắn ID tự động
182
+ RequestContext.run({ requestId: 'req-123' }, () => {
183
+ logger.info('User action log'); // Log sẽ có prefix [req-123]
150
184
  });
151
185
  ```
152
186
 
153
- ### 5.2. Mã hóa & Hashing (`crypto.utility`)
187
+ ---
188
+
189
+ ## 9. Redis helper
190
+ Bộ công cụ hỗ trợ Redis String, Hash, JSON và Pub/Sub.
191
+
154
192
  ```typescript
155
- import { hash, hashPassword, comparePassword } from '@gennext/lb-infra';
193
+ import { RedisHelper } from '@gennext/lb-infra/helpers/redis';
156
194
 
157
- // Hash bình thường (MD5, SHA256)
158
- const signature = hash('my-text', { algorithm: 'SHA256', outputType: 'hex' });
195
+ const redis = new RedisHelper({ host: 'localhost', port: 6379 });
159
196
 
160
- // Hash mật khẩu (Tích hợp tự sinh salt)
161
- const hashedPw = await hashPassword('123456');
162
- const isValid = await comparePassword('123456', hashedPw);
197
+ await redis.set({ key: 'config', value: { theme: 'dark' } });
198
+
199
+ // Thao tác với RedisJSON
200
+ await redis.jSet({
201
+ key: 'user:data',
202
+ path: '$',
203
+ value: { settings: { lang: 'vi' } }
204
+ });
205
+
206
+ const lang = await redis.jGet({ key: 'user:data', path: '$.settings.lang' });
163
207
  ```
164
208
 
165
- ### 5.3. Parse & Chuỗi hóa JSON An toàn (`parse.utility` / `axios.utility`)
166
- Chống sập ứng dụng (crash) khi JSON bị lỗi định dạng.
209
+ ---
210
+
211
+ ## 10. Authentication
212
+ Tích hợp sẵn các chiến lược xác thực phổ biến.
213
+
214
+ ```typescript
215
+ import { AuthenticateComponent, JwtStrategy } from '@gennext/lb-infra';
216
+
217
+ // Trong BaseApplication
218
+ this.component(AuthenticateComponent);
219
+ this.bind('authentication.strategies.jwt').toClass(JwtStrategy);
220
+ ```
221
+
222
+ ---
223
+
224
+ ## 11. Authorization
225
+ Phân quyền dựa trên thuộc tính (RBAC/ABAC) sử dụng Casbin.
226
+
167
227
  ```typescript
168
- import { safeParseJson, safeStringifyJson } from '@gennext/lb-infra';
228
+ import { AuthorizeComponent, DrizzleCasbinAdapter } from '@gennext/lb-infra';
169
229
 
170
- const obj = safeParseJson('{"bad_json": ... }'); // Trả về undefined thay vì văng lỗi
171
- const str = safeStringifyJson({ circular: reference }); // Trả về undefined an toàn
230
+ this.component(AuthorizeComponent);
231
+ // Dùng DrizzleCasbinAdapter để lưu policy vào PostgreSQL
172
232
  ```
173
233
 
174
- ### 5.4. Promise & Thời gian (`promise.utility`)
234
+ ---
235
+
236
+ ## 12. Components tùy chọn
237
+
238
+ ### gRPC
175
239
  ```typescript
176
- import { delay } from '@gennext/lb-infra';
240
+ import { BaseGrpcController } from '@gennext/lb-infra/components/grpc';
177
241
 
178
- await delay(1000); // Chờ 1 giây
242
+ export class UserGrpcController extends BaseGrpcController {
243
+ // Implement gRPC methods defined in proto
244
+ }
179
245
  ```
180
246
 
247
+ ### Socket.IO
248
+ Sử dụng `SocketIOServerHelper` để quản lý kết nối thời gian thực.
249
+
250
+ ### Health Check
251
+ Tích hợp sẵn endpoint `/health` để monitor trạng thái hệ thống.
252
+
181
253
  ---
182
254
 
183
- ## 6. Lớp Base (Base Classes)
184
- `@gennext/lb-infra` cung cấp các class cha chuẩn mực cho LoopBack 4 để tự động tích hợp Logger, Scope. Giúp source code các dự án con nhất quán.
255
+ ## 13. Utilities
256
+ Các hàm tiện ích tối ưu trong `src/utilities`:
257
+
258
+ - `getError(opts)`: Tạo error object chuẩn kèm `statusCode`.
259
+ - `hash(text, opts)`: Hỗ trợ MD5, SHA256...
260
+ - `safeParseJson(str)`: Parse JSON không lo crash.
261
+ - `executePromiseWithLimit({ tasks, limit })`: Chạy batch tasks có giới hạn số lượng chạy song song.
262
+ - `getDateTz()`: Lấy thời gian hiện tại theo múi giờ cấu hình.
263
+ - `buildBatchUpdateQuery(table, data)`: Helper tạo câu lệnh cập nhật hàng loạt cho Drizzle.
264
+
265
+ ---
185
266
 
186
- - **`BaseHelper`**: Class cha cho các Helper.
187
- - **`BaseDatasource`**: Class cha cho cấu hình Datasource. Tự động thêm Logger.
188
- - *(Và các base class khác đang dần được hoàn thiện)*
267
+ ## 14. Base classes
268
+
269
+ | Class | Thuộc tính/Phương thức sẵn |
270
+ | :--- | :--- |
271
+ | `BaseHelper` | `this.logger` |
272
+ | `BaseService` | `this.logger` (HFLogger), `this.get(key)` (DI) |
273
+ | `BaseController` | `this.logger`, `this.bindRoute()`, `this.defineRoute()` |
274
+ | `BaseDataSource` | `this.name`, `this.connector` |
275
+
276
+ ---
277
+
278
+ ## 15. Biến môi trường
279
+
280
+ | Tên biến | Mô tả | Giá trị mặc định |
281
+ | :--- | :--- | :--- |
282
+ | `APP_ENV_APPLICATION_NAME` | Tên ứng dụng xuất hiện trong log | `APP` |
283
+ | `APP_ENV_POSTGRES_HOST` | Địa chỉ PostgreSQL | `localhost` |
284
+ | `APP_ENV_POSTGRES_PORT` | Cổng PostgreSQL | `5432` |
285
+ | `APP_ENV_POSTGRES_USERNAME` | Username DB | `postgres` |
286
+ | `APP_ENV_POSTGRES_PASSWORD` | Password DB | `password` |
287
+ | `APP_ENV_POSTGRES_DATABASE` | Tên Database | `postgres` |
288
+ | `APP_ENV_REDIS_DATASOURCE_HOST` | Địa chỉ Redis | `0.0.0.0` |
289
+ | `APP_ENV_REDIS_DATASOURCE_PORT` | Cổng Redis | `6379` |
290
+ | `APP_ENV_LOGGER_FOLDER_PATH` | Đường dẫn lưu file log | `./logs` |
291
+ | `DEBUG` | Kích hoạt log debug | `false` |
292
+
293
+ ---
294
+
295
+ ## 16. Ví dụ end-to-end: Order Service
189
296
 
190
297
  ```typescript
191
- import { BaseHelper } from '@gennext/lb-infra';
298
+ // --- 1. Model (order.schema.ts) ---
299
+ export const orders = pgTable('orders', {
300
+ ...generateIdColumnDefs({ id: { dataType: 'string' } }),
301
+ item: text('item').notNull(),
302
+ ...generateTzColumnDefs()
303
+ });
192
304
 
193
- export class MyCustomHelper extends BaseHelper {
194
- constructor() {
195
- super({ scope: 'MyHelper', identifier: 'Instance1' });
196
- }
305
+ // --- 2. Repository (order.repository.ts) ---
306
+ export class OrderRepository extends DefaultCrudRepository<typeof orders> {
307
+ constructor() { super(orders); }
308
+ }
197
309
 
198
- doSomething() {
199
- // Thuộc tính this.logger đã được tiêm sẵn từ BaseHelper
200
- this.logger.info('Doing something...');
310
+ // --- 3. Service (order.service.ts) ---
311
+ export class OrderService extends BaseService {
312
+ async create(item: string) {
313
+ const repo = this.get<OrderRepository>('repositories.OrderRepository');
314
+ return repo.create({ item });
201
315
  }
202
316
  }
203
- ```
204
317
 
205
- ---
318
+ // --- 4. Controller (order.controller.ts) ---
319
+ @controller({ path: '/orders' })
320
+ export class OrderController extends BaseController {
321
+ async binding() {
322
+ this.bindRoute({
323
+ path: '/', method: 'post',
324
+ responses: { 200: { description: 'Success' } }
325
+ }).to({
326
+ handler: async (c) => {
327
+ const service = this.get<OrderService>('services.OrderService');
328
+ return c.json(await service.create('Product A'));
329
+ }
330
+ });
331
+ }
332
+ }
206
333
 
207
- ## 7. Data Validation với Zod
208
- Thư viện cung cấp sẵn lớp validation sử dụng thư viện Zod kết hợp với OpenAPI.
209
- Bạn thể import các schema chuẩn từ `@gennext/lb-infra/validators` để tái sử dụng mà không cần viết lại.
334
+ // --- 5. Application (main.ts) ---
335
+ class OrderApp extends bootMixin(BaseApplication) {
336
+ getAppInfo() { return { name: 'OrderAPI', version: '1.0' }; }
337
+ }
210
338
 
211
- *(Sẽ tài liệu chi tiết cho Validator ở file chuyên biệt)*
339
+ bootStrapApplication(OrderApp, { port: 8080 });
340
+ ```
@@ -0,0 +1,62 @@
1
+ import type { OpenAPIHono } from '@hono/zod-openapi';
2
+ import type { Logger } from '../../helpers';
3
+ import type { ValueOrPromise } from '../../common';
4
+ import type { ClassType } from '../../common/types';
5
+ export interface IApplicationConfigs {
6
+ host?: string;
7
+ port: number;
8
+ path?: {
9
+ base: string;
10
+ isStrict?: boolean;
11
+ };
12
+ debug?: {
13
+ shouldShowRoutes?: boolean;
14
+ };
15
+ error?: {
16
+ rootKey?: string;
17
+ };
18
+ }
19
+ export interface IApplicationInfo {
20
+ name: string;
21
+ version: string;
22
+ description?: string;
23
+ }
24
+ export interface IMiddlewareConfigs {
25
+ [key: string]: any;
26
+ }
27
+ export declare abstract class BaseApplication {
28
+ protected logger: Logger;
29
+ protected server: OpenAPIHono;
30
+ protected bindings: Map<string, any>;
31
+ protected configs: IApplicationConfigs;
32
+ constructor(configs: IApplicationConfigs);
33
+ abstract getAppInfo(): ValueOrPromise<IApplicationInfo>;
34
+ staticConfigure(): void;
35
+ preConfigure(): ValueOrPromise<void>;
36
+ setupMiddlewares(): Promise<void>;
37
+ postConfigure(): ValueOrPromise<void>;
38
+ controller(_ControllerClass: new (...args: any[]) => any): void;
39
+ repository(_RepositoryClass: new (...args: any[]) => any): void;
40
+ dataSource(_DataSourceClass: new (...args: any[]) => any): void;
41
+ service(_ServiceClass: new (...args: any[]) => any): void;
42
+ component(_ComponentClass: new (...args: any[]) => any): void;
43
+ bind<T>(opts: {
44
+ key: string;
45
+ }): {
46
+ toValue: (v: T) => void;
47
+ toClass: (c: ClassType<T>) => void;
48
+ };
49
+ get<T>(opts: {
50
+ key: string;
51
+ isOptional?: boolean;
52
+ }): T;
53
+ getServer(): OpenAPIHono;
54
+ start(): Promise<void>;
55
+ stop(): Promise<void>;
56
+ static(_opts: {
57
+ folderPath: string;
58
+ mountPath?: string;
59
+ }): void;
60
+ protected applyMiddlewares(_configs: IMiddlewareConfigs): Promise<void>;
61
+ }
62
+ //# sourceMappingURL=base.application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.application.d.ts","sourceRoot":"","sources":["../../../src/base/applications/base.application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,KAAK,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvC,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,8BAAsB,eAAe;IACnC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC;gBAE3B,OAAO,EAAE,mBAAmB;IAQxC,QAAQ,CAAC,UAAU,IAAI,cAAc,CAAC,gBAAgB,CAAC;IAEvD,eAAe,IAAI,IAAI;IACvB,YAAY,IAAI,cAAc,CAAC,IAAI,CAAC;IAC9B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IACvC,aAAa,IAAI,cAAc,CAAC,IAAI,CAAC;IAErC,UAAU,CAAC,gBAAgB,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IAC/D,UAAU,CAAC,gBAAgB,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IAC/D,UAAU,CAAC,gBAAgB,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IAC/D,OAAO,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IACzD,SAAS,CAAC,eAAe,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,IAAI;IAE7D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;qBAEZ,CAAC;qBAGD,SAAS,CAAC,CAAC,CAAC;;IAM7B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,CAAC;IAOtD,SAAS,IAAI,WAAW;IAIlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3B,MAAM,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;cAE/C,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAC9E"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseApplication = void 0;
4
+ const helpers_1 = require("../../helpers");
5
+ class BaseApplication {
6
+ constructor(configs) {
7
+ this.configs = configs;
8
+ this.logger = helpers_1.LoggerFactory.getLogger(['Application']);
9
+ this.bindings = new Map();
10
+ const { OpenAPIHono } = require('@hono/zod-openapi');
11
+ this.server = new OpenAPIHono();
12
+ }
13
+ staticConfigure() { }
14
+ preConfigure() { }
15
+ async setupMiddlewares() { }
16
+ postConfigure() { }
17
+ controller(_ControllerClass) { }
18
+ repository(_RepositoryClass) { }
19
+ dataSource(_DataSourceClass) { }
20
+ service(_ServiceClass) { }
21
+ component(_ComponentClass) { }
22
+ bind(opts) {
23
+ return {
24
+ toValue: (v) => {
25
+ this.bindings.set(opts.key, v);
26
+ },
27
+ toClass: (c) => {
28
+ this.bindings.set(opts.key, new c());
29
+ },
30
+ };
31
+ }
32
+ get(opts) {
33
+ if (!this.bindings.has(opts.key) && !opts.isOptional) {
34
+ throw new Error(`Binding not found: ${opts.key}`);
35
+ }
36
+ return this.bindings.get(opts.key);
37
+ }
38
+ getServer() {
39
+ return this.server;
40
+ }
41
+ async start() {
42
+ await this.preConfigure();
43
+ await this.setupMiddlewares();
44
+ if (typeof this.boot === 'function') {
45
+ await this.boot();
46
+ }
47
+ await this.postConfigure();
48
+ }
49
+ async stop() { }
50
+ static(_opts) { }
51
+ async applyMiddlewares(_configs) { }
52
+ }
53
+ exports.BaseApplication = BaseApplication;
54
+ //# sourceMappingURL=base.application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.application.js","sourceRoot":"","sources":["../../../src/base/applications/base.application.ts"],"names":[],"mappings":";;;AAEA,2CAA8C;AAsB9C,MAAsB,eAAe;IAMnC,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,uBAAa,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,CAAC;IAID,eAAe,KAAU,CAAC;IAC1B,YAAY,KAA0B,CAAC;IACvC,KAAK,CAAC,gBAAgB,KAAmB,CAAC;IAC1C,aAAa,KAA0B,CAAC;IAExC,UAAU,CAAC,gBAA6C,IAAS,CAAC;IAClE,UAAU,CAAC,gBAA6C,IAAS,CAAC;IAClE,UAAU,CAAC,gBAA6C,IAAS,CAAC;IAClE,OAAO,CAAC,aAA0C,IAAS,CAAC;IAC5D,SAAS,CAAC,eAA4C,IAAS,CAAC;IAEhE,IAAI,CAAI,IAAqB;QAC3B,OAAO;YACL,OAAO,EAAE,CAAC,CAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,EAAE,CAAC,CAAe,EAAE,EAAE;gBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;IACJ,CAAC;IAED,GAAG,CAAI,IAA2C;QAChD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAM,CAAC;IAC1C,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,IAAI,OAAQ,IAAY,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7C,MAAO,IAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,KAAmB,CAAC;IAE9B,MAAM,CAAC,KAAiD,IAAS,CAAC;IAExD,KAAK,CAAC,gBAAgB,CAAC,QAA4B,IAAkB,CAAC;CACjF;AA/DD,0CA+DC"}
@@ -0,0 +1,2 @@
1
+ export * from './base.application';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/applications/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./migration.interface"), exports);
18
- __exportStar(require("./migration.service"), exports);
17
+ __exportStar(require("./base.application"), exports);
19
18
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/applications/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC"}
@@ -0,0 +1,23 @@
1
+ import type { ValueOrPromise } from '../../common';
2
+ import type { Logger } from '../../helpers';
3
+ import type { IRouteDefinition, IRouteHandler } from '../http';
4
+ export interface IControllerOptions {
5
+ scope?: string;
6
+ path?: string;
7
+ }
8
+ export declare abstract class BaseController {
9
+ protected logger: Logger;
10
+ protected definitions: Record<string, IRouteDefinition>;
11
+ constructor(opts: IControllerOptions);
12
+ abstract binding(): ValueOrPromise<void>;
13
+ protected defineRoute(_handler: IRouteHandler): void;
14
+ protected defineJSXRoute(_handler: IRouteHandler): void;
15
+ protected bindRoute(opts: {
16
+ configs: IRouteDefinition;
17
+ }): {
18
+ to: (h: {
19
+ handler: any;
20
+ }) => void;
21
+ };
22
+ }
23
+ //# sourceMappingURL=base.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.controller.d.ts","sourceRoot":"","sources":["../../../src/base/controllers/base.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE/D,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,8BAAsB,cAAc;IAClC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBAE5C,IAAI,EAAE,kBAAkB;IAKpC,QAAQ,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC;IAExC,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAEpD,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAEvD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,gBAAgB,CAAA;KAAE;gBAE3C;YAAE,OAAO,EAAE,GAAG,CAAA;SAAE;;CAQ7B"}