From 07edb98a051835d1313faa118c1a96e3357063a1 Mon Sep 17 00:00:00 2001 From: Kavehhn174 Date: Wed, 12 Aug 2026 05:26:00 +0330 Subject: [PATCH] feat: enhance health check endpoint with database status check --- app.js | 22 +++++++++++++++++++--- src/index.js | 24 ++++++++++++++++++++---- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/app.js b/app.js index e1a3607..4d21af9 100644 --- a/app.js +++ b/app.js @@ -5,6 +5,7 @@ const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const rateLimit = require('express-rate-limit'); +const mongoose = require('mongoose'); const config = require('./config/config'); const connectDB = require('./config/db'); @@ -53,10 +54,25 @@ app.use('/api', limiter); // ── Routes ──────────────────────────────────────────────────────────────────── app.get('/api/health', (req, res) => { - res.json({ - status: 'ok', - message: 'Gameno API is running', + const dbStates = { + 0: 'disconnected', + 1: 'connected', + 2: 'connecting', + 3: 'disconnecting', + 99: 'uninitialized' + }; + + const dbStateCode = mongoose.connection.readyState; + const dbStatus = dbStates[dbStateCode] || 'unknown'; + const isHealthy = dbStateCode === 1; + + res.status(isHealthy ? 200 : 503).json({ + status: isHealthy ? 'healthy' : 'unhealthy', timestamp: new Date().toISOString(), + uptime: process.uptime(), + services: { + database: dbStatus + }, environment: config.NODE_ENV }); }); diff --git a/src/index.js b/src/index.js index d5fb567..1df4656 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,7 @@ import express from 'express'; import cors from 'cors'; import dotenv from 'dotenv'; +import mongoose from 'mongoose'; dotenv.config(); @@ -11,10 +12,25 @@ app.use(cors()); app.use(express.json()); app.get('/api/health', (req, res) => { - res.json({ - status: 'ok', - message: 'Gameno API is running', - timestamp: new Date().toISOString() + const dbStates = { + 0: 'disconnected', + 1: 'connected', + 2: 'connecting', + 3: 'disconnecting', + 99: 'uninitialized' + }; + + const dbStateCode = mongoose.connection.readyState; + const dbStatus = dbStates[dbStateCode] || 'unknown'; + const isHealthy = dbStateCode === 1; + + res.status(isHealthy ? 200 : 503).json({ + status: isHealthy ? 'healthy' : 'unhealthy', + timestamp: new Date().toISOString(), + uptime: process.uptime(), + services: { + database: dbStatus + } }); });