Spaces:
Running
Running
File size: 3,338 Bytes
df72131 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
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();
}
}
} |