Fix prevent duplicate team invite (#536)

* check for existing invites

* add success / error toast on invite

* add toast on member / invite removal
This commit is contained in:
Moritz Rengert
2023-07-13 11:58:30 +02:00
committed by GitHub
parent dc6ae088bf
commit dceb8842d3
3 changed files with 20 additions and 4 deletions

View File

@@ -152,10 +152,16 @@ export function EditMemberships({ environmentId }: EditMembershipsProps) {
}
const handleDeleteMember = async () => {
let result = false;
if (activeMember.accepted) {
await removeMember(team.teamId, activeMember.userId);
result = await removeMember(team.teamId, activeMember.userId);
} else {
await deleteInvite(team.teamId, activeMember.inviteId);
result = await deleteInvite(team.teamId, activeMember.inviteId);
}
if (result) {
toast.success("Member removed successfully");
} else {
toast.error("Something went wrong");
}
setDeleteMemberModalOpen(false);
mutateTeam();
@@ -173,7 +179,12 @@ export function EditMemberships({ environmentId }: EditMembershipsProps) {
const handleAddMember = async (data) => {
// TODO: handle http 409 user is already part of the team
await addMember(team.teamId, data);
const add = await addMember(team.teamId, data);
if (add) {
toast.success("Member invited successfully");
} else {
toast.error("Something went wrong");
}
mutateTeam();
};

View File

@@ -78,7 +78,7 @@ export const addMember = async (teamId: string, data: { name: string; email: str
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
return result.status === 200;
return result.status === 201;
} catch (error) {
console.error(error);
return false;

View File

@@ -35,6 +35,11 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse)
let { email, name, role } = req.body;
email = email.toLowerCase();
const existingInvite = await prisma.invite.findFirst({ where: { email, teamId } });
if (existingInvite) {
return res.status(409).json({ message: "Invite already exists" });
}
const user = await prisma.user.findUnique({ where: { email } });
if (user) {