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

express session login system using node express mongodb

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

CRUD APP WITH SORT IN NODE EXPRESS AND MONGODB

Rock-Paper-Scissor Game in Pure JavaScript

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

calculate rsi

java program for 1 to 10 print using while loop