From 2793ca9204220cce132c1a81213eb593fd5ddae5 Mon Sep 17 00:00:00 2001 From: Markus Thielker Date: Sun, 10 Mar 2024 12:38:26 +0100 Subject: [PATCH] N-FIN-5: add entity delete server action --- src/lib/actions/entityDelete.ts | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/lib/actions/entityDelete.ts diff --git a/src/lib/actions/entityDelete.ts b/src/lib/actions/entityDelete.ts new file mode 100644 index 0000000..37ea1bd --- /dev/null +++ b/src/lib/actions/entityDelete.ts @@ -0,0 +1,62 @@ +import { ActionResponse } from '@/lib/types/ActionResponse'; +import { prismaClient } from '@/prisma'; +import { getUser } from '@/auth'; +import { URL_SIGN_IN } from '@/lib/constants'; + +export default async function entityDelete(id: number): Promise { + 'use server'; + + // check that id is a number + if (!id || isNaN(id)) { + return { + type: 'error', + message: 'Invalid entity ID', + }; + } + + // check that user is logged in + const user = await getUser(); + if (!user) { + return { + type: 'error', + message: 'You must be logged in to delete an entity.', + redirect: URL_SIGN_IN, + }; + } + + // check that entity is associated with user + const entity = await prismaClient.entity.findFirst({ + where: { + id: id, + userId: user.id, + }, + }); + if (!entity) { + return { + type: 'error', + message: 'Entity not found', + }; + } + + // delete entity + try { + await prismaClient.entity.delete({ + where: { + id: entity.id, + userId: user.id, + }, + }, + ); + } catch (e) { + return { + type: 'error', + message: 'Failed deleting entity', + }; + } + + // return success + return { + type: 'success', + message: `${entity.type} '${entity.name}' deleted`, + }; +}