gpt4 book ai didi

nestjs - 如何使用 NestJS 进行 Prisma 软删除?

转载 作者:行者123 更新时间:2023-12-05 03:20:21 27 4
gpt4 key购买 nike

我曾尝试在我的应用程序中实现此方法。但我对 Prisma 没有深入的了解。请举例说明。

最佳答案

您可以编写一个中间件来将问题标记为已删除,而不是实际删除它。

schema.prisma

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

generator client {
provider = "prisma-client-js"
}

model Post {
id Int @id @default(autoincrement())
title String
content String?
user User? @relation(fields: [userId], references: [id])
userId Int?
tags Tag[]
views Int @default(0)
deleted Boolean @default(false)
}

这里将一个名为 deleted 的字段添加到 Post 模型中。

中间件执行以下操作:

  • 拦截 Post 模型的 delete 和 deleteMany 查询
  • 分别将 params.action 更改为 update 和 updateMany
  • 引入数据参数并设置{ deleted: true },保留其他过滤器参数(如果存在)

script.ts


import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient({})

async function main() {
/***********************************/
/* SOFT DELETE MIDDLEWARE */
/***********************************/

prisma.$use(async (params, next) => {
// Check incoming query type
if (params.model == 'Post') {
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 }
}
}
}
return next(params)
})

关于nestjs - 如何使用 NestJS 进行 Prisma 软删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73189707/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com