Database
 sql >> Base de Dados >  >> RDS >> Database

Prisma, como limpar o banco de dados


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.