api-v1/server.js

62 lines
1.8 KiB
JavaScript

import express from "express";
import cors from "cors";
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
import http from "http";
import dotenv from "dotenv";
import listingRoutes from "./routes/listingRoutes.js";
import locationRoutes from "./routes/locationRoutes.js";
import chatRoutes from "./routes/chatRoutes.js";
import userRoutes from "./routes/userRoutes.js";
import { initSocket } from "./socket.js";
import { startExpirationJob } from "./jobs/expirationJob.js";
// Import middleware (in correct order)
import requestContext from "./middleware/requestContext.js";
import { auditLoggerMiddleware } from "./services/auditLogger.js";
// Load environment variables
dotenv.config();
const app = express();
// Trust proxy for correct IP addresses (important for rate limiting)
if (process.env.TRUST_PROXY === 'true' || process.env.TRUST_PROXY === '1') {
app.set('trust proxy', true);
}
app.use(cors());
app.use(express.json());
// =====================================================
// MIDDLEWARE CHAIN (IMPORTANT ORDER)
// =====================================================
// 1. Request Context (FIRST - extracts IP, user agent, etc.)
app.use(requestContext);
// 2. Audit Logger (attach logger to request)
app.use(auditLoggerMiddleware);
// Serve static files from public directory
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
app.use(express.static(join(__dirname, 'public')));
const PORT = process.env.PORT || 3200;
// Add routes here
app.use("/listings", listingRoutes);
app.use("/locations", locationRoutes);
app.use("/chat", chatRoutes);
app.use("/users", userRoutes);
const server = http.createServer(app);
initSocket(server);
// Start Background Jobs
startExpirationJob();
server.listen(PORT, () => {
console.log(`BuySellService is running on port ${PORT}`);
});