Spaces:
Running
Running
| const LeaderboardModel = require('../models/LeaderboardModel'); | |
| const RoomModel = require('../models/RoomModel'); | |
| const RoundsModel = require('../models/RoundsModel'); | |
| const PreviousRoomModel = require('../models/PreviousRoomModel'); | |
| const CollaborativeLeaderboardModel = require('../models/CollaborativeLeaderboardModel'); | |
| let getLeaderBoardR1 = []; | |
| module.exports.getRoomLeaderBoardR1R2 = async function getRoomLeaderBoardR1R2(team,round) { | |
| try { | |
| let PreviousRoom = await PreviousRoomModel.findOne({ TeamID: team._id, Round: round}); | |
| console.log(PreviousRoom); | |
| let roomLeaderBoard = await LeaderboardModel.find({ RoomID: PreviousRoom.RoomID, Round: round}); | |
| if (roomLeaderBoard.length === 0) { | |
| return "No teams in the room"; | |
| } else { | |
| getLeaderBoardR1 = roomLeaderBoard; | |
| getLeaderBoardR1 = await Promise.all(getLeaderBoardR1.map(async (team) => { | |
| return await unsetTeams(team,round); | |
| })); | |
| getLeaderBoardR1.sort((a, b) => { | |
| if (a.Points === b.Points) { | |
| return a.Time - b.Time; | |
| } else { | |
| return b.Points - a.Points; | |
| } | |
| }); | |
| return getLeaderBoardR1; | |
| } | |
| } catch (error) { | |
| console.log(error); | |
| return false; | |
| } | |
| }; | |
| module.exports.getRoundLeaderboard=async function getRoundLeaderboard(round) | |
| { | |
| try{ | |
| let leaderboard=[]; | |
| let rooms= await RoomModel.find({Round:round}); | |
| for(let i=0;i<rooms.length;i++) | |
| { | |
| let roomLeaderBoard = await LeaderboardModel.find({ RoomID: rooms[i]._id, Round: round}); | |
| if (roomLeaderBoard.length === 0) { | |
| console.log("No teams in the room") | |
| } else { | |
| roomLeaderBoard.sort((a, b) => { | |
| if (a.Points === b.Points) { | |
| return a.Time - b.Time; | |
| } else { | |
| return b.Points - a.Points; | |
| } | |
| }); | |
| leaderboard.push(roomLeaderBoard); | |
| leaderboard[i] = await Promise.all(leaderboard[i].map(async (team) => { | |
| return await unsetTeams(team,round); | |
| })); | |
| } | |
| } | |
| return leaderboard; | |
| } | |
| catch(error){ | |
| console.log(error); | |
| return false; | |
| } | |
| } | |
| module.exports.getRound3Leaderboard=async function getRound3Leaderboard() | |
| { | |
| round=3; | |
| try{ | |
| let leaderboard=[]; | |
| let roomLeaderBoard= await CollaborativeLeaderboardModel.find({Round:3}); | |
| roomLeaderBoard.sort((a, b) => { | |
| if (a.Points === b.Points) { | |
| return a.Time - b.Time; | |
| } else { | |
| return b.Points - a.Points; | |
| } | |
| }); | |
| leaderboard=roomLeaderBoard; | |
| leaderboard = await Promise.all(leaderboard.map(async (team) => { | |
| return await unsetTeams(team, round); | |
| })); | |
| return leaderboard; | |
| } | |
| catch(error){ | |
| console.log(error); | |
| return false; | |
| } | |
| } | |
| module.exports.getRound4Leaderboard=async function getRound4Leaderboard() | |
| { | |
| round=4; | |
| try{ | |
| let leaderboard=[]; | |
| let roomLeaderBoard= await LeaderboardModel.find({Round:4}); | |
| roomLeaderBoard.sort((a, b) => { | |
| if (a.Points === b.Points) { | |
| return a.Time - b.Time; | |
| } else { | |
| return b.Points - a.Points; | |
| } | |
| }); | |
| leaderboard=roomLeaderBoard; | |
| leaderboard = await Promise.all(leaderboard.map(async (team) => { | |
| return await unsetTeams(team, round); | |
| })); | |
| return leaderboard; | |
| } | |
| catch(error){ | |
| console.log(error); | |
| return false; | |
| } | |
| } | |
| module.exports.getFinalLeaderboard=async function getFinalLeaderboard() | |
| { | |
| round = 0; | |
| try { | |
| let leaderboard = []; | |
| let roomLeaderBoard = await LeaderboardModel.find({ Round: 0 }); | |
| roomLeaderBoard.sort((a, b) => { | |
| if (a.Points === b.Points) { | |
| return a.Time - b.Time; | |
| } else { | |
| return b.Points - a.Points; | |
| } | |
| }); | |
| leaderboard = roomLeaderBoard; | |
| leaderboard = await Promise.all(leaderboard.map(async (team) => { | |
| return await unsetTeams(team, round); | |
| })); | |
| return leaderboard; | |
| } | |
| catch (error) { | |
| console.log(error); | |
| return false; | |
| } | |
| } | |
| async function unsetTeams(team,round) { | |
| const unsetTeam = { ...team._doc }; | |
| unsetTeam._id = undefined; | |
| unsetTeam.__v = undefined; | |
| //unsetTeam.TeamID = undefined; | |
| unsetTeam.RoomID = undefined; | |
| unsetTeam.Round = undefined; | |
| unsetTeam.Questions = undefined; | |
| unsetTeam.Time = undefined; | |
| if(round!==0) | |
| unsetTeam.TotalTime = await calculateTime(team.Time, round); | |
| else | |
| unsetTeam.TotalTime = "00H 00M 00S"; | |
| return unsetTeam; | |
| } | |
| async function calculateTime(time, round) { | |
| const Round = await RoundsModel.findOne({Round:round}); | |
| const RoundStartTime = new Date(Round.StartTime); | |
| const TeamTime = new Date(time); | |
| const TotalTime = TeamTime - RoundStartTime; | |
| return convertSecondsToDHMS(Math.floor(TotalTime / 1000)); | |
| } | |
| function convertSecondsToDHMS(seconds) { | |
| const days = Math.floor(seconds / (24 * 60 * 60)); | |
| const hours = Math.floor((seconds % (24 * 60 * 60)) / (60 * 60)); | |
| const minutes = Math.floor((seconds % (60 * 60)) / 60); | |
| const remainingSeconds = seconds % 60; | |
| const formatNumber = (number) => { | |
| return number.toString().padStart(2, '0'); | |
| }; | |
| let result = ''; | |
| if (days > 0) { | |
| result += `${formatNumber(days)}D `; | |
| } | |
| if (hours > 0) { | |
| result += `${formatNumber(hours)}H `; | |
| } | |
| else if(days!==0 && hours===0) | |
| { | |
| result += `${formatNumber(hours)}H `; | |
| } | |
| result += `${formatNumber(minutes)}M ${formatNumber(remainingSeconds)}S`; | |
| return result.trim(); | |
| } | |