Database
 sql >> Database >  >> RDS >> Database

Prisma, come cancellare il database

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.