import { Hono } from 'hono'; import type { BackendEnv } from '@/http/env'; import { internalServerErrorProblem, notFoundProblem, problemJson, } from '@/http/problem-details'; import { requestIdMiddleware } from '@/http/request-id'; import { requestLoggerMiddleware } from '@/http/request-logger'; import { corsMiddleware, securityHeadersMiddleware } from '@/http/security-headers'; import { sessionAuthMiddleware } from '@/http/session-auth'; import { logger } from '@/logger'; import { authRoutes } from './modules/auth'; import { groupsRoutes } from './modules/groups'; import { healthCheckRoutes } from './modules/health-check'; import { paymentsRoutes } from './modules/payments'; import { studentsRoutes } from './modules/students'; import { waitlistRoutes } from './modules/waitlist'; const app = new Hono(); app.use('*', corsMiddleware); app.use('*', securityHeadersMiddleware); app.use('*', requestIdMiddleware); app.use('*', requestLoggerMiddleware); app.get('/', (c) => c.json({ name: 'Gruperly API', status: 'ok' })); const api = app.basePath('/api/v1'); api.use('*', sessionAuthMiddleware); api.route('/auth', authRoutes); api.route('/health', healthCheckRoutes); api.route('/groups', groupsRoutes); api.route('/students', studentsRoutes); api.route('/payments', paymentsRoutes); api.route('/waitlist', waitlistRoutes); app.notFound((c) => { return problemJson(c, notFoundProblem(c.req.path)); }); app.onError((error, c) => { logger.error({ error, path: c.req.path }, 'Unhandled request error'); return problemJson(c, internalServerErrorProblem(c.req.path)); }); export default app;