MCPcopy Create free account
hub / github.com/async-labs/async / revokeInvitation

Method revokeInvitation

api/server/models/User.ts:927–977  ·  view source on GitHub ↗
({ revokedInvitationEmail, teamId })

Source from the content-addressed store, hash-verified

925
926 // works
927 public static async revokeInvitation({ revokedInvitationEmail, teamId }) {
928 if (!revokedInvitationEmail || !teamId) {
929 throw new Error('Bad data');
930 }
931
932 const teamMember = await this.findOne({ email: revokedInvitationEmail }).setOptions({
933 lean: true,
934 });
935
936 const team = teamMember.teamsForTeamMember.find((team) => {
937 return team.teamId === teamId;
938 });
939
940 // update Team Leader
941 await this.updateOne(
942 { 'teamsForTeamLeader.teamId': teamId },
943 { $pull: { 'teamsForTeamLeader.$.idsOfTeamMembers': teamMember._id.toString() } },
944 { runValidators: true },
945 );
946
947 // update Team Member
948 await this.updateOne(
949 { email: revokedInvitationEmail },
950 { $pull: { teamsForTeamMember: team } },
951 { runValidators: true },
952 );
953
954 const teamLeader = await this.findOne({ 'teamsForTeamLeader.teamId': teamId }).setOptions({
955 lean: true,
956 });
957
958 const template = await getEmailTemplate('revoked-invitation', {
959 teamLeaderEmail: teamLeader.email,
960 teamName: team.teamName,
961 revokedInvitationEmail,
962 });
963
964 try {
965 await sendEmail({
966 from: `From <${process.env.FROM_EMAIL_ADDRESS}>`,
967 to: [revokedInvitationEmail],
968 cc: [teamLeader.email],
969 subject: template.subject,
970 body: template.message,
971 });
972 } catch (err) {
973 logger.error('Email sending error:', err);
974 }
975
976 return teamMember._id.toString();
977 }
978
979 // test
980 public static async removeTeamMember({ removedUserEmail, teamId }) {

Callers

nothing calls this directly

Calls 2

getEmailTemplateFunction · 0.85
sendEmailFunction · 0.85

Tested by

no test coverage detected