REFACTOR: Adiciona retry nas tentativas para consultar a API do viaCEP

This commit is contained in:
tulioperdigao 2025-10-23 15:51:12 -03:00
parent 029bc88e3b
commit 74b3cb02a4

22
app.js
View File

@ -22,15 +22,31 @@ function createApp() {
const { cep: rawCep, numero: rawNumero } = req.query;
if (!rawCep) return res.status(400).json({ error: "cep é obrigatório" });
const cep = String(rawCep).trim().replace(/\D/g, "");
if (cep.length !== 8) return res.status(400).json({ error: "cep inválido, tente digitar apenas números" });
if (cep.length !== 8) return res.status(400).json({ error: "cep inválido, verifique se foram digitados apenas números" });
const numero = rawNumero ? String(rawNumero).trim() : "";
try {
const viaCepData = await fetchJson(
`https://viacep.com.br/ws/${cep}/json/`
);
if (!viaCepData || viaCepData.erro)
return res.status(404).json({ error: "CEP não encontrado" });
// adicionar retry na consulta api ViaCEP
if (!viaCepData || viaCepData.erro) {
console.info(`[INFO] Primeira tentativa da API ViaCEP falhou para o CEP ${cep}, tentando novamente...`);
const attempt = 0;
const maxAttempts = 3;
let viaCepData = null;
while (attempt < maxAttempts) {
viaCepData = await fetchJson(
`https://viacep.com.br/ws/${cep}/json/`
);
if (viaCepData && !viaCepData.erro) break;
console.info(`[INFO] Tentativa ${attempt + 1} da API ViaCEP`);
attempt++;
}
if (!viaCepData || viaCepData.erro) {
return res.status(404).json({ error: "CEP não encontrado" });
}
}
const logradouro = viaCepData.logradouro || "";
const bairro = viaCepData.bairro || "";
const cidade = viaCepData.localidade || "";