Ao testar um site que usava Prisma, tive a necessidade de limpar o banco de dados de tempos em tempos, para limpar os dados de teste que inseri.
Você pode limpar os itens inseridos usando:
await prisma.user.deleteMany({})
Se por algum motivo você quiser iterar nos itens para fazer algum processamento, você pode iterar sobre eles desta maneira:
const users = await prisma.user.findMany({})
const deleteUser = async (user) => {
return await prisma.user.delete({
where: { id: user.id }
})
}
const deleteUsers = async () => {
users.map((user) => deleteUser(user))
}
deleteUsers()
Neste caso, não estou fazendo nada além do exemplo anterior, o que torna todo esse código redundante, mas você pode fazer o que quiser dentro de
deleteUser()
. Eu tive um problema porque eu tinha uma relação entre 2 tabelas, tweets e usuários. Um tweet foi associado a um usuário. Primeiro eu tive que remover todos os tweets, depois remover todos os usuários, então escrevi esta função:
export const clearData = async (prisma) => {
const users = await prisma.user.findMany({})
const tweets = await prisma.tweet.findMany({})
const deleteUser = async (user) => {
return await prisma.user.delete({
where: { id: user.id }
})
}
const deleteTweet = async (tweet) => {
return await prisma.tweet.delete({
where: { id: tweet.id }
})
}
const deleteTweets = async () => {
return Promise.all(tweets.map((tweet) => deleteTweet(tweet)))
}
const deleteUsers = async () => {
return Promise.all(users.map((user) => deleteUser(user)))
}
await deleteTweets()
await deleteUsers()
}
Observe o uso de
Promise.all()
para envolver users.map()
para que eu pudesse usar await
nele, para que todos os tweets sejam removidos antes de eu começar a excluir usuários.