FEAT: Adicionei as váriaveis de Siglas de pastas no .env e adicionei o campo de "provedor na resposta da API, quando o provedor bater com as siglas de pasta do .env ele retornará "Sothis".

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Gabriel Amancio 2026-05-12 16:43:04 -03:00
parent b75345bb8c
commit 77eff96195
4 changed files with 16 additions and 30 deletions

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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.
*/

View File

@ -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,