Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion frontend/android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip

26 changes: 13 additions & 13 deletions frontend/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
version: "1.3.2"
version: "1.3.3"
ffi:
dependency: transitive
description:
Expand Down Expand Up @@ -228,26 +228,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev"
source: hosted
version: "10.0.8"
version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
version: "3.0.9"
version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
lints:
dependency: transitive
description:
Expand Down Expand Up @@ -537,10 +537,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
url: "https://pub.dev"
source: hosted
version: "0.7.4"
version: "0.7.6"
typed_data:
dependency: transitive
description:
Expand Down Expand Up @@ -577,10 +577,10 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.2.0"
vm_service:
dependency: transitive
description:
Expand Down Expand Up @@ -614,5 +614,5 @@ packages:
source: hosted
version: "6.5.0"
sdks:
dart: ">=3.7.0 <4.0.0"
dart: ">=3.8.0-0 <4.0.0"
flutter: ">=3.27.0"
10 changes: 9 additions & 1 deletion server/modules/mess_change/messChangeModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,15 @@ const messChangeSchema = new mongoose.Schema({
type: String,
required: true,
},
toHostel: {
toHostel1: {
type: String,
required: true,
},
toHostel2: {
type: String,
required: true,
},
toHostel3: {
type: String,
required: true,
},
Expand Down
82 changes: 55 additions & 27 deletions server/modules/mess_change/messchangeController.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,50 +58,75 @@ const processUsersInIterations = (users, capacityTracker) => {

const sortedUsers = sortUsersByPriority(users);
for (const user of sortedUsers) {
const targetHostelId = user.next_mess?.toString();
console.log("targetHostelId", targetHostelId);
if (!targetHostelId || !capacityTracker[targetHostelId]) {
// Skip invalid requests - they remain unprocessed
remainingUsers.push(user);
continue;
const preferences = [
user.next_mess1?.toString(),
user.next_mess2?.toString(),
user.next_mess3?.toString(),
] // remove nulls

let assigned = false;
for (const messId of preferences) {
if (capacityTracker[messId]?.available > 0) {
acceptedUsers.push({
id: user._id,
name: user.name,
rollNumber: user.rollNumber,
fromHostelId: user.hostel,
toHostelId: messId,
});
capacityTracker[messId].available--;
assigned = true;
processedInThisIteration++;
break;
}
}
console.log(
"capacityTracker[targetHostelId].available",
capacityTracker[targetHostelId].available
);
if (capacityTracker[targetHostelId].available > 0) {
console.log("accepted");
acceptedUsers.push({
id: user._id,
name: user.name,
rollNumber: user.rollNumber,
fromHostelId: user.hostel, // Use user's actual hostel for HAB processed requests
toHostelId: user.next_mess,
});
capacityTracker[targetHostelId].available--;
processedInThisIteration++;
} else {
// Keep for next iteration - don't mark as waitlisted during processing

if (!assigned) {
remainingUsers.push(user);
}
}

users = remainingUsers;
console.log("users", users);
if (processedInThisIteration === 0) break;
}

const rejectedUsers = users.map((user) => ({
id: user._id,
name: user.name,
rollNumber: user.rollNumber,
fromHostelId: user.hostel, // Use user's actual hostel for HAB processed requests
toHostelId: user.next_mess,
fromHostelId: user.hostel,
toHostelId: null,
}));

return { acceptedUsers, rejectedUsers };
};

const reallocateImprovedMessChoices = async (acceptedUsers, capacityTracker) => {
for (const userData of acceptedUsers) {
const user = await User.findById(userData.id);
const preferences = [
user.next_mess1?.toString(),
user.next_mess2?.toString(),
user.next_mess3?.toString(),
].filter(Boolean);

const currentMess = user.curr_subscribed_mess?.toString();

for (const preferredMess of preferences) {
if (preferredMess === currentMess) break; // already best option
if (capacityTracker[preferredMess]?.available > 0) {
// Reassign to better mess
user.curr_subscribed_mess = preferredMess;
capacityTracker[preferredMess].available--;
capacityTracker[currentMess].available++;
await user.save();
break;
}
}
}
};


// Database update function for accepted users
const updateAcceptedUsers = async (acceptedUsers) => {
for (const acceptedUser of acceptedUsers) {
Expand All @@ -112,7 +137,9 @@ const updateAcceptedUsers = async (acceptedUsers) => {
user.applied_for_mess_changed = false;
user.got_mess_changed = true;
user.applied_hostel_string = "";
user.next_mess = null;
user.next_mess1 = null;
user.next_mess2=null;
user.next_mess3 = null;
user.applied_hostel_timestamp = null;
console.log("user", user);
await user.save();
Expand Down Expand Up @@ -218,6 +245,7 @@ const processAllMessChangeRequests = async (req, res) => {

// Update database for all user categories
await updateAcceptedUsers(acceptedUsers);
await reallocateImprovedMessChoices(acceptedUsers, capacityTracker);
await updateRejectedUsers(rejectedUsers);

// Automatically disable mess change after processing and update timestamp
Expand Down
10 changes: 9 additions & 1 deletion server/modules/user/userModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,18 @@ const userSchema = new mongoose.Schema({
return this.hostel;
},
},
next_mess: {
next_mess1: {
type: mongoose.Schema.Types.ObjectId,
ref: "Hostel",
},
next_mess2: {
type: mongoose.Schema.Types.ObjectId,
ref: "Hostel",
},
next_mess3: {
type: mongoose.Schema.Types.ObjectId,
ref: "Hostel",
},
applied_hostel_timestamp: {
type: Date,
},
Expand Down
Loading