mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 07:07:35 +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
|
group.leader = user._id; // If new user is only member -> set as leader
|
||||||
}
|
}
|
||||||
|
|
||||||
group.memberCount += 1;
|
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()];
|
let promises = [group.save(), user.save()];
|
||||||
|
|
||||||
@@ -948,7 +955,14 @@ api.removeGroupMember = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isInGroup) {
|
if (isInGroup) {
|
||||||
group.memberCount -= 1;
|
// 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) {
|
if (group.quest && group.quest.leader === member._id) {
|
||||||
group.quest.key = undefined;
|
group.quest.key = undefined;
|
||||||
|
|||||||
@@ -1415,23 +1415,12 @@ schema.methods.leave = async function leaveGroup (user, keep = 'keep-all', keepC
|
|||||||
} else {
|
} else {
|
||||||
members = await User.find({ 'party._id': group._id }).select('_id').exec();
|
members = await User.find({ 'party._id': group._id }).select('_id').exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
_.remove(members, { _id: user._id });
|
_.remove(members, { _id: user._id });
|
||||||
|
|
||||||
if (members.length === 0) {
|
if (members.length === 0) {
|
||||||
promises.push(group.remove());
|
promises.push(group.remove());
|
||||||
return Promise.all(promises);
|
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
|
// otherwise If the leader is leaving
|
||||||
// (or if the leader previously left, and this wasn't accounted for)
|
// (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) {
|
schema.methods.updateGroupPlan = async function updateGroupPlan (removingMember) {
|
||||||
// Recheck the group plan count
|
// Recheck the group plan count
|
||||||
let members;
|
this.memberCount = await this.getMemberCount();
|
||||||
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;
|
|
||||||
|
|
||||||
if (this.purchased.plan.paymentMethod === stripePayments.constants.PAYMENT_METHOD) {
|
if (this.purchased.plan.paymentMethod === stripePayments.constants.PAYMENT_METHOD) {
|
||||||
await stripePayments.chargeForAdditionalGroupMember(this);
|
await stripePayments.chargeForAdditionalGroupMember(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user