Construindo Features
Cenários reais para construir novas funcionalidades.
Módulo CRUD
Objetivo: Criar um módulo completo de produtos com listagem, criação, edição e exclusão.
Comando:
Create a products module with CRUD for /api/productsO que acontece:
- Cria a estrutura de pastas
- Gera os tipos TypeScript
- Cria o serviço de API
- Constrói o adapter de dados
- Cria os componentes de listagem e formulário
- Adiciona testes
Resultado:
src/modules/products/
├── types/
│ ├── products.types.ts # API response types
│ └── products.contracts.ts # App interfaces
├── services/
│ └── products-service.ts # HTTP calls
├── adapters/
│ └── products-adapter.ts # Data transformation
├── components/
│ ├── ProductList.tsx # List view
│ ├── ProductForm.tsx # Create/Edit form
│ └── ProductCard.tsx # Item display
├── hooks/
│ ├── useProducts.ts # List query
│ └── useProductMutations.ts # Create/Update/Delete
└── __tests__/
└── products-adapter.test.tsEndpoint de API
Objetivo: Adicionar um novo endpoint para buscar pedidos de um usuário.
Comando:
Create a service for GET /api/users/:id/orders with paginationO que acontece:
- Cria os tipos correspondentes à resposta da API
- Cria o serviço com a chamada HTTP
- Cria o adapter para transformação de dados
- Cria o hook/composable para uso simplificado
Resultado:
typescript
// services/user-orders-service.ts
export const userOrdersService = {
list(userId: string, params: { page: number; limit: number }) {
return api.get(`/api/users/${userId}/orders`, { params })
}
}
// hooks/useUserOrders.ts
export function useUserOrders(userId: string) {
return useQuery({
queryKey: ['users', userId, 'orders'],
queryFn: () => userOrdersService.list(userId, { page: 1, limit: 20 })
})
}Formulário com Validação
Objetivo: Criar um formulário de cadastro com validação de e-mail e senha.
Comando:
Create a registration form with email, password, and confirm password fieldsO que acontece:
- Cria o schema de validação com Zod
- Cria o componente de formulário com os campos
- Adiciona exibição de erros por campo
- Conecta à mutation de cadastro
- Trata os estados de carregamento e sucesso
Resultado:
typescript
// schemas/registration.schema.ts
export const registrationSchema = z.object({
email: z.string().email('Invalid email'),
password: z.string().min(8, 'At least 8 characters'),
confirmPassword: z.string()
}).refine(data => data.password === data.confirmPassword, {
message: 'Passwords must match',
path: ['confirmPassword']
})O formulário trata:
- Validação em tempo real
- Mensagens de erro por campo
- Estado de carregamento no envio
- Redirecionamento após sucesso
Paginação e Filtros
Objetivo: Adicionar paginação e filtro por status à listagem de pedidos.
Comando:
Add pagination and status filter to the orders listO que acontece:
- Atualiza o hook de query para aceitar parâmetros de página e filtro
- Cria o componente de filtro
- Cria o componente de paginação
- Conecta tudo na view
Resultado:
typescript
// Using the list
const { orders, totalPages, isLoading } = useOrders({
page: currentPage,
status: selectedStatus,
limit: 20
})
// Filter changes reset to page 1
function onStatusChange(status: string) {
setStatus(status)
setPage(1)
}Dicas Rápidas
Seja Específico
Bom:
Create a products module with CRUD for GET/POST/PATCH/DELETE /api/v2/productsMelhor:
Create a products module:
- List with pagination (20 per page)
- Create form with name, price, description, category
- Edit form (same fields)
- Delete with confirmation
- Filter by category
- Sort by name or priceConstrução Incremental
Comece pequeno e adicione funcionalidades:
1. "Create products types and service for /api/products"
2. "Add the products list component"
3. "Add create product form"
4. "Add edit functionality"
5. "Add delete with confirmation"Teste Conforme Avança
"Create tests for the products adapter"
"Create tests for the products list component"Cenários Relacionados
- Revisão de Código — Revisar o código que você construiu
- Depurar Problemas — Quando algo não funciona
- Design de API — Projetar o backend primeiro