devperf/backend/src/index.ts
zyc b8ecaf44d0
Some checks failed
Build and Deploy / build-and-deploy (push) Has been cancelled
fix: add production domain to CORS whitelist
2026-04-13 18:52:54 +08:00

75 lines
2.1 KiB
TypeScript

import { Hono } from 'hono';
import { cors } from 'hono/cors';
import { config } from './config';
import { requestLogger } from './middleware/logger';
import { errorHandler } from './middleware/error-handler';
import { authMiddleware } from './middleware/auth';
import { authRoutes } from './routes/auth';
import { overviewRoutes } from './routes/overview';
import { projectRoutes } from './routes/projects';
import { memberRoutes } from './routes/members';
import { okrRoutes } from './routes/okr';
import { gitRoutes } from './routes/git';
import { adminRoutes } from './routes/admin';
// Importing db triggers auto-migration on first load (B-07 fix)
import { db } from './db/index';
import { seedAdminUser } from './db/seed-auto';
import { startScheduler } from './sync/scheduler';
const app = new Hono();
// Global middleware
app.use('*', cors({
origin: ['http://localhost:5173', 'http://localhost:3201', 'https://devperf.airlabs.art'],
allowMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
allowHeaders: ['Content-Type', 'Authorization'],
}));
app.use('*', requestLogger);
// Health check (public)
app.get('/api/health', (c) => {
const startTime = process.uptime();
return c.json({
code: 0,
data: {
status: 'ok',
version: '1.0.0',
uptime: Math.floor(startTime),
dbConnected: true,
},
message: 'success',
});
});
// Auth routes (public)
app.route('/api/auth', authRoutes);
// Protected routes
app.use('/api/*', authMiddleware);
app.route('/api', overviewRoutes);
app.route('/api', projectRoutes);
app.route('/api', memberRoutes);
app.route('/api', okrRoutes);
app.route('/api', gitRoutes);
app.route('/api', adminRoutes);
// Error handler
app.onError(errorHandler);
// Auto-seed admin user on startup (safe to call repeatedly)
seedAdminUser().catch((err) => {
console.error('[Seed] Failed to seed admin user:', err);
});
// 启动自动同步(每天凌晨 2 点 + 启动时首次同步)
startScheduler();
// Start server
const port = config.PORT;
console.info(`DevPerf Dashboard API starting on port ${port}`);
export default {
port,
fetch: app.fetch,
};