import express from 'express'; import cookieParser from 'cookie-parser'; import dotenv from 'dotenv'; dotenv.config(); import databaseClient from './infrastructure/database/prisma.js'; import redisClient from './infrastructure/database/redis.js'; import authRoutes from './api/routes/authRoutes.js'; import blogRoutes from './api/routes/blogRoutes.js'; import { errorHandler, notFoundHandler } from './api/middlewares/errorHandler.js'; const app = express(); const PORT = process.env.PORT || 3001; // Middleware app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(cookieParser(process.env.COOKIE_SECRET)); // Database connection await databaseClient.connect(); // Health check app.get('/health', (req, res) => { res.json({ status: 'OK', timestamp: new Date().toISOString(), environment: process.env.NODE_ENV }); }); // Routes app.use('/api/auth', authRoutes); app.use('/api/blogs', blogRoutes); // Error handling app.use(notFoundHandler); app.use(errorHandler); // Graceful shutdown process.on('SIGINT', async () => { console.log('\nšŸ›‘ Shutting down gracefully...'); await databaseClient.disconnect(); await redisClient.disconnect(); process.exit(0); }); process.on('SIGTERM', async () => { console.log('\nšŸ›‘ Shutting down gracefully...'); await databaseClient.disconnect(); await redisClient.disconnect(); process.exit(0); }); // Start server app.listen(PORT, () => { console.log(`āœ… Server running on http://localhost:${PORT}`); console.log(`šŸ“Š Environment: ${process.env.NODE_ENV}`); });