From 77eff96195bc23267b0f8e6cec1ef9c409f40d7d Mon Sep 17 00:00:00 2001 From: "gabriel.amancio" Date: Tue, 12 May 2026 16:43:04 -0300 Subject: [PATCH] =?UTF-8?q?FEAT:=20Adicionei=20as=20v=C3=A1riaveis=20de=20?= =?UTF-8?q?Siglas=20de=20pastas=20no=20.env=20e=20adicionei=20o=20campo=20?= =?UTF-8?q?de=20"provedor=20na=20resposta=20da=20API,=20quando=20o=20prove?= =?UTF-8?q?dor=20bater=20com=20as=20siglas=20de=20pasta=20do=20.env=20ele?= =?UTF-8?q?=20retornar=C3=A1=20"Sothis".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot --- src/modules/contratacao/contratacao.model.js | 6 ++-- .../contratacao/contratacao.service.js | 2 +- src/shared/apis/geogridService.js | 36 +++++-------------- src/shared/config/apiConfig.js | 2 ++ 4 files changed, 16 insertions(+), 30 deletions(-) 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,