From acf09a87032786d2df66f7f9fc1c1b6cfe25b5e3 Mon Sep 17 00:00:00 2001 From: Aharshi3614 Date: Wed, 24 Jun 2026 07:27:28 +0530 Subject: [PATCH 1/2] feat: add gzip compression to reduce response payload size --- backend/package-lock.json | 64 +++++++++++++++++++++++++++++++++++++++ backend/package.json | 1 + backend/server.js | 2 ++ 3 files changed, 67 insertions(+) diff --git a/backend/package-lock.json b/backend/package-lock.json index 1760810..b06cdd8 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "axios": "^1.13.6", "bcryptjs": "^3.0.3", + "compression": "^1.8.1", "cors": "^2.8.6", "dns": "^0.2.2", "dotenv": "^17.3.1", @@ -478,6 +479,60 @@ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==" }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", @@ -2162,6 +2217,15 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", diff --git a/backend/package.json b/backend/package.json index e4fedef..3d94c2c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -13,6 +13,7 @@ "dependencies": { "axios": "^1.13.6", "bcryptjs": "^3.0.3", + "compression": "^1.8.1", "cors": "^2.8.6", "dns": "^0.2.2", "dotenv": "^17.3.1", diff --git a/backend/server.js b/backend/server.js index 73a8b05..55ac98f 100644 --- a/backend/server.js +++ b/backend/server.js @@ -5,6 +5,7 @@ const express = require("express"); const seedAdminUser = require("./seeders/adminSeeder"); const { getHealthStatus } = require('./utils/healthCheck'); const cors = require("cors"); +const compression = require('compression'); const { v4: uuidv4 } = require('uuid'); const axios = require("axios"); const mongoose = require("mongoose"); @@ -50,6 +51,7 @@ const connectWithRetry = async (retries=5, delay=5000) => { connectWithRetry(); app.use(cors()); +app.use(compression()); app.use(express.json()); // ===== REQUEST ID MIDDLEWARE ===== From d70a17574bc9ec4d79d1652bf1a5f4af66a7559d Mon Sep 17 00:00:00 2001 From: Aharshi3614 Date: Wed, 24 Jun 2026 07:42:16 +0530 Subject: [PATCH 2/2] feat: add database query logging for performance monitoring --- backend/server.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/backend/server.js b/backend/server.js index 55ac98f..7a07f6a 100644 --- a/backend/server.js +++ b/backend/server.js @@ -47,6 +47,27 @@ const connectWithRetry = async (retries=5, delay=5000) => { } }; +if(process.env.NODE_ENV === 'development'){ + //Log all queries in development mode + mongoose.set('debug',true); +} else { + // Log only slow queries in production mode + const originalExec = mongoose.Query.prototype.exec; + mongoose.Query.prototype.exec = async function() { + const start = Date.now(); + const result = await originalExec.apply(this, arguments); + const duration = Date.now() - start; + + if(duration > 100){ // Log queries taking longer than 100ms + console.log(`🐢 [${new Date().toISOString()}] Slow Query (${duration}ms):`); + console.log(` Collection: ${this._collection.collectionName}`); + console.log(` Query:`, JSON.stringify(this._conditions)); + } + + return result; + }; +} + // Start connection with retry connectWithRetry();