From 9bf534adce211dedf914507d1fdd48fbf424111a Mon Sep 17 00:00:00 2001 From: Methapon2001 <61303214+Methapon2001@users.noreply.github.com> Date: Wed, 5 Mar 2025 17:18:25 +0700 Subject: [PATCH] feat: add delete notification --- prisma/schema.prisma | 6 ++-- src/controllers/00-notification-controller.ts | 34 +++++++++++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 520410c..71d3b60 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -29,7 +29,8 @@ model Notification { createdAt DateTime @default(now()) - readByUser User[] + readByUser User[] @relation(name: "NotificationRead") + deleteByUser User[] @relation(name: "NotificationDelete") } model NotificationGroup { @@ -484,7 +485,8 @@ model User { invoiceCreated Invoice[] paymentCreated Payment[] notificationReceive Notification[] @relation("NotificationReceiver") - notificationRead Notification[] + notificationRead Notification[] @relation("NotificationRead") + notificationDelete Notification[] @relation("NotificationDelete") taskOrderCreated TaskOrder[] @relation("TaskOrderCreatedByUser") creditNoteCreated CreditNote[] @relation("CreditNoteCreatedByUser") diff --git a/src/controllers/00-notification-controller.ts b/src/controllers/00-notification-controller.ts index d9b90c0..6b49a76 100644 --- a/src/controllers/00-notification-controller.ts +++ b/src/controllers/00-notification-controller.ts @@ -135,11 +135,39 @@ export class NotificationController extends Controller { ); } + @Delete() + @Security("keycloak") + async deleteNotificationMany(@Request() req: RequestWithUser, @Body() notificationId: string[]) { + if (!notificationId.length) return; + + return await prisma.notification + .findMany({ where: { id: { in: notificationId } } }) + .then(async (v) => { + await prisma.$transaction( + v.map((v) => + prisma.notification.update({ + where: { id: v.id }, + data: { + deleteByUser: { connect: { id: req.user.sub } }, + }, + }), + ), + ); + }); + } + @Delete("{notificationId}") @Security("keycloak") async deleteNotification(@Request() req: RequestWithUser, @Path() notificationId: string) { - const record = await prisma.notification.deleteMany({ where: { id: notificationId } }); - if (record.count === 0) throw notFoundError("Notification"); - return record; + const record = await prisma.notification.findFirst({ where: { id: notificationId } }); + if (!record) throw notFoundError("Notification"); + return await prisma.notification.update({ + where: { id: notificationId }, + data: { + deleteByUser: { + disconnect: { id: req.user.sub }, + }, + }, + }); } }