78 lines
2.4 KiB
JavaScript
78 lines
2.4 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";
|
|
|
|
import registerListingsApi from "./routes/listings.route.js";
|
|
import CommonApiBuilder from "./core/builders/CommonApiBuilder.js";
|
|
// import JwtAuthMiddleware from "./core/middleware/JwtAuthMiddleware.js";
|
|
// import RateLimiterMiddleware from "./core/middleware/RateLimiterMiddleware.js";
|
|
|
|
import dbClient from "./core/db/client.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;
|
|
|
|
|
|
const common = new CommonApiBuilder(app)
|
|
// .use(new JwtAuthMiddleware())
|
|
// .use(new RateLimiterMiddleware(rateLimiterRead))
|
|
// .use(new CoarseAuthMiddleware(['USER', 'ADMIN']))
|
|
.build();
|
|
|
|
// register ALL listing APIs
|
|
registerListingsApi("/listings", common, dbClient);
|
|
|
|
// Add routes here
|
|
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}`);
|
|
});
|