Durante il test di un sito che utilizzava Prisma ho avuto la necessità di svuotare il database di tanto in tanto, per cancellare i dati di test che avevo inserito.
Puoi cancellare gli elementi inseriti utilizzando:
await prisma.user.deleteMany({})
Se per qualche motivo desideri eseguire un'iterazione sugli elementi per eseguire alcune elaborazioni, puoi scorrere su di essi in questo modo:
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()
In questo caso non sto facendo altro rispetto all'esempio precedente, il che rende tutto questo codice ridondante, ma puoi fare tutto ciò che vuoi all'interno di deleteUser()
.
Ho avuto un problema però perché avevo una relazione tra 2 tabelle, tweet e utenti. Un tweet è stato associato a un utente. Prima ho dovuto rimuovere tutti i tweet, quindi rimuovere tutti gli utenti, quindi ho scritto questa funzione:
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()
}
Nota l'uso di Promise.all()
per avvolgere users.map()
quindi potrei usare await
su di esso, quindi tutti i tweet vengono rimossi prima che inizi a eliminare gli utenti.