-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathinviteGroupMember.js
53 lines (42 loc) · 2.13 KB
/
inviteGroupMember.js
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
exports = async function inviteGroupMember(groupId, newMemberEmail) {
if (!groupId)
return { error: { message: 'Please provide which group to invite the member to.' } };
if (!newMemberEmail)
return { error: { message: 'Please provide the email address of the member to invite.' } };
const db = context.services.get('mongodb-atlas').db('findourdevices');
const realmUser = context.user;
groupId = BSON.ObjectId(groupId);
try {
const groupDoc = await db.collection('Group').findOne({ _id: groupId });
if (!groupDoc?._id)
return { error: { message: 'The group does not exist.' } };
// If you only want group owners to be able to invite other members, uncomment the following lines
// if (groupDoc.ownerId.toString() !== realmUser.id)
// return { error: { message: 'Only group owners can invite other members.' } };
const newMemberUserDoc = await db.collection('User').findOne({ email: newMemberEmail });
if (!newMemberUserDoc?._id)
return { error: { message: 'There is no member with the given email.' } };
if (newMemberUserDoc._id.toString() === realmUser.id)
return { error: { message: 'You cannot invite yourself.' } };
const isAlreadyMember = groupDoc.members?.some(member => member.userId.toString() === newMemberUserDoc._id.toString());
if (isAlreadyMember)
return { error: { message: 'The user is already a member of the group.' } };
const isAlreadyInvited = newMemberUserDoc.invitations?.some(invitation => invitation.groupId.toString() === groupId.toString());
if (isAlreadyInvited)
return { error: { message: 'The user has already been invited to the group.' } };
const newGroupInvitation = {
groupId: groupDoc._id,
groupName: groupDoc.name,
senderEmail: realmUser.data.email
};
await db.collection('User').updateOne(
{ _id: newMemberUserDoc._id },
{ $push: { invitations: newGroupInvitation } }
);
return { success: true };
}
catch (err) {
console.error('Error adding group member: ', err.message);
return { error: { message: err.message || 'There was an error adding the group member.' } };
}
};