mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
* Changed the way how memberCount is incremented or decremented. * Updated the logic for incrementing/decrementing memberCount for parties and guilds. * Fixed lint errors * Added relevant comment. Changed the way how memberCount is updated to replace the usage of custom query. * Fixed lint errors. * Reverted changes owing to failing tests. * Added relevant comments. Removed duplicate and unwanted code. Added await for async function call. * Minor change due to lint error. * Reverted changes for removing the party member when the menber leaves.
This commit is contained in:
@@ -603,7 +603,14 @@ api.joinGroup = {
|
||||
group.leader = user._id; // If new user is only member -> set as leader
|
||||
}
|
||||
|
||||
if (group.type === 'party') {
|
||||
// For parties we count the number of members from the database to get the correct value.
|
||||
// See #12275 on why this is necessary and only done for parties.
|
||||
const currentMembers = await group.getMemberCount();
|
||||
group.memberCount = currentMembers + 1;
|
||||
} else {
|
||||
group.memberCount += 1;
|
||||
}
|
||||
|
||||
let promises = [group.save(), user.save()];
|
||||
|
||||
@@ -948,7 +955,14 @@ api.removeGroupMember = {
|
||||
}
|
||||
|
||||
if (isInGroup) {
|
||||
// For parties we count the number of members from the database to get the correct value.
|
||||
// See #12275 on why this is necessary and only done for parties.
|
||||
if (group.type === 'party') {
|
||||
const currentMembers = await group.getMemberCount();
|
||||
group.memberCount = currentMembers - 1;
|
||||
} else {
|
||||
group.memberCount -= 1;
|
||||
}
|
||||
|
||||
if (group.quest && group.quest.leader === member._id) {
|
||||
group.quest.key = undefined;
|
||||
|
||||
@@ -1415,23 +1415,12 @@ schema.methods.leave = async function leaveGroup (user, keep = 'keep-all', keepC
|
||||
} else {
|
||||
members = await User.find({ 'party._id': group._id }).select('_id').exec();
|
||||
}
|
||||
|
||||
_.remove(members, { _id: user._id });
|
||||
|
||||
if (members.length === 0) {
|
||||
promises.push(group.remove());
|
||||
return Promise.all(promises);
|
||||
}
|
||||
// otherwise If the leader is leaving
|
||||
// (or if the leader previously left, and this wasn't accounted for)
|
||||
} else if (group.leader === user._id) {
|
||||
const query = group.type === 'party' ? { 'party._id': group._id } : { guilds: group._id };
|
||||
query._id = { $ne: user._id };
|
||||
const seniorMember = await User.findOne(query).select('_id').exec();
|
||||
|
||||
// could be missing in case of public guild (that can have 0 members)
|
||||
// with 1 member who is leaving
|
||||
if (seniorMember) update.$set = { leader: seniorMember._id };
|
||||
}
|
||||
// otherwise If the leader is leaving
|
||||
// (or if the leader previously left, and this wasn't accounted for)
|
||||
@@ -1720,13 +1709,7 @@ schema.methods.hasCancelled = function hasCancelled () {
|
||||
|
||||
schema.methods.updateGroupPlan = async function updateGroupPlan (removingMember) {
|
||||
// Recheck the group plan count
|
||||
let members;
|
||||
if (this.type === 'guild') {
|
||||
members = await User.find({ guilds: this._id }).select('_id').exec();
|
||||
} else {
|
||||
members = await User.find({ 'party._id': this._id }).select('_id').exec();
|
||||
}
|
||||
this.memberCount = members.length;
|
||||
this.memberCount = await this.getMemberCount();
|
||||
|
||||
if (this.purchased.plan.paymentMethod === stripePayments.constants.PAYMENT_METHOD) {
|
||||
await stripePayments.chargeForAdditionalGroupMember(this);
|
||||
|
||||
Reference in New Issue
Block a user