Initializes DB, creates default admin user, connects brokers/PG sources, starts query timers, and serves frontend/dist as SPA. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
import express from 'express';
|
|
import cors from 'cors';
|
|
import path from 'path';
|
|
import authRouter from './routes/auth';
|
|
import displayApiRouter from './routes/display-api';
|
|
import mqttBrokersRouter from './routes/mqtt-brokers';
|
|
import mqttTopicsRouter from './routes/mqtt-topics';
|
|
import pgSourcesRouter from './routes/pg-sources';
|
|
import datapointsRouter from './routes/datapoints';
|
|
import displaysRouter from './routes/displays';
|
|
import layoutsRouter from './routes/layouts';
|
|
import { authMiddleware } from './middleware/auth';
|
|
|
|
export function createApp(): express.Application {
|
|
const app = express();
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// Health check
|
|
app.get('/health', (_req, res) => {
|
|
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
});
|
|
|
|
// Public routes
|
|
app.use('/api/auth', authRouter);
|
|
app.use('/api/display', displayApiRouter);
|
|
|
|
// Protected management routes
|
|
app.use('/api/mqtt/brokers/:brokerId/topics', authMiddleware, mqttTopicsRouter);
|
|
app.use('/api/mqtt/brokers', authMiddleware, mqttBrokersRouter);
|
|
app.use('/api/pg/sources', authMiddleware, pgSourcesRouter);
|
|
app.use('/api/datapoints', authMiddleware, datapointsRouter);
|
|
app.use('/api/displays', authMiddleware, displaysRouter);
|
|
app.use('/api/layouts', authMiddleware, layoutsRouter);
|
|
|
|
// Serve frontend/dist as static files with SPA fallback
|
|
const frontendDist = path.join(__dirname, '..', '..', '..', 'frontend', 'dist');
|
|
app.use(express.static(frontendDist));
|
|
app.get('*', (_req, res) => {
|
|
res.sendFile(path.join(frontendDist, 'index.html'));
|
|
});
|
|
|
|
return app;
|
|
}
|