viabiliza/service/viabilidadeService.js
gabriel.pereira 3e39b9c36a FIX: Criação de condição para geração de endereço para CEP e para Geolocalização.
- CSVs com CEP e numero não estavam trazendo o endereço.
-Fiz uma condição para tratar o endereço de formas diferentes caso seja CEP e numero e caso seja geolocalização.
2026-01-16 08:05:46 -03:00

65 lines
1.9 KiB
JavaScript

const axios = require('axios');
const fs = require('fs');
const readline = require('readline');
const { apiConfig, apiViabilidadeUrl, apiUrlBase } = require('../config/apiConfig');
async function consultarViabilidade(data) {
try {
const dataType = await discoverDataType(data);
let endpoint = apiUrlBase;
if (dataType === 'geolocalizacao') {
endpoint += 'viabilidade/lat-long';
} else {
endpoint += 'viabilidade';
}
const response = await axios.post(endpoint, data, {
timeout: 10000,
headers: { 'Content-Type': 'application/json' }
});
console.log('Resposta da API de viabilidade:', response.data);
return (response.data);
} catch (error) {
throw error;
}
}
// Preciso de uma função para verificar se os dados vindos são de CEP ou de geolocalização
async function discoverDataType(input) {
if (typeof input === 'string') {
// Trata como filePath
const instream = fs.createReadStream(input, { encoding: 'utf8' });
const rl = readline.createInterface({ input: instream, crlfDelay: Infinity });
let headers = [];
for await (const rawLine of rl) {
const line = rawLine.replace(/\r$/, '');
if (!line.trim()) continue;
headers = line.split(';').map(h => h.trim().toLowerCase());
break;
}
rl.close();
if (headers.includes('cep') && headers.includes('numero')) {
return 'cep';
} else if (headers.includes('latitude') && headers.includes('longitude')) {
return 'geolocalizacao';
} else {
return 'unknown';
}
} else if (typeof input === 'object') {
// Trata como objeto de dados
if (input.cep && input.numero) {
return 'cep';
} else if (input.latitude && input.longitude) {
return 'geolocalizacao';
} else {
return 'unknown';
}
} else {
return 'unknown';
}
}
module.exports = { consultarViabilidade, discoverDataType };