100 lines
2.2 KiB
JavaScript
100 lines
2.2 KiB
JavaScript
/**
|
|
* 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;
|