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

All time Best Post

Write a program that declares a class named Person. It should have instance variables to record name, age and salary. Use new operator to create a Person object. Set and display its instance variables.

IMAGE CRUD OPERATION USING EXPRESS MONGOOSE MULTER

connect websocket to binance api and store t he true value in the db

CRUD APP WITH SORT IN NODE EXPRESS AND MONGODB

express session login system using node express mongodb

how to delete image from the folder directly from a Request (MULTER)

calculate rsi

java program for 1 to 10 print using while loop

How to fetch last one minute volume of BTC in CCXT Nodejs.