PK!A7��nconst userModel = require("../models/user"); const apimessage = require("../models/apiMessage"); const senderIdModel = require("../models/senderId"); const accountCreditsModel = require("../models/accountCredits"); const messageIdGen = require("../library/messageIdGenerate"); const reqLib = require("../library/request"); const reports = require("../models/reports"); const http = require("http"); const https = require("https"); const dotenv = require("dotenv"); const jwt = require("jsonwebtoken"); const readXlsxFile = require("read-excel-file/node"); const excelJS = require("exceljs"); const fsPromises = require("fs").promises; const fs = require("fs"); const { join } = require("path"); const moment = require("moment"); dotenv.config(); const config = process.env; var multer = require("multer"); var forms = multer(); var randomstring = require("randomstring"); const { promisify } = require("util"); const util = require("util"); const mv = promisify(fs.rename); var pdf = require("pdf-creator-node"); const common = require("../helper/common"); const quickMessageReport = require("../models/quickMessageReport"); const opts = { errorEventName: "error", logDirectory: "logs", fileNamePattern: "log-.log", dateFormat: "YYYY-MM-DD", }; const log = require("simple-node-logger").createRollingFileLogger(opts); async function runApiMessage(req, res) { try { let userId = req.headers["id"]; let { type, recipients, message, sender_Id } = req.body; log.info( `[API MESSAGES], [runQuickmessage], User Id [${userId}], Type [${type}], Recipients [${recipients}], Sender Id [${sender_Id}], Message [${message}]` ); if (!type || !recipients || !message || !sender_Id) { log.info(`[API MESSAGES], [runQuickmessage], [Missing parameters]`); return res.status(400).json({ msg: "Missing parameters" }); } let contactArr = recipients?.split(","); const oldContactLength = contactArr.length; contactArr = Array.from(new Set(contactArr)); const newContactLength = contactArr.length; if (oldContactLength > newContactLength) { log.info(`[API MESSAGES], [runQuickmessage], [${oldContactLength - newContactLength} Duplicate Entries]`); } let balanceConsumed = 0; if (contactArr) { balanceConsumed = contactArr?.filter((mobile) => mobile.length >= 9).length; } //>= 9 // let contactLength = contactArr?.length; // let mobileLength = mobile?.length; // log.info(`number [${mobileLength}]`) // balanceConsumed = contactArr?.length; //checking message length let isLengthExceeds = message?.length / 160; if (isLengthExceeds > 1) { balanceConsumed = balanceConsumed * Math.ceil(isLengthExceeds); log.info( `[API MESSAGES], [runQuickmessage], Message Length Exceeds [${message?.length}], Contact Length [${contactLength}], Mobile [${JSON.stringify(contactArr)}] Balance Consumed [${balanceConsumed}]` ); } //checking account balance const accountBal = await accountCreditsModel.checkAccountBal(userId); const isSufficientBal = common.checkingBalance( "API MESSAGES", "SMS", accountBal, balanceConsumed, ); if (!accountBal || !isSufficientBal) { return res .status(400) .json({ msg: "Insufficient balance to send quick message" }); } const senderIdDetails = await senderIdModel.getSenderIdById(sender_Id); if (false == senderIdDetails) { log.info(`[API MESSAGES], [runQuickmessage], Sender Id not found`); return res.status(200).json({ msg: "No sender Id found" }); } contactArr.map(async (contact) => { if (contact?.length < 9) { // reject const mobile = process.env.COUNTRY_CODE + contact; log.info(`[API MESSAGES], [runQuickmessage], MObile [${mobile}] Number is not Correct`); await apimessage.addquickmessage( userId, sender_Id, mobile, 3,//status message, 1,//type ); } else { const mobile = process.env.COUNTRY_CODE + contact.slice(-9); log.info(`[API MESSAGES], [runQuickmessage], MObile [${mobile}]`); await apimessage.addquickmessage( userId, sender_Id, mobile, 1, message, 1, ); await accountCreditsModel.deductBalance( userId, accountBal?.sms - balanceConsumed, "sms" ); log.info( `[API MESSAGES], [runQuickmessage], [Quick sms started] Balance Consumed [${balanceConsumed}], Quick MessageType [SMS]` ); // await processQuickMessagePush( // userId, // contactArr, // senderIdDetails, // quickmessageId, // message // ); // const NewAccountBal = await accountCreditsModel.checkAccountBal(userId); } }); return res.status(200).json({ msg: "Quick message is being sent", // userCredit: NewAccountBal, }); } catch (e) { log.info(`[Quick Message], [runQuickMessage], Error [${e}]`); return res.status(500).json(e); } } async function getAPIMessages(req, res) { try { var userId = req.headers["id"]; let userType; // = req.headers["usertype"]; let { type, searchType, searchValue, startDate, endDate } = req.body; if ("undefined" == req.headers["usertype"]) userType = process.env.CLIENT_USER; else userType = req.headers["usertype"]; log.info( `[QUICKMESSAGE], [getAPIMessages] , User Id [${userId}], User Type [${userType}]` ); // normal QuickMessage let list = {}; let sms; if (process.env.CLIENT_USER == userType) { if (searchValue) { log.info( `[QUICKMESSAGE], [getAPIMessages] , User Id [${userId}], User Type [${userType}], [FILTER], [SMS], Search Type [${searchType}], Search Value [${searchValue}], StartDate [${startDate}], EndDate [${endDate}]` ); sms = await apimessage.getQuickMessageUserFilter( userId, searchType, searchValue, ); } else { sms = await apimessage.getQuickMessageUser( userId, startDate, endDate ); } list = { sms: sms || [] }; } else { if (searchValue) { log.info( `[QUICKMESSAGE], [getAPIMessages] , User Id [${userId}], User Type [${userType}], [FILTER], [SMS], Search Type [${searchType}], Search Value [${searchValue}] StartDate [${startDate}], EndDate [${endDate}]` ); sms = await apimessage.getQuickMessageAdminFilter(searchType, searchValue); } else { sms = await apimessage.getQuickMessageAdmin(startDate, endDate); } list = { sms: sms || [] }; } log.info( `[API MESSAGES], [getAPIMessages], [API MESSAGES List has been sent successfully]` ); return res.status(200).json(list); } catch (e) { log.info(`[API MESSAGES], [getAPIMessages], Error [${e}]`); res.status(500).json(e); } } var self = (module.exports = { runApiMessage, // runQuickMessageForExcel, getAPIMessages, });