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 }) } })