import { Hono } from 'hono'; import { config } from './config.ts'; import { createDb } from './db/index.ts'; import type { Db } from './db/index.ts'; import { errorHandler } from './middleware/error.ts'; import { requestLogger } from './middleware/logging.ts'; import healthRouter from './routes/health.ts'; import { createTicketsRouter } from './routes/tickets.ts'; import { createQueuesRouter } from './routes/queues.ts'; import { createScripsRouter } from './routes/scrips.ts'; import { createCustomFieldsRouter } from './routes/custom-fields.ts'; import { createLifecyclesRouter } from './routes/lifecycles.ts'; import { createUsersRouter } from './routes/users.ts'; import { createTemplatesRouter } from './routes/templates.ts'; import { createViewsRouter } from './routes/views.ts'; import { createDashboardsRouter } from './routes/dashboards.ts'; import { createTeamsRouter } from './routes/teams.ts'; let db: Db | null = null; function getDb(): Db { if (!db) { db = createDb(config.DATABASE_URL); } return db; } const app = new Hono(); app.use('*', requestLogger); app.onError(errorHandler); app.route('/health', healthRouter); app.route('/tickets', createTicketsRouter(getDb())); app.route('/queues', createQueuesRouter(getDb())); app.route('/scrips', createScripsRouter(getDb())); app.route('/custom-fields', createCustomFieldsRouter(getDb())); app.route('/lifecycles', createLifecyclesRouter(getDb())); app.route('/users', createUsersRouter(getDb())); app.route('/templates', createTemplatesRouter(getDb())); app.route('/views', createViewsRouter(getDb())); app.route('/dashboards', createDashboardsRouter(getDb())); app.route('/teams', createTeamsRouter(getDb())); export default app; export { app }; // Start server when run directly if (Bun.main === import.meta.path) { Bun.serve({ fetch: app.fetch, port: config.SERVER_PORT, hostname: config.SERVER_HOST, development: false, }); console.log(`Server running at http://${config.SERVER_HOST}:${config.SERVER_PORT}`); }