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 keycloakAuthMiddleware = require('./middleware/auth.keycloak'); 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', keycloakAuthMiddleware(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({ alter: true }); }) .then(() => { console.log('PostgreSQL models synchronized'); }) .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); });