2.2 KiB
2.2 KiB
Etapa 08 — Integração do frontend com a API
Objetivo
Substituir os dados mockados da etapa 07 por integração real com a API REST do backend (etapa 06).
Tarefas
- Criar
lib/api.tscom cliente HTTP configurado (axios ou fetch wrapper), incluindo injeção automática do token JWT nas requisições - Implementar autenticação real:
LoginPagechamaPOST /auth/login, armazena token (ex: em memória + refresh via contexto React, evitar localStorage para o token se possível por segurança) - Integrar
NovaBuscaPage:- Formulário (React Hook Form + Zod) envia
POST /buscas - Após criar, redirecionar para
BuscasPagemostrando a busca recém-criada com statuspendente
- Formulário (React Hook Form + Zod) envia
- Integrar
BuscasPage:GET /buscascom paginação- Polling (TanStack Query com
refetchInterval) para atualizar status das buscaspendente/em_execucaoautomaticamente até viraremconcluida/erro
- Integrar
LeadsPage:GET /leadscom os filtros (ramo, cidade/UF, status, busca de origem) refletidos na URL (query params) para permitir compartilhar/voltar filtros- Botão de exportação chamando
GET /leads/exporte disparando download do CSV - Ação de atualizar status do lead via
PATCH /leads/{id}/status
- Integrar
CuradoriaRamosPage:GET /leads/sem-ramo- Ação para vincular a um ramo existente ou criar novo ramo com alias, chamando os endpoints de
RamoController
- Integrar
DashboardPagecom dados agregados reais (pode exigir um endpoint adicional simples no backend para contagens, se não existir ainda — registrar essa necessidade emPROGRESSO.mdcaso apareça) - Tratar estados de loading/erro em todas as páginas (skeleton states, mensagens de erro amigáveis)
Critérios de aceite
- Login real funcional, com logout e expiração de sessão tratados
- Criar busca pelo frontend resulta em leads aparecendo em
LeadsPagesem necessidade de reload manual (polling funcionando) - Filtros de
LeadsPagerefletidos na URL e persistentes ao navegar - Exportação CSV funcional a partir do frontend
- Curadoria de ramos funcional de ponta a ponta
- Estados de loading/erro tratados em todas as integrações