diff --git a/src/modules/contratacao/contratacao.model.js b/src/modules/contratacao/contratacao.model.js index cc8191d..90486cf 100644 --- a/src/modules/contratacao/contratacao.model.js +++ b/src/modules/contratacao/contratacao.model.js @@ -1,6 +1,6 @@ // classe construtor para o modelo de viabilidade class ViabilidadeModel { - constructor(nome, email, telefone, logradouro, numero, bairro, city, state, cep, naoDedicado, dedicado, distancia) { + constructor(nome, email, telefone, logradouro, numero, bairro, city, state, cep, naoDedicado, dedicado, distancia, provedor) { // Inicialização de propriedades do modelo pode ser feita aqui this.nome = nome; this.email = email; @@ -14,16 +14,18 @@ class ViabilidadeModel { this.naoDedicado = naoDedicado; this.dedicado = dedicado; this.distancia = distancia; + this.provedor = provedor; } } class ViabilidadeReverseGeocodeModel { - constructor(endereco, naoDedicado, dedicado, distancia) { + constructor(endereco, naoDedicado, dedicado, distancia, provedor) { // Inicialização de propriedades do modelo pode ser feita aqui this.endereco = endereco; this.naoDedicado = naoDedicado; this.dedicado = dedicado; this.distancia = distancia; + this.provedor = provedor; } } diff --git a/src/modules/contratacao/contratacao.service.js b/src/modules/contratacao/contratacao.service.js index 0ac6ade..85eeefd 100644 --- a/src/modules/contratacao/contratacao.service.js +++ b/src/modules/contratacao/contratacao.service.js @@ -99,7 +99,7 @@ async function verificarViabilidade(rawViabilidadeData) { - const viabilidadeResult = new ViabilidadeModel(rawViabilidadeData.nome, rawViabilidadeData.email, rawViabilidadeData.telefone, street, rawNumero, neighborhood, city, state, cep, naoDedicado, dedicado, distancia || null); + const viabilidadeResult = new ViabilidadeModel(rawViabilidadeData.nome, rawViabilidadeData.email, rawViabilidadeData.telefone, street, rawNumero, neighborhood, city, state, cep, naoDedicado, dedicado, distancia || null, viabilidade.data.pasta.sigla || null); if (source) { return viabilidadeResult; diff --git a/src/shared/apis/geogridService.js b/src/shared/apis/geogridService.js index 2ea3118..edebaf7 100644 --- a/src/shared/apis/geogridService.js +++ b/src/shared/apis/geogridService.js @@ -23,9 +23,6 @@ const consultaViabilidade = async (lat, lon) => { consultarIndividual: "S" }; - // const urlParams = qs.stringify(params, { arrayFormat: 'brackets' }); - // logger.info(`Chamada à API GeoGrid: ${url}?${urlParams}`); - const response = await axios.get(url, { params, // força a serialização do tipo `itens[]=caixa` @@ -41,11 +38,19 @@ const consultaViabilidade = async (lat, lon) => { const registrosFiltrados = registros.filter(r => { const sigla = r.pasta && r.pasta.sigla; - return sigla === "São Bernardo do Campo - SP" || sigla === "São Paulo - SP" || sigla === "Barueri - São Paulo" || sigla === "TMC"; + const isAuthorized = apiConfig.geogridAuthorizedSiglasPastas.includes(sigla); + + const isParceiro = sigla.toLowerCase().includes("- parceiro") || sigla.toLowerCase().includes("parceiros - outros"); + + return isAuthorized || isParceiro; }); const primeiro = registrosFiltrados[0]; + if (apiConfig.geogridAuthorizedSiglasPastas.includes(primeiro.pasta.sigla)) { + primeiro.pasta.sigla = "Sothis"; + } + // Retorna no formato esperado pelo controller (viabilidade.data.distancia) return { data: primeiro }; } catch (error) { @@ -56,26 +61,3 @@ const consultaViabilidade = async (lat, lon) => { module.exports = { consultaViabilidade }; -/* - DESCRIÇÃO: - Este arquivo define um serviço para consultar a API "GeoGrid", que parece ser um sistema de geolocalização para verificar a viabilidade de serviço em um determinado local. - - FLUXO: - 1. É chamado pelo `contratacao.service.js`, recebendo coordenadas de latitude e longitude. - 2. Busca as credenciais da API (URL, chave e cookie) a partir do `apiConfig`. - 3. Monta um objeto de parâmetros para a requisição GET, incluindo: - - `raio`: um raio de busca de 5000 metros. - - `latitude` e `longitude`: as coordenadas do ponto de consulta. - - `itens[]`: especifica o que procurar (neste caso, "caixa"). - - Parâmetros de ordenação e consulta. - 4. Utiliza a biblioteca `qs` para serializar os parâmetros corretamente, especialmente o array `itens[]`. - 5. Loga no console um comando `curl` equivalente, o que é uma excelente prática para depuração, permitindo replicar a requisição fora da aplicação. - 6. Executa a requisição GET para a URL do GeoGrid usando `axios`, passando os parâmetros e os cabeçalhos de autenticação (`api-key` and `Cookie`). - 7. Processa a resposta: - - Extrai o array `registros` da resposta. - - Pega apenas o primeiro item desse array. - - Retorna o primeiro registro encontrado, encapsulado em um objeto `{ data: primeiro }` para manter consistência com o que o `contratacao.service` espera (`viabilidade.data`). - 8. Em caso de erro na requisição, loga a mensagem de erro e lança uma exceção. - - Este serviço abstrai a interação com a API GeoGrid, expondo uma função simples (`consultaViabilidade`) para o resto da aplicação. -*/ \ No newline at end of file diff --git a/src/shared/config/apiConfig.js b/src/shared/config/apiConfig.js index c922cb0..3cf24e1 100644 --- a/src/shared/config/apiConfig.js +++ b/src/shared/config/apiConfig.js @@ -8,6 +8,7 @@ const googleApiKey = process.env.GOOGLE_API_KEY; const geogridApiUrl = process.env.GEOGRID_API_URL; const geogridApiKey = process.env.GEOGRID_API_KEY; const geogridApiCookie = process.env.GEOGRID_API_COOKIE; +const geogridAuthorizedSiglasPastas = process.env.GEOGRID_AUTHORIZED_SIGLAS_PASTAS ? process.env.GEOGRID_AUTHORIZED_SIGLAS_PASTAS.split(',').map(s => s.trim()) : []; // Hubsoft API Configs const hubsoftUrl = process.env.HUBSOFT_URL; @@ -23,6 +24,7 @@ module.exports = { geogridApiUrl: geogridApiUrl, geogridApiKey: geogridApiKey, geogridApiCookie: geogridApiCookie, + geogridAuthorizedSiglasPastas: geogridAuthorizedSiglasPastas, hubsoftUrl: hubsoftUrl, hubsoftAuthUrl: hubsoftAuthUrl,