Validação e Criação de Registros com Prisma e Zod
Quando desenvolvemos aplicações web, a validação dos dados é um passo crucial para garantir a integridade e a consistência das informações que são armazenadas no banco de dados. Durante a leitura desse conteúdo você vai ficar por dentro de como realizar a validação e a inserção de dados utilizando TypeScript, Prisma e a biblioteca de validação Zod.
Beleza, mas por que validar os dados?
A validação dos dados assegura que as informações fornecidas pelos usuários estejam no formato esperado antes de qualquer operação no banco de dados. Sem validação, dados incorretos ou malformados podem causar erros, comportamentos inesperados e até comprometer a segurança da aplicação.
Ferramentas Utilizadas
- TypeScript: Superset de JavaScript que adiciona tipagem estática, proporcionando maior segurança e previsibilidade ao código.
- Prisma: ORM (Object-Relational Mapping) que facilita a interação com o banco de dados de forma tipada e intuitiva.
- Zod: Biblioteca de validação que permite criar esquemas de validação robustos e integrados com TypeScript.
Bora pro código
Instalação das Dependências
Primeiro, vamos instalar as bibliotecas necessárias:
npm install zod prisma
Definindo o Esquema (Schema) do Banco de Dados
Vamos definir o esquema do banco de dados utilizando o Prisma. Suponha que temos um model
Event
no arquivo schema.prisma
:model Event { id Int @id @default(autoincrement()) title String details String? maximumAttendees Int? @map("maximum_attendees") slug String @unique @@map("events") }
Criando o Esquema de Validação com Zod
Utilizaremos o Zod para definir o esquema de validação dos dados:
Validando e Criando o Evento no Banco de Dados
Agora, vamos implementar a rota de criação de evento, validando os dados recebidos antes de inseri-los no banco de dados:
import { PrismaClient } from '@prisma/client' import fastify from 'fastify' import { z } from 'zod' const app = fastify() const prisma = new PrismaClient({ log: [query], }) app.post('/events', async (request, reply) => { const createEventSchema = z.object({ title: z.string().min(4), details: z.string().nullable(), maximumAttendees: z.number().int().positive().nullable(), }) const data = createEventSchema.parse(request.body) await prisma.event.create({ data: { title: data.title, details: data.details, maximumAttendees: data.maximumAttendees, //um improviso slug: new Date().toISOString(), }, }) return reply.status(201).send({ eventId: event.id }) }
Configuração do Prisma
Certifique-se de que o Prisma está configurado corretamente e que você executou a migração para criar a tabela
Event
no banco de dados:npx prisma migrate dev --name init
Testando a Implementação
Para testar a rota de criação de eventos, utilize uma ferramenta como Postman ou Insomnia para enviar uma requisição
POST
para a rota /event
com o seguinte corpo:{ "title": "Meu Evento", "details": "Detalhes do evento", "maximumAttendees": 100 }
Se os dados estiverem corretos, o evento será criado e o ID do evento será retornado na resposta com o status 201 (Created). Caso contrário, um erro de validação será retornado com o status 400 (Bad Request).
A validação de dados é uma prática essencial no desenvolvimento de aplicações robustas e seguras. Utilizando TypeScript, Prisma e Zod, conseguimos criar uma solução eficiente e tipada para validar e inserir registros no banco de dados. Este método não só previne erros e inconsistências, mas também melhora a qualidade do código e a experiência do desenvolvedor.
Com esta abordagem, você pode garantir que suas operações de banco de dados sejam seguras e consistentes, proporcionando uma base sólida para o desenvolvimento de aplicações web escaláveis.
Que tal ver na prática? Vem pro código com o Diego Fernandes 👇