Remove and clean up unused invite notif (#15279)

* fix(notifications): remove and clean up unused invite notif

* fix(lint): remove unused const

* refactor(invites): updateMany in migration, don't load inviter unless needed

* fix(lint): remove extra whitespace

* fix(groups): remove more broken inviter logic

---------

Co-authored-by: Sabe Jones <sabe@habitica.com>
This commit is contained in:
Sabe Jones
2024-08-06 12:43:24 -05:00
committed by GitHub
parent 63918b3c20
commit afd00a8ab6
3 changed files with 63 additions and 82 deletions

View File

@@ -610,7 +610,6 @@ api.joinGroup = {
if (hasInvitation) {
isUserInvited = true;
inviter = hasInvitation.inviter;
} else {
isUserInvited = group.privacy !== 'private';
}
@@ -634,42 +633,28 @@ api.joinGroup = {
group.leader = user._id; // If new user is only member -> set as leader
}
let promises = [user.save()];
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;
}
// Load the inviter
if (inviter) inviter = await User.findById(inviter).exec();
let promises = [group.save(), user.save()];
// Load the inviter
if (inviter) inviter = await User.findById(inviter).exec();
// Check the inviter again, could be a deleted account
if (inviter) {
const data = {
headerText: common.i18n.t('invitationAcceptedHeader', inviter.preferences.language),
bodyText: common.i18n.t('invitationAcceptedBody', {
groupName: group.name,
username: user.profile.name,
}, inviter.preferences.language),
};
inviter.addNotification('GROUP_INVITE_ACCEPTED', data);
// Reward Inviter
if (group.type === 'party') {
// Check the inviter again, could be a deleted account
if (inviter) {
// Reward Inviter
if (!inviter.items.quests.basilist) {
inviter.items.quests.basilist = 0;
}
inviter.items.quests.basilist += 1;
inviter.markModified('items.quests');
promises.push(inviter.save());
}
}
group.memberCount = currentMembers + 1;
if (group.type === 'party' && inviter) {
// Handle awarding party-related achievements
if (group.memberCount > 1) {
const notification = new UserNotification({ type: 'ACHIEVEMENT_PARTY_UP' });
@@ -677,20 +662,12 @@ api.joinGroup = {
{
$or: [{ 'party._id': group._id }, { _id: user._id }],
'achievements.partyUp': { $ne: true },
_id: { $ne: inviter._id },
},
{
$set: { 'achievements.partyUp': true },
$push: { notifications: notification.toObject() },
},
).exec());
if (inviter) {
if (inviter.achievements.partyUp !== true) {
inviter.achievements.partyUp = true;
inviter.addNotification('ACHIEVEMENT_PARTY_UP');
}
}
}
if (group.memberCount > 3) {
@@ -700,23 +677,19 @@ api.joinGroup = {
{
$or: [{ 'party._id': group._id }, { _id: user._id }],
'achievements.partyOn': { $ne: true },
_id: { $ne: inviter._id },
},
{
$set: { 'achievements.partyOn': true },
$push: { notifications: notification.toObject() },
},
).exec());
if (inviter) {
if (inviter.achievements.partyOn !== true) {
inviter.achievements.partyOn = true;
inviter.addNotification('ACHIEVEMENT_PARTY_ON');
}
}
}
} else {
group.memberCount += 1;
}
promises.push(group.save());
const analyticsObject = {
uuid: user._id,
hitType: 'event',
@@ -727,15 +700,9 @@ api.joinGroup = {
privacy: group.privacy,
headers: req.headers,
invited: isUserInvited,
seekingParty: group.type === 'party' ? seekingParty : null,
};
if (group.type === 'party') {
analyticsObject.seekingParty = seekingParty;
}
if (group.privacy === 'public') {
analyticsObject.groupName = group.name;
}
if (inviter) promises.push(inviter.save());
promises = await Promise.all(promises);
if (group.hasNotCancelled()) {
@@ -743,7 +710,7 @@ api.joinGroup = {
await group.updateGroupPlan();
}
const response = await Group.toJSONCleanChat(promises[0], user);
const response = await Group.toJSONCleanChat(group, user);
const leader = await User.findById(response.leader).select(nameFields).exec();
if (leader) {
response.leader = leader.toJSON({ minimize: true });