Spaces:
Running
Running
| const RoomModel = require("../models/RoomModel"); | |
| const CollaborativeLeaderboardModel = require("../models/CollaborativeLeaderboardModel"); | |
| const { getRoundLeaderboard } = require("../helpers/LeaderBoardPreFetch"); | |
| const TeamModel = require("../models/TeamModel"); | |
| const User = require("../models/UserModel"); | |
| module.exports.scheduleCollaborativeRound = function scheduleCollaborativeRound(targetTime) { | |
| const currentTime = new Date().getTime(); | |
| const delay = targetTime - currentTime; | |
| if (delay <= 0) { | |
| // Target time has already passed, execute the function immediately | |
| callback(); | |
| } else { | |
| setTimeout(callback, delay); | |
| } | |
| } | |
| async function callback() { | |
| try { | |
| console.log('Function to setup Collaborative Rounds Started!'); | |
| let leaderboard = await getRoundLeaderboard(2); | |
| let top4Objects = getTop4Objects(leaderboard); | |
| let pairs = formRandomPairs(top4Objects); | |
| for (i in pairs) { | |
| let pair = new CollaborativeLeaderboardModel({ | |
| TeamID1: pairs[i].Team1.TeamID, | |
| TeamID2: pairs[i].Team2.TeamID, | |
| TeamName: pairs[i].Team1.TeamName + "-" + pairs[i].Team2.TeamName, | |
| Points: 0, | |
| Points1: pairs[i].Team1.Points, | |
| Points2: pairs[i].Team2.Points, | |
| Round: 3, | |
| Questions: { Solved: [], Unsolved: [] } | |
| }); | |
| let room = await RoomModel.findOne({ Round: 3 }); | |
| if (room) { | |
| pair.RoomID = room._id; | |
| let Team1 = await TeamModel.findOne({ _id: pairs[i].Team1.TeamID }); | |
| let Team2 = await TeamModel.findOne({ _id: pairs[i].Team2.TeamID }); | |
| await all_member_room_assign(Team1, room._id); | |
| await all_member_room_assign(Team2, room._id); | |
| Team1.RoomID = room._id; | |
| Team2.RoomID = room._id; | |
| await Team1.save(); | |
| await Team2.save(); | |
| } | |
| await pair.save(); | |
| } | |
| console.log('Function to setup Collaborative Rounds Ended!'); | |
| } | |
| catch (error) { | |
| console.log(error); | |
| } | |
| } | |
| function getTop4Objects(inputArray) { | |
| const newArray = []; | |
| for (let subArray of inputArray) { | |
| if (subArray.length < 4) | |
| newArray.push(...subArray); | |
| else { | |
| const top4Objects = subArray.slice(0, 4); | |
| newArray.push(...top4Objects); | |
| } | |
| } | |
| return newArray; | |
| } | |
| function formRandomPairs(jsonArray) { | |
| const shuffledArray = [...jsonArray]; | |
| const pairs = []; | |
| for (let i = shuffledArray.length - 1; i > 0; i--) { | |
| const j = Math.floor(Math.random() * (i + 1)); | |
| [shuffledArray[i], shuffledArray[j]] = [shuffledArray[j], shuffledArray[i]]; | |
| } | |
| for (let i = 0; i < 12; i += 2) { | |
| const team1 = shuffledArray[i]; | |
| const team2 = shuffledArray[i + 1] || shuffledArray[0]; | |
| pairs.push({ Team1: team1, Team2: team2 }); | |
| } | |
| return pairs; | |
| } | |
| async function all_member_room_assign(team, RoomID) { | |
| let members = team.Members; | |
| for (let i in members) { | |
| let member = await User.findOne({ _id: members[i] }); | |
| if (member) { | |
| member.RoomID = RoomID; | |
| await member.save(); | |
| } | |
| } | |
| } |