require('dotenv').config({ path: './config/.env' }) const express = require('express') const databaseConnection = require('./setup/databaseConnection.js') const routerEndpoints = require('./setup/routerEndpoints.js') const globalErrorHandler = require('./globalErrorHandler/globalErrorHandler.js') const bodyParser = require('body-parser') const cookieParser = require('cookie-parser') const compression = require('compression') const cors = require('cors') const app = express() const allowedOrigins = ['http://localhost:3000', 'http://localhost:5173', 'https://bm-vue.chbk.app', 'https://mbmanager.ir'] app.use( cors({ origin: allowedOrigins, credentials: true, optionsSuccessStatus: 200, // For legacy browser support }) ) app.use(compression()) app.use(bodyParser.urlencoded({ extended: true })) app.use(bodyParser.text()) app.use(cookieParser()) app.use(express.json()) app.set('view engine', 'ejs') app.use(express.static('views/public')) // Health check endpoint app.get(['/health', '/healthz', '/api/health'], (req, res) => { const mongoose = require('mongoose') const isDbConnected = mongoose.connection.readyState === 1 res.status(isDbConnected ? 200 : 503).json({ status: isDbConnected ? 'healthy' : 'unhealthy', uptime: process.uptime(), timestamp: new Date().toISOString(), service: 'belonging-manager-api', database: isDbConnected ? 'connected' : 'disconnected', }) }) app.use('/api', routerEndpoints) const { registerEventHandlers } = require('./events/index') registerEventHandlers() databaseConnection(app) app.use(globalErrorHandler) module.exports = app