66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
const axios = require('axios');
|
|
const fs = require('fs');
|
|
const readline = require('readline');
|
|
const { apiConfig, apiViabilidadeUrl, apiUrlBase } = require('../config/apiConfig');
|
|
|
|
const DEFAULT_TIMEOUT = (apiConfig && apiConfig.timeoutMs) || 10000;
|
|
|
|
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: DEFAULT_TIMEOUT,
|
|
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 }; |