fragment-ts 1.0.2 → 1.0.3

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 (304) hide show
  1. package/README.md +401 -0
  2. package/USAGE.md +1439 -0
  3. package/bin/fragment.js +2 -0
  4. package/dist/ai/ai.module.d.ts +27 -0
  5. package/dist/ai/ai.module.d.ts.map +1 -0
  6. package/dist/ai/ai.module.js +77 -0
  7. package/dist/ai/ai.module.js.map +1 -0
  8. package/dist/auth/auth.module.d.ts +18 -0
  9. package/dist/auth/auth.module.d.ts.map +1 -0
  10. package/dist/auth/auth.module.js +89 -0
  11. package/dist/auth/auth.module.js.map +1 -0
  12. package/dist/cli/commands/build.command.d.ts +6 -1
  13. package/dist/cli/commands/build.command.d.ts.map +1 -0
  14. package/dist/cli/commands/build.command.js +130 -10
  15. package/dist/cli/commands/build.command.js.map +1 -1
  16. package/dist/cli/commands/diagnostics.command.d.ts +16 -0
  17. package/dist/cli/commands/diagnostics.command.d.ts.map +1 -0
  18. package/dist/cli/commands/diagnostics.command.js +419 -0
  19. package/dist/cli/commands/diagnostics.command.js.map +1 -0
  20. package/dist/cli/commands/generate.command.d.ts +13 -6
  21. package/dist/cli/commands/generate.command.d.ts.map +1 -0
  22. package/dist/cli/commands/generate.command.js +200 -128
  23. package/dist/cli/commands/generate.command.js.map +1 -1
  24. package/dist/cli/commands/init.command.d.ts +11 -5
  25. package/dist/cli/commands/init.command.d.ts.map +1 -0
  26. package/dist/cli/commands/init.command.js +267 -305
  27. package/dist/cli/commands/init.command.js.map +1 -1
  28. package/dist/cli/commands/migrate.command.d.ts +12 -5
  29. package/dist/cli/commands/migrate.command.d.ts.map +1 -0
  30. package/dist/cli/commands/migrate.command.js +211 -83
  31. package/dist/cli/commands/migrate.command.js.map +1 -1
  32. package/dist/cli/commands/serve.command.d.ts +5 -4
  33. package/dist/cli/commands/serve.command.d.ts.map +1 -0
  34. package/dist/cli/commands/serve.command.js +178 -21
  35. package/dist/cli/commands/serve.command.js.map +1 -1
  36. package/dist/cli/index.d.ts +2 -0
  37. package/dist/cli/index.d.ts.map +1 -0
  38. package/dist/cli/index.js +22 -0
  39. package/dist/cli/index.js.map +1 -0
  40. package/dist/core/container/di-container.d.ts +13 -7
  41. package/dist/core/container/di-container.d.ts.map +1 -0
  42. package/dist/core/container/di-container.js +75 -25
  43. package/dist/core/container/di-container.js.map +1 -1
  44. package/dist/core/decorators/application.decorator.d.ts +8 -0
  45. package/dist/core/decorators/application.decorator.d.ts.map +1 -0
  46. package/dist/core/decorators/application.decorator.js +16 -0
  47. package/dist/core/decorators/application.decorator.js.map +1 -0
  48. package/dist/core/decorators/auto-configuration.decorator.d.ts +2 -0
  49. package/dist/core/decorators/auto-configuration.decorator.d.ts.map +1 -0
  50. package/dist/core/decorators/auto-configuration.decorator.js +19 -0
  51. package/dist/core/decorators/auto-configuration.decorator.js.map +1 -0
  52. package/dist/core/decorators/conditional.decorators.d.ts +4 -0
  53. package/dist/core/decorators/conditional.decorators.d.ts.map +1 -0
  54. package/dist/core/decorators/conditional.decorators.js +22 -0
  55. package/dist/core/decorators/conditional.decorators.js.map +1 -0
  56. package/dist/core/decorators/controller.decorator.d.ts +1 -3
  57. package/dist/core/decorators/controller.decorator.d.ts.map +1 -0
  58. package/dist/core/decorators/controller.decorator.js +12 -9
  59. package/dist/core/decorators/controller.decorator.js.map +1 -1
  60. package/dist/core/decorators/http.decorators.d.ts +12 -0
  61. package/dist/core/decorators/http.decorators.d.ts.map +1 -0
  62. package/dist/core/decorators/http.decorators.js +52 -0
  63. package/dist/core/decorators/http.decorators.js.map +1 -0
  64. package/dist/core/decorators/injectable.decorator.d.ts +3 -3
  65. package/dist/core/decorators/injectable.decorator.d.ts.map +1 -0
  66. package/dist/core/decorators/injectable.decorator.js +11 -8
  67. package/dist/core/decorators/injectable.decorator.js.map +1 -1
  68. package/dist/core/decorators/injection.decorators.d.ts +5 -0
  69. package/dist/core/decorators/injection.decorators.d.ts.map +1 -0
  70. package/dist/core/decorators/injection.decorators.js +29 -0
  71. package/dist/core/decorators/injection.decorators.js.map +1 -0
  72. package/dist/core/decorators/repository.decorator.d.ts +1 -0
  73. package/dist/core/decorators/repository.decorator.d.ts.map +1 -0
  74. package/dist/core/decorators/repository.decorator.js +12 -1
  75. package/dist/core/decorators/repository.decorator.js.map +1 -1
  76. package/dist/core/decorators/service.decorator.d.ts +1 -0
  77. package/dist/core/decorators/service.decorator.d.ts.map +1 -0
  78. package/dist/core/decorators/service.decorator.js +12 -1
  79. package/dist/core/decorators/service.decorator.js.map +1 -1
  80. package/dist/core/index.d.ts +13 -0
  81. package/dist/core/index.d.ts.map +1 -0
  82. package/dist/core/index.js +29 -0
  83. package/dist/core/index.js.map +1 -0
  84. package/dist/core/loader/file-loader.d.ts +5 -0
  85. package/dist/core/loader/file-loader.d.ts.map +1 -0
  86. package/dist/core/loader/file-loader.js +85 -0
  87. package/dist/core/loader/file-loader.js.map +1 -0
  88. package/dist/core/metadata/metadata-keys.d.ts +20 -0
  89. package/dist/core/metadata/metadata-keys.d.ts.map +1 -0
  90. package/dist/core/metadata/metadata-keys.js +23 -0
  91. package/dist/core/metadata/metadata-keys.js.map +1 -0
  92. package/dist/core/metadata/metadata-storage.d.ts +36 -0
  93. package/dist/core/metadata/metadata-storage.d.ts.map +1 -0
  94. package/dist/core/metadata/metadata-storage.js +53 -0
  95. package/dist/core/metadata/metadata-storage.js.map +1 -0
  96. package/dist/core/scanner/component-scanner.d.ts +16 -0
  97. package/dist/core/scanner/component-scanner.d.ts.map +1 -0
  98. package/dist/core/scanner/component-scanner.js +147 -0
  99. package/dist/core/scanner/component-scanner.js.map +1 -0
  100. package/dist/index.d.ts +22 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +60 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/plugins/plugin-manager.d.ts +14 -0
  105. package/dist/plugins/plugin-manager.d.ts.map +1 -0
  106. package/dist/{cli/utils/file-generator.js → plugins/plugin-manager.js} +32 -24
  107. package/dist/plugins/plugin-manager.js.map +1 -0
  108. package/dist/shared/errors.d.ts +18 -0
  109. package/dist/shared/errors.d.ts.map +1 -0
  110. package/dist/shared/errors.js +41 -0
  111. package/dist/shared/errors.js.map +1 -0
  112. package/dist/testing/runner.d.ts +26 -0
  113. package/dist/testing/runner.d.ts.map +1 -0
  114. package/dist/testing/runner.js +143 -0
  115. package/dist/testing/runner.js.map +1 -0
  116. package/dist/typeorm/typeorm-module.d.ts +36 -0
  117. package/dist/typeorm/typeorm-module.d.ts.map +1 -0
  118. package/dist/typeorm/typeorm-module.js +150 -0
  119. package/dist/typeorm/typeorm-module.js.map +1 -0
  120. package/dist/web/application.d.ts +29 -0
  121. package/dist/web/application.d.ts.map +1 -0
  122. package/dist/web/application.js +301 -0
  123. package/dist/web/application.js.map +1 -0
  124. package/dist/web/interfaces.d.ts +14 -0
  125. package/dist/web/interfaces.d.ts.map +1 -0
  126. package/dist/{auth/dto/login.dto.js → web/interfaces.js} +1 -1
  127. package/dist/web/interfaces.js.map +1 -0
  128. package/examples/blog-api/fragment.json +14 -0
  129. package/examples/blog-api/package-lock.json +3405 -0
  130. package/examples/blog-api/package.json +19 -0
  131. package/examples/blog-api/src/controllers/app.controller.ts +9 -0
  132. package/examples/blog-api/src/controllers/auth.controller.ts +17 -0
  133. package/examples/blog-api/src/controllers/category.controller.ts +29 -0
  134. package/examples/blog-api/src/controllers/comment.controller.ts +31 -0
  135. package/examples/blog-api/src/controllers/post.controller.ts +46 -0
  136. package/examples/blog-api/src/dto/create-category.dto.ts +6 -0
  137. package/examples/blog-api/src/dto/create-comment.dto.ts +6 -0
  138. package/examples/blog-api/src/dto/create-post.dto.ts +6 -0
  139. package/examples/blog-api/src/entities/category.entity.ts +16 -0
  140. package/examples/blog-api/src/entities/comment.entity.ts +29 -0
  141. package/examples/blog-api/src/entities/post.entity.ts +42 -0
  142. package/examples/blog-api/src/entities/user.entity.ts +25 -0
  143. package/examples/blog-api/src/main.ts +16 -0
  144. package/examples/blog-api/src/migrations/1767737463842-InitialSchema.ts +60 -0
  145. package/examples/blog-api/src/repositories/category.repository.ts +25 -0
  146. package/examples/blog-api/src/repositories/comment.repository.ts +25 -0
  147. package/examples/blog-api/src/repositories/post.repository.ts +29 -0
  148. package/examples/blog-api/src/seeds/SampleData.seed.ts +41 -0
  149. package/examples/blog-api/src/services/app.service.ts +8 -0
  150. package/examples/blog-api/src/services/auth.service.ts +15 -0
  151. package/examples/blog-api/src/services/category.service.ts +27 -0
  152. package/examples/blog-api/src/services/comment.service.ts +31 -0
  153. package/examples/blog-api/src/services/post.service.ts +35 -0
  154. package/examples/blog-api/tsconfig.json +23 -0
  155. package/package.json +55 -33
  156. package/src/ai/ai.module.ts +110 -0
  157. package/src/auth/auth.module.ts +77 -0
  158. package/src/cli/commands/build.command.ts +123 -13
  159. package/src/cli/commands/diagnostics.command.ts +438 -0
  160. package/src/cli/commands/generate.command.ts +206 -137
  161. package/src/cli/commands/init.command.ts +337 -349
  162. package/src/cli/commands/migrate.command.ts +203 -88
  163. package/src/cli/commands/serve.command.ts +176 -24
  164. package/src/cli/index.ts +23 -0
  165. package/src/core/container/di-container.ts +83 -26
  166. package/src/core/decorators/application.decorator.ts +26 -0
  167. package/src/core/decorators/auto-configuration.decorator.ts +17 -0
  168. package/src/core/decorators/conditional.decorators.ts +19 -0
  169. package/src/core/decorators/controller.decorator.ts +14 -11
  170. package/src/core/decorators/http.decorators.ts +71 -0
  171. package/src/core/decorators/injectable.decorator.ts +14 -9
  172. package/src/core/decorators/injection.decorators.ts +26 -0
  173. package/src/core/decorators/repository.decorator.ts +13 -2
  174. package/src/core/decorators/service.decorator.ts +13 -2
  175. package/src/core/index.ts +13 -0
  176. package/src/core/loader/file-loader.ts +55 -0
  177. package/src/core/metadata/metadata-keys.ts +19 -0
  178. package/src/core/metadata/metadata-storage.ts +91 -0
  179. package/src/core/scanner/component-scanner.ts +129 -0
  180. package/src/index.ts +45 -0
  181. package/src/plugins/plugin-manager.ts +52 -0
  182. package/src/shared/errors.ts +34 -0
  183. package/src/testing/runner.ts +143 -0
  184. package/src/typeorm/typeorm-module.ts +216 -0
  185. package/src/web/application.ts +348 -0
  186. package/src/web/interfaces.ts +17 -0
  187. package/tsconfig.json +8 -6
  188. package/.env.example +0 -0
  189. package/base.ts +0 -1810
  190. package/base2.ts +0 -968
  191. package/bin/frg.ts +0 -5
  192. package/config/fragment.lock.yaml +0 -0
  193. package/config/fragment.yaml +0 -0
  194. package/dist/app.d.ts +0 -15
  195. package/dist/app.js +0 -91
  196. package/dist/app.js.map +0 -1
  197. package/dist/auth/auth.controller.d.ts +0 -10
  198. package/dist/auth/auth.controller.js +0 -88
  199. package/dist/auth/auth.controller.js.map +0 -1
  200. package/dist/auth/auth.middleware.d.ts +0 -2
  201. package/dist/auth/auth.middleware.js +0 -25
  202. package/dist/auth/auth.middleware.js.map +0 -1
  203. package/dist/auth/auth.service.d.ts +0 -20
  204. package/dist/auth/auth.service.js +0 -144
  205. package/dist/auth/auth.service.js.map +0 -1
  206. package/dist/auth/dto/login.dto.d.ts +0 -9
  207. package/dist/auth/dto/login.dto.js.map +0 -1
  208. package/dist/cli/cli.d.ts +0 -12
  209. package/dist/cli/cli.js +0 -187
  210. package/dist/cli/cli.js.map +0 -1
  211. package/dist/cli/commands/config.command.d.ts +0 -6
  212. package/dist/cli/commands/config.command.js +0 -285
  213. package/dist/cli/commands/config.command.js.map +0 -1
  214. package/dist/cli/templates/controller.template.d.ts +0 -1
  215. package/dist/cli/templates/controller.template.js +0 -53
  216. package/dist/cli/templates/controller.template.js.map +0 -1
  217. package/dist/cli/templates/entity.template.d.ts +0 -1
  218. package/dist/cli/templates/entity.template.js +0 -24
  219. package/dist/cli/templates/entity.template.js.map +0 -1
  220. package/dist/cli/templates/repository.template.d.ts +0 -1
  221. package/dist/cli/templates/repository.template.js +0 -44
  222. package/dist/cli/templates/repository.template.js.map +0 -1
  223. package/dist/cli/templates/service.template.d.ts +0 -1
  224. package/dist/cli/templates/service.template.js +0 -44
  225. package/dist/cli/templates/service.template.js.map +0 -1
  226. package/dist/cli/utils/file-generator.d.ts +0 -9
  227. package/dist/cli/utils/file-generator.js.map +0 -1
  228. package/dist/cli/utils/logger.d.ts +0 -14
  229. package/dist/cli/utils/logger.js +0 -50
  230. package/dist/cli/utils/logger.js.map +0 -1
  231. package/dist/controllers/health.controller.d.ts +0 -13
  232. package/dist/controllers/health.controller.js +0 -51
  233. package/dist/controllers/health.controller.js.map +0 -1
  234. package/dist/core/config/config-loader.d.ts +0 -31
  235. package/dist/core/config/config-loader.js +0 -99
  236. package/dist/core/config/config-loader.js.map +0 -1
  237. package/dist/core/decorators/auth-guard.decorator.d.ts +0 -3
  238. package/dist/core/decorators/auth-guard.decorator.js +0 -19
  239. package/dist/core/decorators/auth-guard.decorator.js.map +0 -1
  240. package/dist/core/decorators/autowire.decorator.d.ts +0 -3
  241. package/dist/core/decorators/autowire.decorator.js +0 -18
  242. package/dist/core/decorators/autowire.decorator.js.map +0 -1
  243. package/dist/core/decorators/middleware.decorator.d.ts +0 -3
  244. package/dist/core/decorators/middleware.decorator.js +0 -21
  245. package/dist/core/decorators/middleware.decorator.js.map +0 -1
  246. package/dist/core/decorators/route.decorator.d.ts +0 -14
  247. package/dist/core/decorators/route.decorator.js +0 -33
  248. package/dist/core/decorators/route.decorator.js.map +0 -1
  249. package/dist/core/openai/openai-client.d.ts +0 -12
  250. package/dist/core/openai/openai-client.js +0 -94
  251. package/dist/core/openai/openai-client.js.map +0 -1
  252. package/dist/database/data-source.d.ts +0 -4
  253. package/dist/database/data-source.js +0 -27
  254. package/dist/database/data-source.js.map +0 -1
  255. package/dist/entities/session.entity.d.ts +0 -9
  256. package/dist/entities/session.entity.js +0 -46
  257. package/dist/entities/session.entity.js.map +0 -1
  258. package/dist/entities/user.entity.d.ts +0 -10
  259. package/dist/entities/user.entity.js +0 -49
  260. package/dist/entities/user.entity.js.map +0 -1
  261. package/dist/middlewares/logging.middleware.d.ts +0 -2
  262. package/dist/middlewares/logging.middleware.js +0 -29
  263. package/dist/middlewares/logging.middleware.js.map +0 -1
  264. package/dist/repositories/session.repository.d.ts +0 -9
  265. package/dist/repositories/session.repository.js +0 -51
  266. package/dist/repositories/session.repository.js.map +0 -1
  267. package/dist/repositories/user.repository.d.ts +0 -10
  268. package/dist/repositories/user.repository.js +0 -44
  269. package/dist/repositories/user.repository.js.map +0 -1
  270. package/dist/server.d.ts +0 -1
  271. package/dist/server.js +0 -31
  272. package/dist/server.js.map +0 -1
  273. package/dist/services/health.service.d.ts +0 -13
  274. package/dist/services/health.service.js +0 -45
  275. package/dist/services/health.service.js.map +0 -1
  276. package/readme.md +0 -120
  277. package/src/app.ts +0 -121
  278. package/src/auth/auth.controller.ts +0 -52
  279. package/src/auth/auth.middleware.ts +0 -27
  280. package/src/auth/auth.service.ts +0 -110
  281. package/src/auth/dto/login.dto.ts +0 -11
  282. package/src/cli/cli.ts +0 -212
  283. package/src/cli/commands/config.command.ts +0 -280
  284. package/src/cli/templates/controller.template.ts +0 -51
  285. package/src/cli/templates/entity.template.ts +0 -22
  286. package/src/cli/templates/repository.template.ts +0 -42
  287. package/src/cli/templates/service.template.ts +0 -42
  288. package/src/cli/utils/file-generator.ts +0 -37
  289. package/src/cli/utils/logger.ts +0 -52
  290. package/src/controllers/health.controller.ts +0 -24
  291. package/src/core/config/config-loader.ts +0 -98
  292. package/src/core/decorators/auth-guard.decorator.ts +0 -15
  293. package/src/core/decorators/autowire.decorator.ts +0 -18
  294. package/src/core/decorators/middleware.decorator.ts +0 -18
  295. package/src/core/decorators/route.decorator.ts +0 -33
  296. package/src/core/openai/openai-client.ts +0 -99
  297. package/src/database/data-source.ts +0 -29
  298. package/src/entities/session.entity.ts +0 -25
  299. package/src/entities/user.entity.ts +0 -27
  300. package/src/middlewares/logging.middleware.ts +0 -28
  301. package/src/repositories/session.repository.ts +0 -42
  302. package/src/repositories/user.repository.ts +0 -37
  303. package/src/server.ts +0 -32
  304. package/src/services/health.service.ts +0 -29
