REFACTOR: handleViabilidade refatorado.
- Agora a API do Geogrid faz a viabilidade apenas por caixas. - Retirado rotas iniciais de testes, mantive apenas a /viabilidade.
This commit is contained in:
parent
6ab6b209b6
commit
e2f6915a50
@ -2,18 +2,6 @@ const geogridService = require("../services/geogridService.js");
|
||||
const googleService = require("../services/googleService.js");
|
||||
const cepRestService = require("../services/cepRestService.js");
|
||||
|
||||
function handleViabilidadeNegada(req, res) {
|
||||
// Lógica para lidar com a viabilidade negada
|
||||
res.status(200).json({ message: 'Viabilidade negada processada com sucesso.' });
|
||||
}
|
||||
|
||||
function handleViabilidadeAceita(req, res) {
|
||||
console.log('Recebido viabilidade aceita:', req.body);
|
||||
|
||||
// Lógica para lidar com a viabilidade aceita
|
||||
res.status(200).json({ message: 'Viabilidade aceita' });
|
||||
}
|
||||
|
||||
async function handleViabilidade(req, res) {
|
||||
const rawCep = req.body.cep;
|
||||
const rawNumero = req.body.numero;
|
||||
@ -23,47 +11,55 @@ async function handleViabilidade(req, res) {
|
||||
if (!rawCep) return res.status(400).json({ error: 'cep é obrigatório' });
|
||||
if (!rawNumero) return res.status(400).json({ error: 'número é obrigatório' });
|
||||
|
||||
// Consulta o endereço completo usando o serviço de CEP
|
||||
|
||||
const address = await cepRestService.getConsultaCep(rawCep, rawNumero);
|
||||
|
||||
if (!address) return res.status(404).json({ error: 'Endereço não encontrado para o CEP fornecido' });
|
||||
|
||||
const city = address.data.localidade;
|
||||
const state = address.data.uf;
|
||||
const numero = address.data.numero || rawNumero;
|
||||
const city = address.data[`cep:${rawCep}`].localidade;
|
||||
const state = address.data[`cep:${rawCep}`].uf;
|
||||
const numero = rawNumero;
|
||||
|
||||
const addressString = `${address.data.logradouro}, ${numero}, ${address.data.bairro}, ${city}, ${state}, ${address.data.cep}`;
|
||||
const addressString = `${address.data[`cep:${rawCep}`].logradouro}, ${numero}, ${address.data[`cep:${rawCep}`].bairro}, ${city}, ${state}, ${address.data[`cep:${rawCep}`].cep}`;
|
||||
|
||||
// Obtém as coordenadas usando o serviço do Google
|
||||
|
||||
const coords = await googleService.geocodeWithGoogle(addressString);
|
||||
if (!coords) return res.status(500).json({ error: 'Não foi possível obter as coordenadas do endereço' });
|
||||
|
||||
// Consulta a viabilidade no geogridService
|
||||
|
||||
const viabilidade = await geogridService.consultaViabilidade(coords.lat, coords.lon);
|
||||
|
||||
console.log('Viabilidade retornada:', viabilidade);
|
||||
|
||||
const distancia = viabilidade.data.distancia;
|
||||
|
||||
if (distancia == null) return res.status(500).json({ error: 'Distância não retornada pela consulta de viabilidade' });
|
||||
|
||||
let naoDedicado;
|
||||
let dedicado;
|
||||
|
||||
// lógica de decisão: use if/else (ajuste os limites conforme regra de negócio)
|
||||
if (distancia <= 500) {
|
||||
naoDedicado = true;
|
||||
dedicado = true;
|
||||
} else if (distancia <= 1000) {
|
||||
naoDedicado = true;
|
||||
dedicado = false;
|
||||
} else {
|
||||
// Lógica para determinar os valores de naoDedicado e dedicado com base na distância
|
||||
|
||||
if (viabilidade.data) {
|
||||
const distancia = viabilidade.data.distancia;
|
||||
if (distancia <= 500) {
|
||||
naoDedicado = true;
|
||||
dedicado = true;
|
||||
} else if (distancia <= 1000) {
|
||||
naoDedicado = true;
|
||||
dedicado = false;
|
||||
} else {
|
||||
naoDedicado = false;
|
||||
dedicado = false;
|
||||
} } else {
|
||||
naoDedicado = false;
|
||||
dedicado = false;
|
||||
}
|
||||
|
||||
// Retorna a resposta com os dados necessários
|
||||
|
||||
return res.json({
|
||||
bairro: address.data.bairro,
|
||||
bairro: address.data[`cep:${rawCep}`].bairro,
|
||||
cidade: city,
|
||||
estado: state,
|
||||
logradouro: address.data.logradouro,
|
||||
logradouro: address.data[`cep:${rawCep}`].logradouro,
|
||||
naoDedicado,
|
||||
dedicado,
|
||||
});
|
||||
@ -75,8 +71,6 @@ async function handleViabilidade(req, res) {
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
handleViabilidadeNegada,
|
||||
handleViabilidadeAceita,
|
||||
handleViabilidade,
|
||||
};
|
||||
|
||||
|
||||
@ -2,9 +2,7 @@ const express = require('express');
|
||||
const router = express.Router();
|
||||
const controller = require('../controllers/controller.js');
|
||||
|
||||
//rota de teste
|
||||
router.post('/viabilidade_negada', controller.handleViabilidadeNegada);
|
||||
router.post('/viabilidade_aceita', controller.handleViabilidadeAceita);
|
||||
// Rota para consulta de viabilidade
|
||||
router.post('/viabilidade', controller.handleViabilidade);
|
||||
|
||||
module.exports = router;
|
||||
@ -1,5 +1,7 @@
|
||||
const axios = require("axios");
|
||||
|
||||
// Consulta o endereço completo usando a API externa de CEP
|
||||
|
||||
const getConsultaCep = async (rawCep, rawNumero) => {
|
||||
if (!rawCep) {
|
||||
throw new Error("cep é obrigatório");
|
||||
@ -8,6 +10,9 @@ const getConsultaCep = async (rawCep, rawNumero) => {
|
||||
if (cep.length !== 8) {
|
||||
throw new Error("cep inválido, verifique se foram digitados apenas números");
|
||||
}
|
||||
|
||||
// Número é opcional na consulta, mas se fornecido, deve ser uma string limpa
|
||||
|
||||
const numero = rawNumero ? String(rawNumero).trim() : "";
|
||||
try {
|
||||
const cepRestUrl = 'https://api.cep.rest/';
|
||||
|
||||
@ -10,16 +10,21 @@ const consultaViabilidade = async (lat, lon) => {
|
||||
const apiCookie = apiConfig.geogridApiCookie;
|
||||
|
||||
try {
|
||||
// Monta os parâmetros como arrays para garantir serialização correta
|
||||
// Parâmetros da consulta
|
||||
const params = {
|
||||
raio: 5000,
|
||||
latitude: lat,
|
||||
longitude: lon,
|
||||
itens: ["caixa"],
|
||||
"itens[]": "caixa",
|
||||
ordenarCampos: ["distancia"],
|
||||
ordenarPor: ["asc"]
|
||||
ordenarPor: ["asc"],
|
||||
consultarIndividual: "S"
|
||||
};
|
||||
|
||||
// Console log com curl equivalente para depuração
|
||||
const curlParams = qs.stringify(params, { arrayFormat: 'brackets' });
|
||||
console.log(`CURL equivalente: curl -X GET "${url}?${curlParams}" -H "api-key: ${apiKey}" -H "Cookie: ${apiCookie}"`);
|
||||
|
||||
const response = await axios.get(url, {
|
||||
params,
|
||||
// força a serialização do tipo `itens[]=caixa`
|
||||
|
||||
@ -2,7 +2,8 @@ const apiConfig = require("../config/apiConfig.js")
|
||||
const axios = require("axios");
|
||||
|
||||
|
||||
// Geocode using Google Geocoding API. Returns { lat, lon } or null
|
||||
// Geocodifica um endereço usando a API do Google Maps
|
||||
|
||||
async function geocodeWithGoogle(address) {
|
||||
const key = apiConfig.googleApiKey;
|
||||
if (!key) return null;
|
||||
@ -13,12 +14,14 @@ async function geocodeWithGoogle(address) {
|
||||
timeout: 10000,
|
||||
});
|
||||
|
||||
// ensure HTTP 200
|
||||
// Valida a resposta e extrai as coordenadas
|
||||
if (!r || r.status !== 200) {
|
||||
console.warn(`geocodeWithGoogle unexpected status for '${address}': ${r && r.status}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
// Verifica se há resultados válidos
|
||||
|
||||
if (r.data && Array.isArray(r.data.results) && r.data.results.length > 0) {
|
||||
const loc = r.data.results[0].geometry && r.data.results[0].geometry.location;
|
||||
const lat = loc && (loc.lat !== undefined ? Number(loc.lat) : NaN);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user