const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const morgan = require('morgan'); require('dotenv').config(); // Import routes const symbolRoutes = require('./routes/symbols'); const candleRoutes = require('./routes/candles'); const livePriceRoutes = require('./routes/livePrices'); // Import middleware const errorHandler = require('./middleware/errorHandler'); // Import utilities const logger = require('./utils/logger'); const app = express(); // Security middleware app.use(helmet()); // CORS configuration app.use(cors({ origin: process.env.CORS_ORIGIN || '*', credentials: true })); // Body parsing middleware app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); // Logging middleware if (process.env.NODE_ENV === 'development') { app.use(morgan('combined')); } else { app.use(morgan('combined', { stream: { write: (message) => logger.http(message.trim()) } })); } // Health check endpoint app.get('/health', (req, res) => { res.json({ success: true, message: 'Market Data Service is running', timestamp: new Date().toISOString(), environment: process.env.NODE_ENV }); }); // API routes app.use('/api/symbols', symbolRoutes); app.use('/api/candles', candleRoutes); app.use('/api/live-prices', livePriceRoutes); // 404 handler app.use((req, res) => { res.status(404).json({ success: false, message: 'Route not found' }); }); // Error handling middleware (must be last) app.use(errorHandler); module.exports = app;