diff --git a/src/modules/userManagement/actions/deleteUser.ts b/src/modules/userManagement/actions/deleteUser.ts index 0f8f150..d520456 100644 --- a/src/modules/userManagement/actions/deleteUser.ts +++ b/src/modules/userManagement/actions/deleteUser.ts @@ -1,23 +1,37 @@ "use server"; import prisma from "@/db"; +import getCurrentUser from "@/modules/auth/utils/getCurrentUser"; import checkPermission from "@/modules/dashboard/services/checkPermission"; import ServerResponseAction from "@/modules/dashboard/types/ServerResponseAction"; import handleCatch from "@/modules/dashboard/utils/handleCatch"; import notFound from "@/modules/dashboard/utils/notFound"; import unauthorized from "@/modules/dashboard/utils/unauthorized"; import { revalidatePath } from "next/cache"; +import UserManagementError from "../errors/UserManagementError"; export default async function deleteUser( id: string ): Promise { try { - if (!(await checkPermission("users.delete"))) return unauthorized(); + const currentUser = await getCurrentUser(); + + if (!(await checkPermission("users.delete")) || !currentUser) + return unauthorized(); + + //prevents self delete + if (currentUser.id === id) { + throw new UserManagementError({ + errorCode: "CANNOT_DELETE_SELF", + message: "You cannot delete yourself", + }); + } + const user = await prisma.user.delete({ where: { id }, }); - if (!user) notFound({message: "The user does not exists"}); + if (!user) notFound({ message: "The user does not exists" }); revalidatePath("."); diff --git a/src/modules/userManagement/errors/UserManagementError.ts b/src/modules/userManagement/errors/UserManagementError.ts new file mode 100644 index 0000000..269ef27 --- /dev/null +++ b/src/modules/userManagement/errors/UserManagementError.ts @@ -0,0 +1,25 @@ +import DashboardError from "@/modules/dashboard/errors/DashboardError"; + +export const UserManagementErrorCodes = [ + "CANNOT_DELETE_SELF" +] as const; + +interface UserManagementErrorOptions { + message?: string; + errorCode: (typeof UserManagementErrorCodes)[number] | (string & {}); + formErrors?: Record +} + +export default class UserManagementError extends DashboardError { + public readonly errorCode: UserManagementErrorOptions['errorCode']; + public readonly formErrors?: UserManagementErrorOptions['formErrors'] + + constructor(options: UserManagementErrorOptions) { + super({ + errorCode: options.errorCode, + message: options.message, + }); + + this.errorCode = options.errorCode; + } +}