Server.factory.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import express from "express";
  2. import cors from "cors";
  3. import helmet from "helmet";
  4. import morgan from "morgan";
  5. import { config } from "../config/index.js";
  6. import { port } from "../config/server.js";
  7. import { db } from "../config/db.config.js";
  8. import { qdrant } from "../services/qdrantClient.js";
  9. import { errorHandler } from "../middleware/ErrorHandler.js";
  10. import { Roteamento } from "../routes/index.js";
  11. import { scheduleCleanup } from "../jobs/cleanupTokens.js";
  12. export class ServerFactory {
  13. static Iniciar() {
  14. const app = express();
  15. app.disable("x-powered-by");
  16. app.use(helmet());
  17. app.use(
  18. cors({
  19. origin: config.corsOrigin,
  20. credentials: true
  21. })
  22. );
  23. app.use(express.json({ limit: "10mb" }));
  24. app.use(morgan("dev"));
  25. app.get("/health", async (_req, res) => {
  26. const checks = { api: true, db: false, qdrant: false, ollama: false };
  27. try {
  28. await db.raw("SELECT 1");
  29. checks.db = true;
  30. } catch {}
  31. try {
  32. await qdrant.getCollections();
  33. checks.qdrant = true;
  34. } catch {}
  35. try {
  36. const r = await fetch(`${config.ollama.url}/api/tags`, { signal: AbortSignal.timeout(3000) });
  37. checks.ollama = r.ok;
  38. } catch {}
  39. const ok = Object.values(checks).every(Boolean);
  40. res.status(ok ? 200 : 503).json({ ok, checks });
  41. });
  42. Roteamento.IniciarRoteamento(app);
  43. app.use(errorHandler);
  44. const server = app.listen(port, () => {
  45. process.stdout.write(`API listening on http://localhost:${port}\n`);
  46. scheduleCleanup();
  47. });
  48. this.app = app;
  49. return server;
  50. }
  51. }
  52. export default ServerFactory;