REFACTOR: Melhorada a lógica de filtro de pastas no GeoGrid

- Prioriza registros com siglas autorizadas no .env, retornando "Sothis"
- Se não houver autorizado, busca parceiros e retorna com sigla normal
- Se não encontrar nenhum, retorna "Nenhum provedor disponível"
- Código mais legível e explícito com filtros separados

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Gabriel Amancio 2026-06-03 15:11:59 -03:00
parent 2d6cc6daf1
commit 7409bfcded

View File

@ -33,29 +33,34 @@ const consultaViabilidade = async (lat, lon) => {
} }
}); });
// Extrai o primeiro registro da resposta em que a pasta.sigla seja "São Bernardo do Campo - SP", "São Paulo - SP", "Barueri - São Paulo" e "TMC" descartar os demais // Extrai o primeiro registro da resposta em que a pasta.sigla seja igual as siglas autorizadas no .env
const registros = response.data && response.data.registros; const registros = response.data && response.data.registros;
const registrosFiltrados = registros.filter(r => { // Filtra registros autorizados (ex: SOTHIS, VIVO, OI)
const registros_autorizados = registros.filter(r => {
const sigla = r.pasta && r.pasta.sigla; const sigla = r.pasta && r.pasta.sigla;
const isAuthorized = apiConfig.geogridAuthorizedSiglasPastas.includes(sigla); return apiConfig.geogridAuthorizedSiglasPastas.includes(sigla);
const isParceiro = sigla && (sigla.toLowerCase().includes("- parceiro") || sigla.toLowerCase().includes("parceiros - outros"));
return isAuthorized || isParceiro;
}); });
const primeiro = registrosFiltrados[0]; // Se encontrar autorizado, retorna com sigla "Sothis"
if (registros_autorizados.length > 0) {
if (primeiro && primeiro.pasta && primeiro.pasta.sigla && apiConfig.geogridAuthorizedSiglasPastas.includes(primeiro.pasta.sigla)) { const resultado = registros_autorizados[0];
primeiro.pasta.sigla = "Sothis"; resultado.pasta.sigla = "Sothis";
return { data: resultado };
} }
if (!primeiro || !primeiro.pasta || !primeiro.pasta.sigla) { // Se não encontrar autorizado, tenta buscar parceiro
// Retorna um objeto padrão se não houver dados válidos const registros_parceiros = registros.filter(r => {
return { data: { pasta: { sigla: "Nenhum provedor disponível" } } }; const sigla = r.pasta && r.pasta.sigla;
return sigla && (sigla.toLowerCase().includes("- parceiro") || sigla.toLowerCase().includes("parceiros - outros"));
});
if (registros_parceiros.length > 0) {
return { data: registros_parceiros[0] };
} }
// Retorna no formato esperado pelo controller (viabilidade.data.distancia) // Se não encontrar autorizado nem parceiro, retorna mensagem padrão
return { data: primeiro }; return { data: { pasta: { sigla: "Nenhum provedor disponível" } } };
} catch (error) { } catch (error) {
logger.error("Erro ao consultar viabilidade no GeoGrid", { message: error.message, stack: error.stack, lat, lon }); logger.error("Erro ao consultar viabilidade no GeoGrid", { message: error.message, stack: error.stack, lat, lon });
throw new Error("Erro ao consultar viabilidade"); throw new Error("Erro ao consultar viabilidade");