PK!A7��nconst http = require("http"); const https = require("https"); const dotenv = require("dotenv"); const connectionModel = require("../models/connection"); const jwt = require("jsonwebtoken"); const fs = require("fs"); const { join } = require("path"); const moment = require("moment"); dotenv.config(); const config = process.env; const multer = require("multer"); const randomstring = require("randomstring"); const { promisify } = require("util"); const util = require("util"); const common = require("../helper/common"); const plan = require("../models/plan"); const mv = promisify(fs.rename); const mtnBilling = require("../library/mtnBilling"); const airtelBilling = require("../library/airtelBilling"); const zamtelBilling = require("../library/zamtelBilling"); const checkStatus = require("../library/checkStatus"); const payment = require("../models/payment"); const accountCredit = require("../models/accountCredits"); const { createRollingFileLogger } = require("simple-node-logger"); const opts = { errorEventName: "error", logDirectory: "logs", fileNamePattern: "log-.log", dateFormat: "YYYY-MM-DD", }; const log = createRollingFileLogger(opts); async function getConnections(req, res) { try { const { endDate, startDate } = req.body; log.info(`[CONNECTION], [getConnections], StartDate [${startDate}], End Date [${endDate}]`); const connectionsList = await connectionModel.getConnectionDB(startDate, endDate); if (!connectionsList) { log.info(`[CONNECTION], [getConnections], [No Connection Found]`); return res.status(400).json({ msg: "No Connection Found" }); } else { log.info(`[CONNECTION], [getConnections], [Connection list has been sent successfully]`); return res.status(200).json(connectionsList); } } catch (e) { log.error(`[CONNECTION], [getConnections], Error [${e}]`); res.status(500).json({ error: "Internal Server Error" }); } } async function makePayment(req, res) { try { const { smsQuantity, amount, userId, mobileNumber, operator, planName } = req.body; log.info(`[PAYMENT], [makePayment], Sms Quantity [${smsQuantity}], Amount [${amount}] Userid [${userId}] Operator [${operator}], Msidn [${mobileNumber}], planName [${planName}]`); if (!smsQuantity || !amount || !mobileNumber || !operator || !userId) { log.info(`[PAYMENT], [makePayment], [Parameter missing]`); return res.status(400).json({ msg: "Parameter Missing" }); } const transactionId = await generateTransactionId() log.info(`[PAYMENT], TranasctionId[${JSON.stringify(transactionId)}]`); await payment.addPayment( userId, transactionId, amount, mobileNumber, smsQuantity, planName, operator ); if (operator == "MTN") { var billingDone = await mtnBilling( mobileNumber, amount, transactionId ); } else if (operator == "AIRTEL") { var billingDone = await airtelBilling( mobileNumber, amount, transactionId ); } else { var billingDone = await zamtelBilling( mobileNumber, amount, transactionId ); } var bill = JSON.stringify(billingDone); log.info(`[PAYMENT], [makePayment], Bill[${bill}]`); if (billingDone.status == "00") { log.info( `[PAYMENT], [updatePayment], [SUCCESS], [Adding] [Adding SMS Balance] [${smsQuantity}]` ); return res.status(200).json({ msg: "Payment Successful", data: billingDone }); } else { log.info( `[PAYMENT], [updatePayment], Payment Failed]` ); await payment.updatePayment(userId, transactionId, process.env.PAYMENT_FAILED); return res.status(400).json({ msg: "Payment Failed", data: billingDone }); } } catch (e) { log.error(`[PAYMENT], [makePayment], Error [${e}]`); res.status(500).json({ error: "Internal Server Error" }); } } async function generateTransactionId() { const timestamp = Date.now().toString(); const randomString = Math.random().toString(36).substr(2, 10); const transactionId = timestamp + randomString; const refrenceId = await payment.getPaymentsByRefrenceId(transactionId); if (!refrenceId) { return transactionId; } else { generateTransactionId() } } async function getPayments(req, res) { try { var userId = req.headers["id"]; let { startDate, endDate } = req.body; log.info(`[PAYMENT], [Get PAYMENT], Userid [${userId}], StartDate[${startDate}], EndDate[${endDate}] `); const userPayment = await payment.getPaymentsByUSerid(userId, startDate, endDate); return res.status(200).json({ userPayment }); } catch (e) { log.error(`[PAYMENT], [Get PAYMENT], Error [${e}]`); res.status(500).json({ error: "Internal Server Error" }); } } module.exports = { getConnections, makePayment, getPayments, };