Database
 sql >> Base de données >  >> RDS >> Database

Prisma, comment effacer la base de données

Lors du test d'un site qui utilisait Prisma, j'ai eu besoin d'effacer la base de données de temps en temps, pour effacer les données de test que j'ai saisies.

Vous pouvez effacer les éléments saisis en utilisant :

await prisma.user.deleteMany({})

Si, pour une raison quelconque, vous souhaitez itérer sur les éléments pour effectuer un traitement, vous pouvez les itérer de la manière suivante :

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()

Dans ce cas, je ne fais rien de plus que l'exemple précédent, ce qui rend tout ce code redondant, mais vous pouvez faire tout ce que vous voulez dans deleteUser() .

J'ai eu un problème cependant car j'avais une relation entre 2 tables, tweets et utilisateurs. Un tweet a été associé à un utilisateur. J'ai d'abord dû supprimer tous les tweets, puis supprimer tous les utilisateurs, j'ai donc écrit cette fonction :

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()
}

Remarquez l'utilisation de Promise.all() pour envelopper users.map() donc je pourrais utiliser await dessus, donc tous les tweets sont supprimés avant que je ne commence à supprimer des utilisateurs.