Files
zeavis-edu/apps/api/src/index.ts
T

54 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-05-22 12:25:41 +00:00
import { Elysia } from 'elysia';
2026-05-22 17:32:57 +00:00
import cors from '@elysiajs/cors';
2026-05-22 15:53:48 +00:00
import { env, assertRequiredEnv } from './config/env';
2026-05-22 12:25:41 +00:00
import { healthRoutes } from './routes/health';
import { statusRoutes } from './routes/status';
import { diseaseRoutes } from './routes/diseases';
import { classificationRoutes } from './routes/classifications';
2026-05-22 16:08:18 +00:00
import { diagnosisRoutes } from './routes/diagnoses';
import { dashboardRoutes } from './routes/dashboard';
2026-05-22 15:53:48 +00:00
import { authRoutes } from './routes/auth';
2026-05-22 16:23:40 +00:00
import { expertRoutes } from './routes/expert';
import { metricsRoutes } from './routes/metrics';
import { httpRequestCounter, httpRequestDuration, httpRequestsActive } from './lib/telemetry';
import './types';
2026-05-22 15:53:48 +00:00
assertRequiredEnv();
2026-05-22 12:25:41 +00:00
const app = new Elysia()
2026-05-22 17:32:57 +00:00
.use(cors({
origin: env.allowedOrigins,
2026-05-22 17:32:57 +00:00
credentials: true,
}))
.use(metricsRoutes)
.onBeforeHandle(({ request, path }) => {
httpRequestsActive.inc();
request.metricsStart = performance.now();
request.metricsPath = path;
})
.onAfterHandle(({ request, set }) => {
const start = (request as any).metricsStart as number | undefined;
const path = (request as any).metricsPath as string | undefined;
if (start && path) {
const duration = (performance.now() - start) / 1000;
const method = request.method;
const status = set.status ?? 200;
httpRequestCounter.labels(method, path, String(status)).inc();
httpRequestDuration.labels(method, path).observe(duration);
}
httpRequestsActive.dec();
})
.use(healthRoutes)
.use(statusRoutes)
2026-05-22 15:53:48 +00:00
.use(authRoutes)
.use(diseaseRoutes)
.use(classificationRoutes)
2026-05-22 16:08:18 +00:00
.use(diagnosisRoutes)
2026-05-22 16:23:40 +00:00
.use(expertRoutes)
.use(dashboardRoutes)
.listen(env.port);
2026-05-22 12:25:41 +00:00
console.log(`ZeaVis Edu API running at http://${app.server?.hostname}:${app.server?.port}`);
export type App = typeof app;