Prisma: Criando e Executando um Seed
prisma
Ao desenvolver uma aplicação, especialmente durante a fase de desenvolvimento e testes, é essencial ter um banco de dados pré-populado com dados iniciais. Isso facilita a criação, teste e validação das funcionalidades da aplicação sem a necessidade de inserir dados manualmente toda vez. Neste artigo, vamos explorar como criar e executar um seed para pré-popular um banco de dados usando Prisma.

O que é um Seed?

Um seed é um script que insere dados predefinidos no banco de dados. Esses dados iniciais são úteis para desenvolvedores, pois permitem testar funcionalidades da API e garantir que não estão trabalhando com um banco de dados vazio. Com dados iniciais, é possível simular cenários reais de uso e verificar o comportamento da aplicação de forma mais eficaz.

Passo a Passo para Criar e Executar um Seed com Prisma

1. Criar o Arquivo de Seed

Primeiramente, crie um arquivo seed.ts dentro do diretório prisma (ou em qualquer outro local de sua preferência). Este arquivo conterá a lógica necessária para inserir dados no banco de dados.

2. Estrutura Básica do Seed

No arquivo seed.ts, configure uma função que será responsável por inserir os dados iniciais e garantir que a conexão com o banco de dados seja encerrada corretamente após a execução.
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function seed() { // Código para inserir dados iniciais console.log('Database seeded'); await prisma.$disconnect(); } seed().catch(e => { console.error(e); prisma.$disconnect(); process.exit(1); });

3. Inserindo Dados Iniciais

Dentro da função seed, utilize o Prisma para criar registros no banco de dados. Aqui está um exemplo de como criar um evento:
async function seed() { await prisma.event.create({ data: { id: 'unique-id-12345', // ID fixo para o evento title: 'Unite Summit', slug: 'unite-summit', details: 'Evento para apaixonados por código', maximumAttendees: 120 } }); console.log('Database seeded'); await prisma.$disconnect(); }
Usar um ID fixo garante que o evento criado sempre terá o mesmo ID, facilitando a referência a esse evento em outras partes da aplicação.

4. Configurar Cascade Delete (Opcional)

Se o seu modelo de dados possui relacionamentos, é importante configurar cascading deletes para evitar erros ao deletar registros relacionados. No arquivo schema.prisma, configure as relações para que os registros filhos sejam deletados automaticamente quando o registro pai for deletado.
model Event { id String @id @default(uuid()) title String slug String details String maximumAttendees Int participants Participant[] @relation("EventParticipants", onDelete: Cascade) } model Participant { id String @id @default(uuid()) eventId String event Event @relation(fields: [eventId], references: [id], onDelete: Cascade) }
Após ajustar o modelo, execute uma migração para aplicar as mudanças:
npx prisma migrate dev --name add-cascades

5. Adicionar Script de Seed no package.json

Para facilitar a execução do seed, adicione um comando de seed no arquivo package.json:
"prisma": { "seed": "tsx prisma/seed.ts" }

6. Executar o Seed

Execute o seed usando o comando:
npx prisma db seed
No terminal, você verá as queries executadas e uma mensagem confirmando que o banco de dados foi seeded com sucesso.

7. Verificar os Dados

Para verificar se os dados foram inseridos corretamente, você pode usar o Prisma Studio:
npx prisma studio
Isso abrirá uma interface gráfica onde você poderá visualizar os registros no banco de dados.
 
Utilizar seeds é uma prática recomendada para garantir que seu ambiente de desenvolvimento tenha dados consistentes para teste. A configuração de cascading deletes deve ser usada com cuidado, considerando o impacto na performance e nas regras de negócio do seu sistema. A seguir, temos o exemplo completo do arquivo seed.ts e do modelo schema.prisma com as configurações necessárias.

Exemplo Completo do Arquivo seed.ts:

import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function seed() { await prisma.event.create({ data: { id: 'unique-id-12345', title: 'Unite Summit', slug: 'unite-summit', details: 'Evento para apaixonados por código', maximumAttendees: 120 } }); console.log('Database seeded'); await prisma.$disconnect(); } seed().catch(e => { console.error(e); prisma.$disconnect(); process.exit(1); });

Exemplo Completo do Arquivo schema.prisma com Cascading Deletes:

model Event { id String @id @default(uuid()) title String slug String details String maximumAttendees Int participants Participant[] @relation("EventParticipants", onDelete: Cascade) } model Participant { id String @id @default(uuid()) eventId String event Event @relation(fields: [eventId], references: [id], onDelete: Cascade) }

Comando para Executar o Seed:

npx prisma db seed
Essa abordagem garante que você tenha um banco de dados inicializado com dados úteis para desenvolvimento e testes, melhorando a eficiência do processo de desenvolvimento.
 
Video preview

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA