const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const rateLimit = require('express-rate-limit'); const swaggerUi = require('swagger-ui-express'); const swaggerDocument = require('./docs/swagger.json'); const routes = require('./routes'); const errorHandler = require('./middleware/errorHandler'); const logger = require('./utils/logger'); const morganMiddleware = require('./middleware/morganMiddleware'); const app = express(); app.use(helmet()); app.use(cors({ origin: process.env.ALLOWED_ORIGINS.split(','), credentials: true })); const limiter = rateLimit({ windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS), max: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS) }); app.use(limiter); app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true })); app.use(morganMiddleware); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); app.use('/api/v1', routes); app.get('/health', (req, res) => { res.json({ status: 'healthy', timestamp: new Date().toISOString(), environment: process.env.NODE_ENV }); }); app.use(errorHandler); module.exports = app;