Domine validação de dados com Zod: schemas avançados, transformações, mensagens customizadas e validação condicional.
Segurança: Dados inválidos podem quebrar a aplicação ou causar vulnerabilidades.
Confiabilidade: Validação garante que apenas dados corretos sejam processados.
// 📁 schemas/user.ts
import { z } from 'zod';
// 🎯 Schema base do usuário
const userSchema = z.object({
name: z.string()
.min(2, 'Nome deve ter pelo menos 2 caracteres')
.max(50, 'Nome não pode ter mais de 50 caracteres'),
email: z.string()
.email('Email inválido')
.toLowerCase()
.transform(email => email.trim()),
age: z.number()
.min(18, 'Idade mínima é 18 anos')
.max(120, 'Idade máxima é 120 anos')
.optional(),
password: z.string()
.min(8, 'Senha deve ter pelo menos 8 caracteres')
.regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/,
'Senha deve conter ao menos: 1 minúscula, 1 maiúscula, 1 número'),
role: z.enum(['user', 'admin', 'moderator'])
.default('user'),
preferences: z.object({
theme: z.enum(['light', 'dark']).default('dark'),
notifications: z.boolean().default(true),
language: z.string().default('pt-BR')
}).optional()
});
// 🔄 Schema para atualização (todos campos opcionais)
export const updateUserSchema = userSchema.partial();
// 📝 Schema para criação
export const createUserSchema = userSchema.omit({ id: true });
Confira o exemplo interativo desta aula rodando em tempo real:
Acesse: /curso-trpc/modulo-1/aula-4/live-mode