const express = require('express'); const mongoose = require('mongoose'); const cors = require('cors'); const config = require('./config'); const setupContainer = require('./di/container'); const errorHandler = require('./middleware/errorHandler'); const mockAuthMiddleware = require('./middleware/auth.mock'); const { seedDatabase } = require('./seed'); const legacyApiRoutes = require('./routes/api'); const app = express(); app.use(cors()); app.use(express.json()); const container = setupContainer(); const sequelize = container.resolve('sequelize'); mongoose .connect(config.database.mongo.uri, config.database.mongo.options) .then(() => console.log('Connected to MongoDB')) .catch((err) => { console.error('MongoDB connection error:', err); process.exit(1); }); app.use('/api', mockAuthMiddleware(sequelize)); app.use('/api/legacy', legacyApiRoutes(sequelize)); const v1Routes = require('./routes/v1'); app.use('/api/v1', v1Routes(container)); app.use('/api', v1Routes(container)); const healthRoutes = require('./routes/health.routes'); app.use('/', healthRoutes({ sequelize, mongoose })); app.use(errorHandler); sequelize .authenticate() .then(() => { console.log('Connected to PostgreSQL'); return sequelize.sync({ force: true }); }) .then(() => { console.log('PostgreSQL models synchronized'); return seedDatabase(sequelize); }) .then(() => { app.listen(config.port, () => { console.log(`Server is running on http://localhost:${config.port}`); console.log(`Environment: ${config.nodeEnv}`); console.log(`API v1 endpoints available at /api/v1/`); console.log(`Legacy endpoints available at /api/legacy/`); console.log(`Health check available at /health`); }); }) .catch((err) => { console.error('PostgreSQL connection or sync error:', err); process.exit(1); });