/** * Copyright (c) 2026 Niolla * All rights reserved. * * This source code is proprietary and confidential. * Unauthorized copying, modification, distribution, or use * of this file, via any medium, is strictly prohibited. */ // app.js const express = require("express"); const cors = require("cors"); const morgan = require("morgan"); const routes = require("./app/routes"); const cookieParser = require("cookie-parser"); const { bullBoardRouter } = require("./app/config/bullBoard.config"); const path = require("path"); const startAllCrons = require("./cron"); const db = require("./app/models"); // Test DB connection and sync models (async () => { try { await db.sequelize.authenticate(); console.log("Database connected."); await db.sequelize.sync(); console.log("Tables synced."); // Start all cron jobs startAllCrons(); } catch (error) { console.error("DB error:", error); } })(); const app = express(); app.use(cookieParser()); // CORS configuration const corsOptions = { origin: process.env.FRONTEND_URL || "https://oceanic-demo.vercel.app", methods: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"], allowedHeaders: ["Content-Type", "Authorization"], credentials: true, }; app.use(cors(corsOptions)); app.options(/.*/, cors(corsOptions)); app.use(express.json()); app.use(morgan("dev")); app.get("/health", (req, res) => { let dbStatus = "N/A"; let emailStatus = "N/A"; let redisStatus = "N/A"; db.sequelize .authenticate() .then(() => { console.log("DB connection successful."); dbStatus = "OK"; }) .catch((err) => { console.error("DB connection error:", err); res.status(500).send("Internal Server Error"); }); emailStatus = "OK"; redisStatus = "OK"; res.send({ status: "Online ✅", database: dbStatus, emailService: emailStatus, redis: redisStatus, }); }); app.use("/api", routes); app.use( "/Documentation", (req, res, next) => { if (req.path.endsWith(".md")) { return res.status(403).send("Forbidden"); } next(); }, express.static(path.join(__dirname, "Documentation")), ); app.use("/admin/queues", bullBoardRouter); module.exports = app;