chore: enhance error handling in sendInvite mutation and invalidate email cache on success

This commit is contained in:
Marco Pedone 2026-01-16 11:52:59 +01:00
parent 6890ed64c7
commit f1a323f478
2 changed files with 24 additions and 10 deletions

View file

@ -31,12 +31,16 @@ export const UserViewHeader = () => {
router.reload(); router.reload();
}, },
}); });
const utils = api.useUtils();
const { mutateAsync: sendInvite } = api.invite.sendInvite.useMutation({ const { mutateAsync: sendInvite } = api.invite.sendInvite.useMutation({
onError: (error) => { onError: (error) => {
toast.error(error.message); toast.error(error.message);
}, },
onSuccess: async () => { onSuccess: async () => {
toast.success("Email inviata con successo"); toast.success("Email inviata con successo");
await utils.comunicazioni.getEmails.invalidate({
userId: data?.id || "",
});
}, },
}); });
if (!data) return <div>Errore</div>; if (!data) return <div>Errore</div>;

View file

@ -27,19 +27,29 @@ export const inviteRouter = createTRPCRouter({
}), }),
) )
.mutation(async ({ input }) => { .mutation(async ({ input }) => {
const user = await getUser({ userId: input.id, db }); try {
const token = await createInviteToken(user.email); const user = await getUser({ userId: input.id, db });
const token = await createInviteToken(user.email);
const inviteUrl = `${env.BASE_URL}/auth/accetta-invito/${token}`; const inviteUrl = `${env.BASE_URL}/auth/accetta-invito/${token}`;
await sendInvitoEmail({ await sendInvitoEmail({
userId: input.id, userId: input.id,
email: user.email, email: user.email,
nome: user.nome, nome: user.nome,
inviteUrl, inviteUrl,
}); });
return { success: true }; return { success: true };
} catch (e) {
console.error("Error in sendInvite:", e);
throw new TRPCError({
code: "INTERNAL_SERVER_ERROR",
message:
"Errore durante l'invio dell'invito: " +
(e instanceof Error ? e.message : "Unknown error"),
});
}
}), }),
// Verify invite token (public - user clicking the link) // Verify invite token (public - user clicking the link)