Rollen-Fix
All checks were successful
CI / Build (push) Successful in 1m21s
CI / Deploy (push) Successful in 53s

This commit is contained in:
Jan
2026-04-13 23:44:46 +02:00
parent 6acc2852d8
commit dfdff6bf99
3 changed files with 146 additions and 15 deletions

View File

@@ -21,6 +21,33 @@ const updateUserSchema = z.object({
approvalPermissions: z.array(approvalPermissionSchema).default([])
});
function serializeManagedUser(user: {
id: string;
name: string;
username: string;
role: "ADMIN" | "FINANCE" | "MEMBER";
workingGroupId: string | null;
workingGroup: { name: string } | null;
approvalPreference: "CHAIR_A" | "CHAIR_B" | "FINANCE" | null;
approvalPermissions: ("CHAIR_A" | "CHAIR_B" | "FINANCE")[];
_count: {
createdExpenses: number;
approvals: number;
};
}) {
return {
id: user.id,
name: user.username,
username: user.username,
role: user.role,
workingGroupId: user.workingGroupId,
workingGroupName: user.workingGroup?.name ?? null,
approvalPermissions: normalizeApprovalPermissions(user.role, user.approvalPermissions, user.approvalPreference),
createdExpensesCount: user._count.createdExpenses,
approvalsCount: user._count.approvals
};
}
type Context = {
params: {
id: string;
@@ -91,7 +118,26 @@ export async function PATCH(request: Request, { params }: Context) {
role: parsed.data.role,
workingGroupId,
approvalPreference,
approvalPermissions
approvalPermissions: {
set: approvalPermissions
}
}
});
const refreshedUser = await prisma.user.findUniqueOrThrow({
where: { id: updatedUser.id },
include: {
workingGroup: {
select: {
name: true
}
},
_count: {
select: {
approvals: true,
createdExpenses: true
}
}
}
});
@@ -113,7 +159,7 @@ export async function PATCH(request: Request, { params }: Context) {
}
});
return NextResponse.json({ ok: true });
return NextResponse.json({ user: serializeManagedUser(refreshedUser) });
}
export async function DELETE(_: Request, { params }: Context) {