feat(team): add team settings with edit, leave, and kick functionality

This commit is contained in:
2026-07-31 01:48:31 +02:00
parent e664cf3b96
commit de0eaee521
10 changed files with 579 additions and 9 deletions
@@ -0,0 +1,58 @@
import { useValidatedParams, z, zh } from 'h3-zod';
import prisma from '~~/lib/prisma';
export default defineEventHandler(async (event) => {
const user = await requireUserSession(event);
const userId = user.user.id;
const { huntId } = await useValidatedParams(
event,
z.object({
huntId: zh.numAsString
})
);
// Find the team the user is a member of (but not the owner)
const membership = await prisma.teamMember.findFirst({
where: {
memberId: userId,
team: {
huntId,
ownerId: {
not: userId
}
}
},
select: {
memberId: true,
teamId: true
}
});
if (!membership) {
// Either the user has no team in this hunt, or they are the owner.
// Owners cannot leave their own team (they must delete it instead).
const isOwner = await prisma.huntTeam.findFirst({
where: {
huntId,
ownerId: userId
},
select: {
id: true
}
});
throw createError({
status: isOwner ? 403 : 404,
statusText: isOwner ? 'Owner cannot leave the team!' : 'Not found!'
});
}
await prisma.teamMember.delete({
where: {
memberId_teamId: membership
}
});
return { success: true };
});