Files
Final-Year-Project/Backend/index.ts

66 lines
1.8 KiB
TypeScript

import express from 'express';
import { createServer } from 'http';
import { toNodeHandler } from 'better-auth/node';
import swaggerUi from 'swagger-ui-express';
import { auth } from './auth';
import { buildOpenApiDocument } from './docs/openapi';
import videosRoutes from './routes/videos';
import adminRoutes from './routes/admin';
import devicesRoutes from './routes/devices';
import deviceLinksRoutes from './routes/device-links';
import commandsRoutes from './routes/commands';
import eventsRoutes from './routes/events';
import streamsRoutes from './routes/streams';
import { setupRealtimeGateway } from './realtime/gateway';
import { ensureMinioBucket } from './utils/minio';
const app = express();
const openApiDocument = buildOpenApiDocument();
app.get('/', (_req, res) => {
res.send('API is running');
});
app.get('/openapi.json', (_req, res) => {
res.json(openApiDocument);
});
app.use('/docs', swaggerUi.serve, swaggerUi.setup(openApiDocument));
app.all('/api/auth/*splat', toNodeHandler(auth));
app.use(express.json());
app.use('/videos', videosRoutes);
app.use('/admin', adminRoutes);
app.use('/devices', devicesRoutes);
app.use('/device-links', deviceLinksRoutes);
app.use('/commands', commandsRoutes);
app.use('/events', eventsRoutes);
app.use('/streams', streamsRoutes);
app.use((err: unknown, _req: express.Request, res: express.Response, _next: express.NextFunction) => {
console.error(err);
res.status(500).json({ message: 'Internal server error' });
});
const port = Number(process.env.PORT ?? 3000);
const server = createServer(app);
const start = async () => {
try {
await ensureMinioBucket();
} catch (error) {
console.error('MinIO initialization failed', error);
process.exit(1);
}
setupRealtimeGateway(server);
server.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
};
start();