import { Prisma, PrismaClient } from "@rallly/database"; export const softDeleteMiddleware = ( prisma: PrismaClient, model: Prisma.ModelName, ) => { prisma.$use(async (params, next) => { // We use middleware to handle soft deletes // See: https://www.prisma.io/docs/concepts/components/prisma-client/middleware/soft-delete-middleware if (params.model === model) { if (params.action === "delete") { // Delete queries // Change action to an update params.action = "update"; params.args["data"] = { deleted: true, deletedAt: new Date() }; } if (params.action == "deleteMany") { // Delete many queries params.action = "updateMany"; if (params.args.data != undefined) { params.args.data["deleted"] = true; } else { params.args["data"] = { deleted: true, deletedAt: new Date() }; } } if (params.action === "findFirst") { // Add 'deleted' filter // ID filter maintained params.args.where["deleted"] = params.args.where["deleted"] || false; } } return next(params); }); };