RaptusBackend / controllers /ModelController.js
GitHub Actions
Initial commit
df72131
const asyncHandler = require("express-async-handler");
const Room = require("../models/RoomModel");
const Question = require("../models/QuestionsModel");
const User = require("../models/UserModel");
const Team = require("../models/TeamModel");
const Leaderboard = require("../models/LeaderboardModel");
const Round = require("../models/RoundsModel");
const { getRoomLeaderBoardR1R2, getRound3Leaderboard, getRound4Leaderboard } = require("../helpers/LeaderBoardPreFetch");
const CollaborativeLeaderboardModel = require("../models/CollaborativeLeaderboardModel");
const Certificates = require("../models/Certificates");
module.exports.profile=asyncHandler(async(req,res)=>{
try {
let board;
let rounds = await Round.find()
let date = new Date();
let round
for (let i in rounds) {
if (date >= rounds[i].StartTime && date <= rounds[i].EndTime) {
round = rounds[i];
break;
}
}
if(round)
{
if(round.Round===1||round.Round===2||round.Round===4)
board=await Leaderboard.findOne({TeamID:req.team._id,Round:round.Round});
else if(round.Round===3)
board = await CollaborativeLeaderboardModel.findOne({
$or: [{ TeamID1: req.team._id }, { TeamID2: req.team._id }]
});
}
res.json({
Round:round.Round,
TeamName:req.team.TeamName,
UserName:req.user.Name,
Points:board.Points,
QuestionsSolved:board.Questions.Solved.length,
TotalQuestions:(board.Questions.Solved.length)+(board.Questions.Unsolved.length),
RoundEnd:round.EndTime,
status:true
});
} catch (error) {
res.status(500).json({
message:error.message
})
}
})
module.exports.leaderboard=asyncHandler(async(req,res)=>{
try {
let rounds=await Round.find();
let currentRound=0;
let date=new Date();
for(let i in rounds){
if(date>=rounds[i].StartTime&&date<=rounds[i].EndTime){
currentRound=rounds[i].Round;
}
}
if(currentRound===0){
res.json({
message:"Round Not Started",
status:false
})
}
else if(currentRound===1||currentRound===2){
let leaderboard=await getRoomLeaderBoardR1R2(req.team,currentRound);
if(leaderboard){
res.json({
LB:leaderboard,
TeamName:req.team.TeamName,
status:true
});
}
else{
res.json({
status:false
})
}
}
else if(currentRound===3){
let leaderboard= await getRound3Leaderboard();
if(leaderboard){
res.json({
LB:leaderboard,
TeamName:req.team.TeamName,
status:true
});
}
else{
res.json({
status:false
})
}
}
else if(currentRound===4){
let leaderboard=await getRound4Leaderboard();
if(leaderboard){
res.json({
LB:leaderboard,
TeamName:req.team.TeamName,
status:true
});
}
else{
res.json({
status:false
})
}
}
else
{
res.json({
message:"Game Ended",
status:false
})
}
} catch (error) {
res.status(500).json({
message:error.message,
status:false
})
console.log(error);
}
})
module.exports.qsnsStatus=asyncHandler(async(req,res)=>{
try {
let board=await Leaderboard.findOne({TeamID:req.team._id});
if(board){
res.json({
Questions:board.Questions
})
}
} catch (error) {
res.status(500).json({
message:error.message
})
}
})
module.exports.newUsers=asyncHandler(async(req,res)=>{
try {
let users=await User.find();
for(let i in users){
let team=await Team.findOne({_id:users[i].TeamID});
console.log(i);
let newT={
Name:users[i].Name,
Email:users[i].Email,
PhoneNumber:users[i].PhoneNumber,
RollNumber:users[i].RollNumber,
Branch:users[i].Branch,
Year:users[i].Year,
DiscordID:users[i].DiscordID,
Role:users[i].Role,
}
if(team){
newT={...newT,TeamName:team.TeamName};
}
let newUser=await Certificates.create(newT);
}
res.json({
message:"Done"
})
} catch (error) {
res.status(500).json({
message:error.message
})
}
})
module.exports.rounds=asyncHandler(async(req,res)=>{
try {
let data = req.body;
if(data.Round!==0){
let round=await Round.findOne({Round:data.Round})
res.json({
StartTime:round.StartTime,
status:true
});
}
else{
res.json({
status:false
})
}
} catch (error) {
res.status(500).json({
message:error.message,
status:false
})
}
})