@@ -1,29 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loggingMiddleware = loggingMiddleware;
7
- const pino_1 = __importDefault(require("pino"));
8
- const logger = (0, pino_1.default)({
9
- transport: {
10
- target: 'pino-pretty',
11
- options: {
12
- colorize: true
13
- }
14
- }
15
- });
16
- function loggingMiddleware(req, res, next) {
17
- const start = Date.now();
18
- res.on('finish', () => {
19
- const duration = Date.now() - start;
20
- logger.info({
21
- method: req.method,
22
- url: req.url,
23
- status: res.statusCode,
24
- duration: `${duration}ms`
25
- });
26
- });
27
- next();
28
- }
29
- //# sourceMappingURL=logging.middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logging.middleware.js","sourceRoot":"","sources":["../../src/middlewares/logging.middleware.ts"],"names":[],"mappings":";;;;;AAaA,8CAcC;AAzBD,gDAAwB;AAExB,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC;IAClB,SAAS,EAAE;QACT,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC,CAAC;AAEH,SAAgB,iBAAiB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE,GAAG,CAAC,UAAU;YACtB,QAAQ,EAAE,GAAG,QAAQ,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -1,9 +0,0 @@
1
- import { Session } from '../entities/session.entity';
2
- export declare class SessionRepository {
3
- private repository;
4
- constructor();
5
- findByToken(token: string): Promise<Session | null>;
6
- create(sessionData: Partial<Session>): Promise<Session>;
7
- deleteByToken(token: string): Promise<boolean>;
8
- deleteExpired(): Promise<void>;
9
- }
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SessionRepository = void 0;
13
- const typeorm_1 = require("typeorm");
14
- const repository_decorator_1 = require("../core/decorators/repository.decorator");
15
- const session_entity_1 = require("../entities/session.entity");
16
- const data_source_1 = require("../database/data-source");
17
- let SessionRepository = class SessionRepository {
18
- constructor() {
19
- this.repository = data_source_1.AppDataSource.getRepository(session_entity_1.Session);
20
- }
21
- async findByToken(token) {
22
- return await this.repository.findOne({
23
- where: {
24
- token,
25
- expiresAt: (0, typeorm_1.MoreThan)(new Date())
26
- },
27
- relations: ['user']
28
- });
29
- }
30
- async create(sessionData) {
31
- const session = this.repository.create(sessionData);
32
- return await this.repository.save(session);
33
- }
34
- async deleteByToken(token) {
35
- const result = await this.repository.delete({ token });
36
- return result.affected ? result.affected > 0 : false;
37
- }
38
- async deleteExpired() {
39
- await this.repository
40
- .createQueryBuilder()
41
- .delete()
42
- .where('expiresAt < :now', { now: new Date() })
43
- .execute();
44
- }
45
- };
46
- exports.SessionRepository = SessionRepository;
47
- exports.SessionRepository = SessionRepository = __decorate([
48
- (0, repository_decorator_1.Repository)(),
49
- __metadata("design:paramtypes", [])
50
- ], SessionRepository);
51
- //# sourceMappingURL=session.repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.repository.js","sourceRoot":"","sources":["../../src/repositories/session.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qCAAoE;AACpE,kFAAqE;AACrE,+DAAqD;AACrD,yDAAwD;AAGjD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAG5B;QACE,IAAI,CAAC,UAAU,GAAG,2BAAa,CAAC,aAAa,CAAC,wBAAO,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACnC,KAAK,EAAE;gBACL,KAAK;gBACL,SAAS,EAAE,IAAA,kBAAQ,EAAC,IAAI,IAAI,EAAE,CAAC;aAChC;YACD,SAAS,EAAE,CAAC,MAAM,CAAC;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAA6B;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACpD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,UAAU;aAClB,kBAAkB,EAAE;aACpB,MAAM,EAAE;aACR,KAAK,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;aAC9C,OAAO,EAAE,CAAC;IACf,CAAC;CACF,CAAA;AAlCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,iCAAU,GAAE;;GACA,iBAAiB,CAkC7B"}
@@ -1,10 +0,0 @@
1
- import { User } from '../entities/user.entity';
2
- export declare class UserRepository {
3
- private repository;
4
- constructor();
5
- findById(id: number): Promise<User | null>;
6
- findByEmail(email: string): Promise<User | null>;
7
- create(userData: Partial<User>): Promise<User>;
8
- update(id: number, userData: Partial<User>): Promise<User | null>;
9
- delete(id: number): Promise<boolean>;
10
- }
@@ -1,44 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.UserRepository = void 0;
13
- const repository_decorator_1 = require("../core/decorators/repository.decorator");
14
- const user_entity_1 = require("../entities/user.entity");
15
- const data_source_1 = require("../database/data-source");
16
- let UserRepository = class UserRepository {
17
- constructor() {
18
- this.repository = data_source_1.AppDataSource.getRepository(user_entity_1.User);
19
- }
20
- async findById(id) {
21
- return await this.repository.findOne({ where: { id } });
22
- }
23
- async findByEmail(email) {
24
- return await this.repository.findOne({ where: { email } });
25
- }
26
- async create(userData) {
27
- const user = this.repository.create(userData);
28
- return await this.repository.save(user);
29
- }
30
- async update(id, userData) {
31
- await this.repository.update(id, userData);
32
- return await this.findById(id);
33
- }
34
- async delete(id) {
35
- const result = await this.repository.delete(id);
36
- return result.affected ? result.affected > 0 : false;
37
- }
38
- };
39
- exports.UserRepository = UserRepository;
40
- exports.UserRepository = UserRepository = __decorate([
41
- (0, repository_decorator_1.Repository)(),
42
- __metadata("design:paramtypes", [])
43
- ], UserRepository);
44
- //# sourceMappingURL=user.repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.repository.js","sourceRoot":"","sources":["../../src/repositories/user.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,kFAAqE;AACrE,yDAA+C;AAC/C,yDAAwD;AAGjD,IAAM,cAAc,GAApB,MAAM,cAAc;IAGzB;QACE,IAAI,CAAC,UAAU,GAAG,2BAAa,CAAC,aAAa,CAAC,kBAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAuB;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,QAAuB;QAC9C,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;CACF,CAAA;AA7BY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,iCAAU,GAAE;;GACA,cAAc,CA6B1B"}
package/dist/server.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/server.js DELETED
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const app_1 = require("./app");
4
- const config_loader_1 = require("./core/config/config-loader");
5
- async function bootstrap() {
6
- try {
7
- const app = new app_1.FragmentApplication();
8
- await app.initialize();
9
- const config = config_loader_1.ConfigLoader.get();
10
- const port = config.app.port;
11
- app.getExpressApp().listen(port, () => {
12
- console.log(`
13
- ╔═══════════════════════════════════════════════════╗
14
- ║ ║
15
- ║ 🔷 FRAGMENT Framework Started ║
16
- ║ ║
17
- ║ Port: ${port} ║
18
- ║ Environment: ${config.app.env} ║
19
- ║ Database: Connected ║
20
- ║ ║
21
- ╚═══════════════════════════════════════════════════╝
22
- `);
23
- });
24
- }
25
- catch (error) {
26
- console.error('❌ Failed to start application:', error);
27
- process.exit(1);
28
- }
29
- }
30
- bootstrap();
31
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;AACA,+BAA4C;AAC5C,+DAA2D;AAE3D,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,yBAAmB,EAAE,CAAC;QACtC,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,4BAAY,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAE7B,GAAG,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC;;;;;eAKH,IAAI;sBACG,MAAM,CAAC,GAAG,CAAC,GAAG;;;;OAI7B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- import { OpenAIClient } from '../core/openai/openai-client';
2
- export declare class HealthService {
3
- private openAIClient;
4
- constructor(openAIClient: OpenAIClient);
5
- getStatus(): Promise<{
6
- status: string;
7
- timestamp: string;
8
- database: string;
9
- }>;
10
- generateHealthTip(): Promise<{
11
- tip: string;
12
- }>;
13
- }
@@ -1,45 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.HealthService = void 0;
16
- const service_decorator_1 = require("../core/decorators/service.decorator");
17
- const autowire_decorator_1 = require("../core/decorators/autowire.decorator");
18
- const openai_client_1 = require("../core/openai/openai-client");
19
- let HealthService = class HealthService {
20
- constructor(openAIClient) {
21
- this.openAIClient = openAIClient;
22
- }
23
- async getStatus() {
24
- return {
25
- status: 'ok',
26
- timestamp: new Date().toISOString(),
27
- database: 'connected'
28
- };
29
- }
30
- async generateHealthTip() {
31
- const prompt = 'Give me a short health tip in one sentence.';
32
- const tip = await this.openAIClient.complete(prompt, {
33
- maxTokens: 50,
34
- temperature: 0.9
35
- });
36
- return { tip };
37
- }
38
- };
39
- exports.HealthService = HealthService;
40
- exports.HealthService = HealthService = __decorate([
41
- (0, service_decorator_1.Service)(),
42
- __param(0, (0, autowire_decorator_1.Autowire)()),
43
- __metadata("design:paramtypes", [openai_client_1.OpenAIClient])
44
- ], HealthService);
45
- //# sourceMappingURL=health.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.service.js","sourceRoot":"","sources":["../../src/services/health.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,4EAA+D;AAC/D,8EAAiE;AACjE,gEAA4D;AAGrD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YACsB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAC7C,CAAC;IAEJ,KAAK,CAAC,SAAS;QACb,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,WAAW;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,MAAM,GAAG,6CAA6C,CAAC;QAC7D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;YACnD,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,GAAG;SACjB,CAAC,CAAC;QAEH,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;CACF,CAAA;AAtBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,2BAAO,GAAE;IAGL,WAAA,IAAA,6BAAQ,GAAE,CAAA;qCAAuB,4BAAY;GAFrC,aAAa,CAsBzB"}
package/readme.md DELETED
@@ -1,120 +0,0 @@
1
- #### **Project Initialization**
2
- ```bash
3
- frg init my-app # Create new project with wizard
4
- frg init # Interactive mode
5
- ```
6
- Features:
7
- - Database selection (PostgreSQL/MySQL/SQLite/MongoDB)
8
- - Optional OpenAI integration
9
- - Optional authentication system
10
- - Package manager choice (npm/yarn/pnpm)
11
- - Automatic dependency installation
12
-
13
- #### **Code Generation**
14
- ```bash
15
- frg generate controller User # Generate controller
16
- frg g c User # Short alias
17
-
18
- frg generate service User # Generate service
19
- frg g s User # Short alias
20
-
21
- frg generate repository User # Generate repository
22
- frg g r User # Short alias
23
-
24
- frg generate entity User # Generate entity
25
- frg g e User # Short alias
26
-
27
- frg generate resource Product # Generate everything at once!
28
- frg g res Product # Controller + Service + Repository + Entity
29
- ```
30
-
31
- #### **Configuration Management**
32
- ```bash
33
- frg config ai # Configure OpenAI (interactive)
34
- frg config db # Configure database (interactive)
35
- frg config show # Display current configuration
36
- ```
37
-
38
- #### **Development**
39
- ```bash
40
- frg serve # Start dev server with hot-reload
41
- frg dev # Alias
42
- frg serve --port 8080 # Custom port
43
- frg serve --no-watch # Disable auto-restart
44
- ```
45
-
46
- #### **Production**
47
- ```bash
48
- frg build # Build for production
49
- ```
50
-
51
- #### **Database Migrations**
52
- ```bash
53
- frg migrate run # Run pending migrations
54
- frg migrate generate # Create new migration
55
- frg migrate revert # Revert last migration
56
- frg migrate show # Migration status
57
- ```
58
-
59
- ### **🎨 CLI Features:**
60
-
61
- 1. **Beautiful ASCII Art** - Fragment logo on startup
62
- 2. **Color-Coded Output** - Success (green), errors (red), info (blue)
63
- 3. **Progress Spinners** - Visual feedback for long operations
64
- 4. **Interactive Prompts** - inquirer.js powered wizards
65
- 5. **Validation** - Input validation with helpful messages
66
- 6. **Smart Templates** - Auto-generates boilerplate code
67
- 7. **Configuration Boxes** - Formatted output tables
68
- 8. **Error Handling** - Graceful failures with helpful messages
69
-
70
- ### **📦 Template System:**
71
-
72
- All generators use smart templates that:
73
- - Auto-inject dependencies via `@Autowire()`
74
- - Follow naming conventions
75
- - Include CRUD operations
76
- - Are fully typed with TypeScript
77
- - Follow Fragment patterns
78
-
79
- ### **🚀 Example Workflow:**
80
-
81
- ```bash
82
- # Initialize new project
83
- frg init my-blog-api
84
- ✓ Select PostgreSQL
85
- ✓ Enable OpenAI
86
- ✓ Include auth system
87
-
88
- # Configure OpenAI
89
- frg config ai
90
- ✓ Enter API key
91
- ✓ Select model
92
-
93
- # Generate complete resource
94
- frg generate resource Post
95
- ✓ Creates controller, service, repository, entity
96
- ✓ Sets up routes at /api/posts
97
-
98
- # Start server
99
- frg serve
100
- 🔷 Fragment Framework Started
101
- 📍 Routes registered
102
- ✓ Ready on port 3000
103
- ```
104
-
105
- ### **Project Structure:**
106
- ```
107
- my-fragment-app/
108
- ├── bin/frg.ts # CLI entry point
109
- ├── src/
110
- │ ├── cli/ # CLI commands & utils
111
- │ ├── core/ # Framework core
112
- │ ├── controllers/ # HTTP controllers
113
- │ ├── services/ # Business logic
114
- │ ├── repositories/ # Data access
115
- │ ├── entities/ # TypeORM entities
116
- │ └── app.ts # FragmentApplication
117
- ├── config/
118
- │ └── fragment.yaml # Configuration
119
- └── package.json
120
- ```
package/src/app.ts DELETED
@@ -1,121 +0,0 @@
1
-
2
- import express, { Express, Request, Response, NextFunction } from 'express';
3
- import { DIContainer } from './core/container/di-container';
4
- import { ConfigLoader } from './core/config/config-loader';
5
- import { initializeDataSource, AppDataSource } from './database/data-source';
6
- import { loggingMiddleware } from './middlewares/logging.middleware';
7
- import { authMiddleware } from './auth/auth.middleware';
8
- import {
9
- CONTROLLER_METADATA,
10
- CONTROLLER_PATH
11
- } from './core/decorators/controller.decorator';
12
- import {
13
- ROUTE_METADATA
14
- } from './core/decorators/route.decorator';
15
- import {
16
- AUTH_GUARD_METADATA
17
- } from './core/decorators/auth-guard.decorator';
18
- import {
19
- MIDDLEWARE_METADATA
20
- } from './core/decorators/middleware.decorator';
21
-
22
- // Import all controllers, services, repositories
23
- import './controllers/health.controller';
24
- import './auth/auth.controller';
25
- import './services/health.service';
26
- import './repositories/user.repository';
27
- import './repositories/session.repository';
28
- import './auth/auth.service';
29
- import './core/openai/openai-client';
30
-
31
- export class FragmentApplication {
32
- private app: Express;
33
-
34
- constructor() {
35
- this.app = express();
36
- }
37
-
38
- async initialize(): Promise<Express> {
39
- // Load configuration
40
- ConfigLoader.load(true);
41
-
42
- // Initialize database
43
- const dataSource = initializeDataSource();
44
- await dataSource.initialize();
45
- console.log('✅ Database connected');
46
-
47
- // Middleware
48
- this.app.use(express.json());
49
- this.app.use(express.urlencoded({ extended: true }));
50
- this.app.use(loggingMiddleware);
51
-
52
- // Register all controllers
53
- this.registerControllers();
54
-
55
- // Error handling
56
- this.app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
57
- console.error(err.stack);
58
- res.status(500).json({ error: 'Internal server error' });
59
- });
60
-
61
- return this.app;
62
- }
63
-
64
- private registerControllers(): void {
65
- const registeredClasses = DIContainer.getRegisteredClasses();
66
-
67
- registeredClasses.forEach((controllerClass) => {
68
- const isController = Reflect.getMetadata(CONTROLLER_METADATA, controllerClass);
69
- if (!isController) return;
70
-
71
- const basePath = Reflect.getMetadata(CONTROLLER_PATH, controllerClass) || '';
72
- const routes = Reflect.getMetadata(ROUTE_METADATA, controllerClass) || [];
73
- const classMiddlewares = Reflect.getMetadata(MIDDLEWARE_METADATA, controllerClass) || [];
74
- const classAuthGuard = Reflect.getMetadata(AUTH_GUARD_METADATA, controllerClass);
75
-
76
- const controllerInstance = DIContainer.resolve(controllerClass) as any;
77
-
78
- routes.forEach((route: any) => {
79
- const fullPath = basePath + route.path;
80
- const handler = controllerInstance[route.handlerName].bind(controllerInstance);
81
-
82
- const middlewares: any[] = [...classMiddlewares];
83
-
84
- const methodAuthGuard = Reflect.getMetadata(
85
- AUTH_GUARD_METADATA,
86
- controllerClass,
87
- route.handlerName
88
- );
89
- if (classAuthGuard || methodAuthGuard) {
90
- middlewares.push(authMiddleware);
91
- }
92
-
93
- const methodMiddlewares = Reflect.getMetadata(
94
- MIDDLEWARE_METADATA,
95
- controllerClass,
96
- route.handlerName
97
- ) || [];
98
- middlewares.push(...methodMiddlewares);
99
-
100
- const asyncHandler = async (req: Request, res: Response, next: NextFunction) => {
101
- try {
102
- const result = await handler(req, res, next);
103
- if (result && !res.headersSent) {
104
- res.json(result);
105
- }
106
- } catch (error) {
107
- next(error);
108
- }
109
- };
110
-
111
- (this.app as any)[route.method](fullPath, ...middlewares, asyncHandler);
112
-
113
- console.log(`📍 ${route.method.toUpperCase().padEnd(6)} ${fullPath}`);
114
- });
115
- });
116
- }
117
-
118
- getExpressApp(): Express {
119
- return this.app;
120
- }
121
- }
@@ -1,52 +0,0 @@
1
-
2
- import { Controller } from '../core/decorators/controller.decorator';
3
- import { Post, Get } from '../core/decorators/route.decorator';
4
- import { Injectable } from '../core/decorators/injectable.decorator';
5
- import { Autowire } from '../core/decorators/autowire.decorator';
6
- import { AuthGuard } from '../core/decorators/auth-guard.decorator';
7
- import { AuthService } from './auth.service';
8
- import { Request, Response } from 'express';
9
-
10
- @Controller('/api/auth')
11
- @Injectable()
12
- export class AuthController {
13
- constructor(
14
- @Autowire() private authService: AuthService
15
- ) {}
16
-
17
- @Post('/register')
18
- async register(req: Request, res: Response) {
19
- try {
20
- const result = await this.authService.register(req.body);
21
- return res.json(result);
22
- } catch (error: any) {
23
- return res.status(400).json({ error: error.message });
24
- }
25
- }
26
-
27
- @Post('/login')
28
- async login(req: Request, res: Response) {
29
- try {
30
- const result = await this.authService.login(req.body);
31
- return res.json(result);
32
- } catch (error: any) {
33
- return res.status(401).json({ error: error.message });
34
- }
35
- }
36
-
37
- @Post('/logout')
38
- @AuthGuard()
39
- async logout(req: Request, res: Response) {
40
- const token = req.headers.authorization?.replace('Bearer ', '');
41
- if (token) {
42
- await this.authService.logout(token);
43
- }
44
- return res.json({ message: 'Logged out successfully' });
45
- }
46
-
47
- @Get('/me')
48
- @AuthGuard()
49
- async getCurrentUser(req: Request, res: Response) {
50
- return res.json({ user: (req as any).user });
51
- }
52
- }
@@ -1,27 +0,0 @@
1
-
2
- import { Request, Response, NextFunction } from 'express';
3
- import { DIContainer } from '../core/container/di-container';
4
- import { AuthService } from './auth.service';
5
-
6
- export async function authMiddleware(req: Request, res: Response, next: NextFunction) {
7
- const authHeader = req.headers.authorization;
8
-
9
- if (!authHeader || !authHeader.startsWith('Bearer ')) {
10
- return res.status(401).json({ error: 'Unauthorized' });
11
- }
12
-
13
- const token = authHeader.replace('Bearer ', '');
14
- const authService = DIContainer.resolve<AuthService>(AuthService);
15
-
16
- try {
17
- const user = await authService.validateToken(token);
18
- if (!user) {
19
- return res.status(401).json({ error: 'Invalid token' });
20
- }
21
-
22
- (req as any).user = user;
23
- next();
24
- } catch (error) {
25
- return res.status(401).json({ error: 'Unauthorized' });
26
- }
27
- }