RaptusBackend / controllers /UserRegistrationFunctions.js
GitHub Actions
Initial commit
df72131
const express = require('express')
const crypto = require('crypto')
const mail = require('../config/MailConfig.js')
const Team = require('../models/TeamModel.js')
const User = require('../models/UserModel.js')
const LeaderBoard = require('../models/LeaderboardModel.js')
const Coupon = require('../models/CouponModel.js')
const validator = require('../middlewares/UserValidator.js')
const dotenv = require("dotenv");
dotenv.config({ path: "./config.env" });
var successTeam, successUser, successLeaderBoard;
module.exports.createTeam = async function createTeam(req, res) {
try {
let data = (req.body)
let TeamName = data.TeamName
let Code = crypto.randomBytes(4).toString("hex");
let teamobj = {
TeamName: TeamName.toLowerCase(),
Code: Code,
Password: data.Password
}
let team = await Team.create(teamobj);
successTeam = team;
console.log("Team Created")
let url =process.env.FRONTEND+ `/register/:${Code}`
let leader = {
Name: data.Name,
Email: data.Email.toLowerCase(),
Password: data.Password,
RollNumber: data.RollNumber,
PhoneNumber: data.PhoneNumber,
Branch: data.Branch,
Year: data.Year,
DiscordID: data.DiscordId,
Role: "Leader",
Password: data.Password,
TeamID: team._id
}
var err = await validator.validateUser(leader)
if (err) {
console.log("User Not Validated")
throw new Error(err)
}
else {
console.log("User Validated")
console.log(leader)
let user = await User.create(leader);
successUser = user;
let leaderboard = new LeaderBoard({
TeamID: team._id,
TeamName: TeamName.toLowerCase(),
Points: 0
})
await LeaderBoard.create(leaderboard);
successLeaderBoard = leaderboard;
var qresp = Team.findByIdAndUpdate(team._id, { $push: { Members: user._id } }).exec();
mail.sendMailLeader(data.Email,"Successfully Created team for Raptus!" ,TeamName, Code,data.Name);
res.json({
message: "Team Registered Successfully",
status: true,
Code: Code,
URL: url,
TeamName: TeamName,
Resp: qresp
});
}
} catch (error) {
if (successTeam)
Team.findByIdAndDelete(successTeam._id).exec();
if (successUser)
User.findByIdAndDelete(successUser._id).exec();
if (successLeaderBoard)
LeaderBoard.findByIdAndDelete(successLeaderBoard._id).exec();
if (error.code === 11000) {
var message = error;
if (error.keyValue.TeamName)
message = "Team Name already exists"
if (error.keyValue.Code)
message = "Team Code already exists"
if (error.keyValue.Email)
message = "Email already exists"
if (error.keyValue.RollNumber)
message = "Roll Number already exists"
if (error.keyValue.PhoneNumber)
message = "Phone Number already exists"
if (error.keyValue.DiscordID)
message = "Discord Id already exists"
res.json({
message: message
})
return
}
// console.log(error)
else
res.json({
status: false,
message: error.message
})
}
}
module.exports.verifyTeam = async function verifyTeam(req, res) {
try {
let data = req.body
let team = await Team.findOne({ Code: data.Code })
if (team) {
if (team.Members.length <= 3) {
res.json({
status: true,
url: process.env.FRONTEND+`/register/:${team.Code}`,
TeamName: team.TeamName,
Code: data.Code
})
}
else if (team.Members.length == 4) {
res.json({
status: false,
message: "Team is Full !!"
});
}
}
else {
res.json({
status: false,
message: "Invalid Team Code"
});
}
} catch (error) {
res.json({
status: false,
message: error.message
})
}
}
module.exports.info = async function info(req, res) {
try {
let data = req.body;
let team = await Team.findOne({ Code: data.code })
if (team) {
if (team.Members.length <= 3) {
res.json({
status: true,
url: process.env.FRONTEND+`/register/:${team.Code}`,
TeamName: team.TeamName,
Code: data.Code
})
}
else if (team.Members.length == 4) {
res.json({
status: false,
message: "Team is Full !!"
});
}
}
else {
res.json({
status: false,
message: "Invalid URL"
});
}
} catch (error) {
res.json({
status: false,
message: error.message
})
}
}
module.exports.joinTeam = async function joinTeam(req, res) {
try {
let data = (req.body)
let Code = req.params.id.substring(1);
let team = await Team.findOne({ Code: Code })
let member = {
Name: data.Name,
Email: data.Email,
Password: team.Password,
RollNumber: data.RollNumber,
PhoneNumber: data.PhoneNumber,
Branch: data.Branch,
Year: data.Year,
DiscordID: data.DiscordId,
Role: "Member",
Password: team.Password,
TeamID: team._id
}
var err = await validator.validateUser(member)
//console.log(err)
if (err) {
console.log("User Not Validated")
throw new Error(err)
}
else {
console.log("User Validated")
let user;
if (team.Members.length <= 3) {
user = await User.create(member);
successUser = user;
team.Members.push(user._id)
await team.save()
console.log(team)
console.log(user)
mail.sendMailMember(data.Email, "Successfully Joined team for Raptus!", team.TeamName, team.Code, data.Name);
}
else {
res.json({
status: false,
message: "Team is already full !!",
});
}
res.json({
status: true,
message: "Member registered successfully",
TeamName: team.TeamName,
});}
} catch (error) {
if (successUser)
User.findByIdAndDelete(successUser._id).exec();
if (error.code === 11000) {
var message = error;
if (error.keyValue.Email)
message = "Email already exists"
if (error.keyValue.RollNumber)
message = "Roll Number already exists"
if (error.keyValue.PhoneNumber)
message = "Phone Number already exists"
if (error.keyValue.DiscordID)
message = "Discord Id already exists"
res.json({
status: false,
message: message
})
return
}
// console.log(error)
else
res.json({
status: false,
message: error.message
})
}
}
module.exports.coupon = async function coupon(req, res) {
try {
let couponCode = crypto.randomBytes(6).toString("hex");
res.json({
status: true,
Coupon: couponCode
});
let couponCreated = await Coupon.create({ Coupon: couponCode })
} catch (error) {
res.status(500).json({
message: error.message
})
}
}