Ficha do projeto

03 / 03

Motor explicável de recomendação de viagens

Viazio

Escolhe quando e para onde viajar cruzando feriado, clima, custo e distância, e mostra por que cada destino ficou naquela posição em vez de entregar uma nota única. Quando uma fonte externa sai do ar, o ranking continua de pé e diz o que faltou.

O Viazio compara janelas e destinos a partir de clima, custo, distância e calendário. A resposta separa nota, cobertura e confiança para continuar útil quando um provedor falha, sem fingir que dados ausentes têm a mesma qualidade dos dados observados.

Período
03.2026 · 07.2026
Minha atuação
Arquitetura do motor de recomendação, integrações externas, persistência, API Spring Boot e frontend React.
Tecnologia
Java 21 · Spring Boot · React 19 · PostgreSQL · Resilience4j
Estado
Versão publicada
Logotipo horizontal do Viazio em dourado e branco sobre azul-marinho quadriculado
Marca do Viazio, aplicada ao produto que compara destinos e expõe a composição do ranking.

CÍRCULO

Ordenar destinos com dados incompletos

Clima, câmbio, feriados, indicadores econômicos e conteúdo editorial têm validades e falhas diferentes. Bloquear a requisição até todos responderem deixa o ranking lento; preencher a ausência com zero pune o destino por um problema do provedor.

SETOR

Como o ranking degrada

  1. Score e cobertura separados

    Quatro estratégias calculam clima, custo, distância e festividades. Quando um critério falta, os pesos disponíveis são renormalizados e a cobertura reduz a confiança final sem inventar uma nota.

  2. Falha isolada por provedor

    Retry, circuit breaker e bulkhead têm estados independentes. Uma indisponibilidade da Wikipédia remove o conteúdo editorial, mas não abre o circuito de clima, feriados ou Banco Mundial.

  3. PostgreSQL antes da rede

    Leituras usam dados persistidos com fetched_at, stale_at e expires_at. Um miss recebe no máximo dois segundos de busca síncrona; depois disso, a resposta degrada e o refresh entra na fila.

  4. Concorrência limitada por candidato

    Candidatos são avaliados em virtual threads, enquanto a fila de atualização usa prioridade e ShedLock. A falha de um candidato não interrompe a ordenação dos demais.

MARCA

Evidência executável

  • 250 testes no backend e 17 testes unitários no frontend
  • Cinco provedores remotos com cache, proteção e comportamento de falha documentados separadamente
  • Fila de refresh persistida para dados ausentes, vencidos ou com baixa confiança
  • Aplicação pública sem cadastro, com API versionada e repositório aberto

SÚMULA