import type { PrismaClient } from "@prisma/client"; function middleware(prisma: PrismaClient) { /***********************************/ /* SOFT DELETE MIDDLEWARE */ /***********************************/ prisma.$use(async (params, next) => { // Check incoming query type if (params.model === "BookingReference") { if (params.action === "delete") { // Delete queries // Change action to an update params.action = "update"; params.args["data"] = { deleted: true }; } 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 }; } } if (params.action === "findUnique") { // Change to findFirst - you cannot filter // by anything except ID / unique with findUnique params.action = "findFirst"; // Add 'deleted' filter // ID filter maintained params.args.where["deleted"] = null; } if (params.action === "findMany" || params.action === "findFirst") { // Find many queries if (params.args.where !== undefined) { if (params.args.where.deleted === undefined) { // Exclude deleted records if they have not been explicitly requested params.args.where["deleted"] = null; } } else { params.args["where"] = { deleted: null }; } } } return next(params); }); } export default middleware;