From 030024607310cc80d9a9cb236768763c3d6d9647 Mon Sep 17 00:00:00 2001 From: Jason Petro Date: Sat, 6 Dec 2025 08:14:36 +0000 Subject: [PATCH 1/2] Make project deletion robust against missing records --- src/actions/projects/deleteProject/logic.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/actions/projects/deleteProject/logic.ts b/src/actions/projects/deleteProject/logic.ts index 31d04b7..d0946e4 100644 --- a/src/actions/projects/deleteProject/logic.ts +++ b/src/actions/projects/deleteProject/logic.ts @@ -1,13 +1,19 @@ import 'server-only'; import { prisma } from '@/lib/prisma'; -import { Result, success } from '@/lib/result'; +import { Result, success, err } from '@/lib/result'; import { DeleteProjectInput } from './schema'; export async function deleteProject(input: DeleteProjectInput): Promise> { - await prisma.project.delete({ - where: { id: input.id } - }); - - return success(undefined); + try { + await prisma.$transaction(async (tx) => { + await tx.project.deleteMany({ + where: { id: input.id } + }); + }); + return success(undefined); + } catch (error) { + console.error("Failed to delete project:", error); + return err("Failed to delete project due to an unexpected error."); + } } From d428493ad676184dbd6992dcb84bf79ad4d3df38 Mon Sep 17 00:00:00 2001 From: Jason Petro Date: Sat, 6 Dec 2025 08:44:52 +0000 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20applied=20change=20=E2=80=94=201.?= =?UTF-8?q?=20To=20prevent=20foreign=20key=20constraint=20violations=20and?= =?UTF-8?q?=20ensure=20related=20project=20members=20are=20deleted,=20add?= =?UTF-8?q?=20`onDelete:=20Cascade`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 2 +- src/actions/projects/deleteProject/logic.ts | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index cd7e690..45a2c78 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -58,7 +58,7 @@ model ProjectMember { projectId String userId String role Role @default(USER) - project Project @relation(fields: [projectId], references: [id]) + project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) user User @relation(fields: [userId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/actions/projects/deleteProject/logic.ts b/src/actions/projects/deleteProject/logic.ts index d0946e4..3ce3e01 100644 --- a/src/actions/projects/deleteProject/logic.ts +++ b/src/actions/projects/deleteProject/logic.ts @@ -6,10 +6,8 @@ import { DeleteProjectInput } from './schema'; export async function deleteProject(input: DeleteProjectInput): Promise> { try { - await prisma.$transaction(async (tx) => { - await tx.project.deleteMany({ - where: { id: input.id } - }); + await prisma.project.deleteMany({ + where: { id: input.id } }); return success(undefined); } catch (error) {