mlm binary tree logic
Refferal.js
const connection = require('../database');
const shortid = require('shortid');
exports.generateShortUniqueId = () => {
const id = shortid.generate();
return id;
}
function checkTree(array) {
let hasZero = false;
let hasOne = false;
for (const item of array) {
if (item.side === 0) {
hasZero = true;
} else if (item.side === 1) {
hasOne = true;
}
}
if (hasZero && hasOne) {
return true;
} else if (hasZero) {
return "addtoright";
} else {
return "addtoleft";
}
}
exports.getRefferal = (refferalid) => {
try {
const promise = new Promise((resolve, reject) => {
console.log({reffer: typeof refferalid})
if(typeof refferalid != "undefined" && refferalid !== null && refferalid !== ''){
let query = `SELECT binarydistributionside,sno FROM usertable WHERE refferal = ?`;
connection.query(query, [refferalid], (err,result) => {
if(err) {
return reject({status: false, message: err.message})
}
else if (result.length == 0) {
// console.log("first")
return reject({status: false, message: "refferal code does not exist"})
}
else if (result.length > 0) {
let query = `SELECT * FROM tree WHERE underwhichuser = ?`;
// console.log("result[0].sno",result[0].sno);
connection.query(query, [result[0].sno] , (err,result1) => {
if(err) {
return reject({status: false, message: err.message})
}
else if(result1.length == 0 ){
let sendData = {
underid: result[0].sno,
id: result[0].sno,
side: result[0].binarydistributionside
}
console.log({sendData})
return resolve(sendData)
}
else if (result1.length > 0 ) {
let treeCheck = checkTree(result1);
if(treeCheck == true) {
// let sendData = {
// id: result[0].sno,
// side: result[0].binarydistributionside
// }
// return resolve(sendData)
let query = `SELECT id,side FROM tree WHERE side = ${result[0].binarydistributionside} ORDER BY sno DESC LIMIT 1;`
connection.query(query, (err,result2) => {
if(err) {console.log(err)}
else if (result2.length == 0) {
console.log("some thing is not right")
}
else if (result2.length > 0) {
let sendData = {
id: result2[0].id,
side: result[0].binarydistributionside,
underid: result[0].sno,
}
return resolve(sendData)
}
})
}
else if (treeCheck == "addtoright") {
let sendData = {
underid: result[0].sno,
id: result[0].sno,
side: 1
}
return resolve(sendData)
}
else if (treeCheck == "addtoleft") {
let sendData = {
underid: result[0].sno,
id: result[0].sno,
side: 0
}
return resolve(sendData);
}
else {
return {status: false, message: "Something went wrong! Please Contact us if this is a mistake"};
}
}
})
}
})
}
else {
console.log("else")
let query = `SELECT binarydistributionside,sno FROM usertable WHERE sno = ?`;
connection.query(query, [1], (err,result) => {
if(err) {
return reject({status: false, message: err.message})
}
else if (result.length == 0) {
// super admin does not exist
// in that case only pass side static which is left side
let sendData = {
underid: 1,
id: 0,
side: 0
}
return resolve(sendData)
}
else if (result.length > 0) {
let query = `SELECT * FROM tree WHERE underwhichuser = ?`;
connection.query(query, [result[0].sno] , (err,result1) => {
if(err) {
return reject({status: false, message: err.message})
}
else if(result1.length == 0 ){
let sendData = {
underid: result[0].sno,
id: result[0].sno,
side: result[0].binarydistributionside
}
return resolve(sendData)
}
else if (result1.length > 0 ) {
let treeCheck = checkTree(result);
if(treeCheck == true) {
let query = `SELECT id,side FROM tree WHERE side = ${result[0].binarydistributionside} ORDER BY sno DESC LIMIT 1;`
connection.query(query, (err,result2) => {
if(err) {console.log(err)}
else if (result2.length == 0) {
console.log("some thing is not right")
}
else if (result2.length > 0) {
let sendData = {
underid: result[0].sno,
id: result2[0].id,
side: result[0].binarydistributionside
}
return resolve(sendData)
}
})
}
else if (treeCheck == "addtoright") {
let sendData = {
underid: result[0].sno,
id: result[0].sno,
side: 1
}
return resolve(sendData)
}
else if (treeCheck == "addtoleft") {
let sendData = {
underid: result[0].sno,
id: result[0].sno,
side: 0
}
return resolve(sendData);
}
else {
return {status: false, message: "Something went wrong! Please Contact us if this is a mistake"};
}
}
})
}
})
}
})
return promise
} catch (error) {
return {status: false, message: error.message};
}
}
==============================================================================
==============================================================================
/**
* @param {String} username
* @param {String} password
* @param {String} fullname
* @param {String} dob
* @param {String} email
* @param {string} wallet
* @param {String} binarydistributionside
* @param {string} referral
*/
const connection = require("../database");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcrypt");
const { getRefferal, generateShortUniqueId } = require("../utils/refferal");
const { generateUniqueId } = require("../utils/uniqueidGenerator");
const { checkusername, checkemail, checkempty } = require("../middleware/validation");
const { sendverifivationemail } = require("../utils/sendverificationemail");
const { getuserID } = require("../utils/getuser");
const saltRounds = 16;
exports.login = (req, res) => {
try {
const { username, password } = req.body;
if(checkusername(username) == false) return res.status(400).json({status: false, message: "please enter the valid username"})
let query = `SELECT uniqueId,username, password FROM usertable WHERE username = '${username}'`;
connection.query(query, async (err, result) => {
if (err) {
console.log(err);
} else if (result.length == 0) {
return res
.status(404)
.json({ status: false, message: "user does not exist" });
} else if (result.length > 0) {
let item = result[0];
let bcryptPass = await bcrypt.compare(password, item.password);
if (!bcryptPass)
return res
.status(404)
.send({ status: false, message: "The entered password is wrong" });
let token = jwt.sign({ userId: item.uniqueId }, "innova-user", {
expiresIn: "1d",
});
res.status(200).send({
status: true,
message: "User login successfully",
data: { token: token },
});
}
});
} catch (error) {
return res.status(413).json({ status: false, message: error.message });
}
};
exports.register = async (req, res) => {
try {
const {
username,
password,
fullname,
dob,
email,
wallet,
binarydistributionside,
refferaltext,
} = req.body;
if(checkusername(username) == false) return res.status(400).json({status: false, message: "please enter the valid username"});
if(checkemail(email) == false) return res.status(400).json({status: false, message: "please enter the valid Email"});
if(checkempty(fullname) == false) return res.status(400).json({status: false, message: "please enter the valid Fullname"});
let side = await getRefferal(refferaltext);
const hash = bcrypt.hashSync(password, saltRounds);
const uniquereferId = generateShortUniqueId();
let uniqueId = generateUniqueId();
let userSide = binarydistributionside == "right" ? 1 : 0;
let emailverificationcode = generateUniqueId();
var currentTimestamp = Date.now();
var futureTimestamp = currentTimestamp + (24 * 60 * 60 * 1000);
console.log("Future timestamp (24 hours later): " + futureTimestamp);
let query = `INSERT INTO usertable (username, password, fullname, dob, email, wallet, refferal ,refferBy, binarydistributionside, uniqueId, emailverificationcode, emailverifyenddate) VALUES ('${username}', '${hash}', '${fullname}', '${dob}', '${email}', '${wallet}','${uniquereferId}','${side.underid}' ,'${userSide}', '${uniqueId}', '${emailverificationcode}', '${futureTimestamp}')`;
connection.query(query, (err, result) => {
if (err) {
return res.status(409).json({ status: false, message: err.message });
} else if (result) {
sendverifivationemail(email, emailverificationcode)
// console.log("result", result.id);
// let query = `INSERT INTO tree (id, side, underwhichuser) VALUES ('${result.insertId}','${side.side}', '${side.id}')`;
// connection.query(query, (err, result) => {
// if (err) {
// return res.status(500).json({ status: false, message: err.message });
// } else if (result) {
return res.status(201).json({ status: true, message: `User created successfully`, code: emailverificationcode });
// }
// });
}
});
} catch (error) {
return res.status(413).json({ status: false, message: error.message });
}
};
exports.emailverified = async (req,res) => {
try {
const code = req.query.token;
console.log({code})
let query = `SELECT u1.sno, u1.emailverifyenddate, u1.refferBy, u2.refferal FROM usertable u1 INNER JOIN usertable u2 ON u1.refferBy = u2.sno WHERE u1.emailverificationcode = ?;`;
connection.query(query, [code],async (err,result) => {
if(err) return res.status(409).json({ status: false, message: err.message });
else if (result.length == 0) return res.status(404).json({status: false, message: "Verification code is not valid"});
else if (result.length > 0) {
let item = result[0];
const currentTimestamp = Date.now() / 1000;
if (item.emailverifyenddate < currentTimestamp) {
return res.status(498).json({status: false, message: 'Link Expired, please request the new one'})
}
else {
let query = `UPDATE usertable SET isemailverified = true WHERE sno = ?`;
connection.query(query, [item.sno], async (err,result) => {
if(err) return res.status(409).json({ status: false, message: err.message });
else if (result) {
let side = await getRefferal(item.refferal);
let query = `INSERT INTO tree (id, side, underwhichuser) VALUES ('${item.sno}','${side.side}', '${side.id}')`;
connection.query(query, (err, result) => {
if (err) {
return res.status(500).json({ status: false, message: err.message });
} else if (result) {
return res.status(200).json({ status: true, message: `Email Verified Successfully`});
}
});
}
})
}
}
})
} catch (error) {
return res.status(413).json({ status: false, message: error.message });
}
}
exports.resendemail = async (req,res) => {
try {
let userId = await getuserID(req);
console.log({userId})
let query = `SELECT sno,email,isemailverified FROM usertable WHERE uniqueId = ?`;
connection.query(query, [userId], (err, result) => {
if(err) return res.status(409).json({ status: false, message: err.message });
else if (result.length == 0) return res.status(404).json({status: false, message: "user does not exist"});
else if (result.length > 0) {
if(result[0].isemailverified == true) return res.status(200).json({ status: false, message: "your email is already verified"});
let emailverificationcode = generateUniqueId();
var currentTimestamp = Date.now();
var futureTimestamp = currentTimestamp + (24 * 60 * 60 * 1000);
console.log("Future timestamp (24 hours later): " + futureTimestamp);
let query = `UPDATE usertable SET emailverificationcode = '${emailverificationcode}', emailverifyenddate = '${futureTimestamp}' WHERE sno = ?`;
connection.query(query, [result[0].sno], (err,result1) => {
if(err) console.log(err)
else if (result1) {
sendverifivationemail(result[0].email, emailverificationcode);
return res.status(200).json({status: true, message: "we have resend A email verification link"})
}
})
}
})
} catch (error) {
return res.status(500).json({ status: false, message: error.message });
}
}
exports.edituser = (req, res) => {
try {
} catch (error) {
return res.status(500).json({ status: false, message: error.message });
}
};
exports.getUser = (req, res) => {
try {
let bearerHeader = req.headers.authorization;
let bearerToken = bearerHeader.split(" ");
let token = bearerToken[1];
let id = jwt.decode(token);
// let query = `SELECT username,fullname,dob,email,wallet,binarydistributionside,refferal,refferBy,activePlan,planStatus FROM usertable WHERE uniqueId = ?`;
let query = `SELECT u1.username, u1.fullname, u1.dob,u1.email, u1.wallet, u1.binarydistributionside, u1.refferal, u2.username AS refferBy, t.txHash, t.istxhashVerified, t.createdAt, t.enddate, p.name AS Lastplanbought
FROM usertable u1
JOIN usertable u2 ON u1.refferBy = u2.sno
LEFT JOIN transactiontable t ON t.userid = u1.sno
LEFT JOIN plans p ON t.planid = p.sno
WHERE u1.uniqueId = ? ORDER BY t.sno DESC LIMIT 1;`
connection.query(query, [id.userId], (err, result) => {
if (err) {
console.log(err);
} else if (result.length == 0) {
return res
.status(404)
.json({ status: false, message: "No Data Found" });
} else if (result.length > 0) {
let item = result[0];
let data = {
...item,
binarydistributionside:
item.binarydistributionside == 0 ? "left" : "right",
};
return res.status(200).json({ status: true, data: data });
}
});
} catch (error) {
return res.status(500).json({ status: false, message: error.message });
}
};
exports.getBinarytree = (req, res) => {
try {
let bearerHeader = req.headers.authorization;
let bearerToken = bearerHeader.split(" ");
let token = bearerToken[1];
let id = jwt.decode(token);
let query = `SELECT sno,isemailverified FROM usertable WHERE uniqueId = ?`;
connection.query(query, [id.userId], (err, result) => {
if (err) {
console.log(err);
} else if (result.length == 0) {
return res
.status(404)
.json({ status: false, message: "No Data Found" });
} else if (result.length > 0) {
let item = result[0];
if(item.isemailverified == false) return res.status(401).json({status: false, message: "Please Verify you email to join Binary Tree"})
let query = `WITH RECURSIVE UserTree AS (SELECT t.id, t.side, t.underwhichuser, 0 AS level FROM tree t WHERE t.id = ${item.sno} UNION ALL SELECT mt.id, mt.side, mt.underwhichuser, ut.level + 1 FROM tree mt JOIN UserTree ut ON mt.underwhichuser = ut.id ) SELECT ut.id, ut.side, ut.underwhichuser, ut.level, u.username FROM UserTree ut JOIN usertable u ON ut.id = u.sno;`;
// console.log({ query });
connection.query(query, (err, result) => {
if (err) {
console.log(err);
} else if (result.length == 0) {
return res
.status(404)
.json({ status: false, message: "No Data Found" });
} else if (result.length > 0) {
return res.status(200).json({ status: true, data: result });
}
});
}
});
} catch (error) {
return res.status(500).json({ status: false, message: error.message });
}
};
exports.authenticatereff = async (req,res) => {
try {
const { ref } = req.query;
if (!ref) {
res.status(400).json({ status: false, message: "referralCode is required" });
return;
}
let query = `SELECT username,refferal FROM usertable WHERE refferal = ?`;
connection.query(query, [ref], (err,result) => {
if(err) {console.log(err)}
else if (result.length == 0) {return res.status(404).json({status: false, message: "refferal code does not exist"})}
else if (result.length > 0) {
return res.status(200).json({status: true, data: result[0]})
}
})
} catch (error) {
return res.status(500).json({ status: false, message: error.message})
}
}
// WITH RECURSIVE UserTree AS ( SELECT id, underwhichuser, 0 AS level FROM tree WHERE id = 3 UNION ALL SELECT mt.id, mt.underwhichuser, ut.level + 1 FROM tree mt JOIN UserTree ut ON mt.underwhichuser = ut.id ) SELECT * FROM UserTree;
// WITH RECURSIVE UserTree AS ( SELECT t.id, t.underwhichuser, 0 AS level FROM tree t WHERE t.id = 2 UNION ALL SELECT mt.id, mt.underwhichuser, ut.level + 1 FROM tree mt JOIN UserTree ut ON mt.underwhichuser = ut.id ) SELECT ut.id, ut.underwhichuser, ut.level, u.username FROM UserTree ut JOIN usertable u ON ut.id = u.sno;
// WITH RECURSIVE UserTree AS (SELECT t.id, t.side, t.underwhichuser, 0 AS level FROM tree t WHERE t.id = ${item.sno} UNION ALL SELECT mt.id, mt.side, mt.underwhichuser, ut.level + 1 FROM tree mt JOIN UserTree ut ON mt.underwhichuser = ut.id ) SELECT ut.id, ut.side, ut.underwhichuser, ut.level, u.username FROM UserTree ut JOIN usertable u ON ut.id = u.sno;
Comments
Post a Comment