From 1907be7c6ffbd2390517d7e2b4d89d3244db1644 Mon Sep 17 00:00:00 2001 From: Mekan1206 Date: Thu, 4 Jun 2026 19:34:06 +0500 Subject: [PATCH] Add dotenv support and bulk SMS endpoint - Integrated dotenv for environment variable management. - Updated queueWorker to use WORKER_INTERVAL from .env or default to 5 seconds. - Added a new bulk SMS endpoint to queue multiple messages in a single request, with validation and transaction handling. - Updated package.json and package-lock.json to include dotenv dependency. --- .env | 1 + package-lock.json | 13 +++++++++++++ package.json | 1 + queueWorker.js | 2 +- routes/api.js | 42 ++++++++++++++++++++++++++++++++++++++++++ server.js | 1 + 6 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..609449c --- /dev/null +++ b/.env @@ -0,0 +1 @@ +WORKER_INTERVAL=5000 diff --git a/package-lock.json b/package-lock.json index 0d2b669..8451cfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "dotenv": "^17.4.2", "express": "^4.18.2", "socket.io": "^4.7.4", "sqlite3": "^6.0.1" @@ -328,6 +329,18 @@ "node": ">=8" } }, + "node_modules/dotenv": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", diff --git a/package.json b/package.json index d871cd8..de15e63 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "author": "", "license": "ISC", "dependencies": { + "dotenv": "^17.4.2", "express": "^4.18.2", "socket.io": "^4.7.4", "sqlite3": "^6.0.1" diff --git a/queueWorker.js b/queueWorker.js index 4e6c1fa..0c48378 100644 --- a/queueWorker.js +++ b/queueWorker.js @@ -45,7 +45,7 @@ function startQueueWorker(io) { }); } }); - }, 5000); // Check every 5 seconds + }, parseInt(process.env.WORKER_INTERVAL) || 5000); // Check based on interval from .env or default to 5 seconds } module.exports = startQueueWorker; diff --git a/routes/api.js b/routes/api.js index 4c7c122..f8d345f 100644 --- a/routes/api.js +++ b/routes/api.js @@ -44,6 +44,48 @@ module.exports = function (io) { }); }); + // Bulk endpoint to queue multiple SMS + router.post('/sms/bulk', (req, res) => { + const { messages } = req.body; + + if (!Array.isArray(messages) || messages.length === 0) { + return res.status(400).json({ error: 'messages array is required and cannot be empty.' }); + } + + // Validate all messages first + for (const msg of messages) { + if (!msg.phone || !msg.message) { + return res.status(400).json({ error: 'Each message must have a phone and message.' }); + } + } + + db.serialize(() => { + db.run("BEGIN TRANSACTION"); + const stmt = db.prepare("INSERT INTO sms_queue (phone, message) VALUES (?, ?)"); + + for (const msg of messages) { + stmt.run([msg.phone, msg.message], function(err) { + if (err) { + console.error('Error inserting into sms_queue during bulk operation:', err); + } + }); + } + + stmt.finalize(); + + db.run("COMMIT", (err) => { + if (err) { + console.error('Error committing bulk SMS transaction:', err); + return res.status(500).json({ error: 'Failed to queue bulk SMS.' }); + } + + return res.status(202).json({ + message: `Successfully queued ${messages.length} SMS messages.` + }); + }); + }); + }); + return router; }; diff --git a/server.js b/server.js index 097410a..7b38e2e 100644 --- a/server.js +++ b/server.js @@ -1,3 +1,4 @@ +require('dotenv').config(); const express = require('express'); const http = require('http'); const socketIo = require('socket.io');