FEAT: Adição de distância na resposta da API.
This commit is contained in:
parent
673dd2acbc
commit
26fc47f989
@ -1,6 +1,6 @@
|
|||||||
// classe construtor para o modelo de viabilidade
|
// classe construtor para o modelo de viabilidade
|
||||||
class ViabilidadeModel {
|
class ViabilidadeModel {
|
||||||
constructor(nome, email, telefone, logradouro, numero, bairro, city, state, cep, naoDedicado, dedicado) {
|
constructor(nome, email, telefone, logradouro, numero, bairro, city, state, cep, naoDedicado, dedicado, distancia) {
|
||||||
// Inicialização de propriedades do modelo pode ser feita aqui
|
// Inicialização de propriedades do modelo pode ser feita aqui
|
||||||
this.nome = nome;
|
this.nome = nome;
|
||||||
this.email = email;
|
this.email = email;
|
||||||
@ -13,6 +13,7 @@ class ViabilidadeModel {
|
|||||||
this.cep = cep;
|
this.cep = cep;
|
||||||
this.naoDedicado = naoDedicado;
|
this.naoDedicado = naoDedicado;
|
||||||
this.dedicado = dedicado;
|
this.dedicado = dedicado;
|
||||||
|
this.distancia = distancia;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +73,7 @@ class ClientModelPj {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ProspectModel {
|
class ProspectModel {
|
||||||
constructor(cep, servico, nomeRazaoSocial, cpfCnpj, telefone, email, tipoPessoa, bairro, endereco, numero, nomeMae) {
|
constructor(cep, servico, nomeRazaoSocial, cpfCnpj, telefone, email, tipoPessoa, bairro, endereco, numero, nomeMae, idCrm, complemento, dataNascimento) {
|
||||||
this.cep = cep;
|
this.cep = cep;
|
||||||
this.servico = servico;
|
this.servico = servico;
|
||||||
this.cpf_cnpj = cpfCnpj;
|
this.cpf_cnpj = cpfCnpj;
|
||||||
@ -84,9 +85,12 @@ class ProspectModel {
|
|||||||
this.numero = numero;
|
this.numero = numero;
|
||||||
this.email = email;
|
this.email = email;
|
||||||
this.nomeMae = nomeMae;
|
this.nomeMae = nomeMae;
|
||||||
|
this.id_crm = idCrm;
|
||||||
|
this.complemento = complemento;
|
||||||
|
this.dataNascimento = dataNascimento;
|
||||||
}
|
}
|
||||||
|
|
||||||
toJSON() {
|
pfToJSON() {
|
||||||
return {
|
return {
|
||||||
cep: this.cep,
|
cep: this.cep,
|
||||||
servico: (this.servico && typeof this.servico === 'object') ? {
|
servico: (this.servico && typeof this.servico === 'object') ? {
|
||||||
@ -101,13 +105,32 @@ class ProspectModel {
|
|||||||
numero: this.numero,
|
numero: this.numero,
|
||||||
endereco: this.endereco,
|
endereco: this.endereco,
|
||||||
email: this.email,
|
email: this.email,
|
||||||
// nomeMae não está no exemplo esperado; remova ou deixe se necessário
|
nome_mae: this.nomeMae,
|
||||||
|
id_crm: this.id_crm,
|
||||||
|
complemento: this.complemento,
|
||||||
|
data_nascimento: this.dataNascimento
|
||||||
|
};
|
||||||
|
}
|
||||||
|
pjToJSON() {
|
||||||
|
return {
|
||||||
|
cep: this.cep,
|
||||||
|
servico: (this.servico && typeof this.servico === 'object') ? {
|
||||||
|
id_servico: this.servico.id_servico ?? this.servico.id ?? null,
|
||||||
|
valor: this.servico.valor ?? null
|
||||||
|
} : null,
|
||||||
|
nome_razaosocial: this.nome_razaosocial,
|
||||||
|
cpf_cnpj: this.cpf_cnpj,
|
||||||
|
telefone: this.telefone,
|
||||||
|
email: this.email,
|
||||||
|
tipo_pessoa: this.tipoPessoa,
|
||||||
|
bairro: this.bairro,
|
||||||
|
endereco: this.endereco,
|
||||||
|
numero: this.numero,
|
||||||
|
complemento: this.complemento
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = {ViabilidadeModel, ClientModelPf, ClientModelPj, ProspectModel};
|
module.exports = {ViabilidadeModel, ClientModelPf, ClientModelPj, ProspectModel};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
const geogridService = require("../../shared/apis/geogridService.js");
|
const geogridService = require("../../shared/apis/geogridService.js");
|
||||||
const googleService = require("../../shared/apis/googleService.js");
|
const googleService = require("../../shared/apis/googleService.js");
|
||||||
const cepRestService = require("../../shared/apis/cepRestService.js");
|
// const cepRestService = require("../../shared/apis/cepRestService.js");
|
||||||
const hubsoftService = require("../../shared/apis/hubsoftService.js");
|
const hubsoftService = require("../../shared/apis/hubsoftService.js");
|
||||||
const logger = require('../../shared/utils/logger.js');
|
const logger = require('../../shared/utils/logger.js');
|
||||||
const repository = require('./contratacao.repository.js');
|
const repository = require('./contratacao.repository.js');
|
||||||
// const viaCepService = require("../../shared/apis/viaCepService.js");
|
const viaCepService = require("../../shared/apis/viaCepService.js");
|
||||||
const {ViabilidadeModel, ClientModelPf, ClientModelPj, ProspectModel} = require('./contratacao.model');
|
const {ViabilidadeModel, ClientModelPf, ClientModelPj, ProspectModel} = require('./contratacao.model');
|
||||||
|
|
||||||
// utilitário para ler chaves do payload tolerante a ":" e espaços
|
// utilitário para ler chaves do payload tolerante a ":" e espaços
|
||||||
@ -43,31 +43,31 @@ async function verificarViabilidade(rawViabilidadeData) {
|
|||||||
throw new ServiceError('CEP e número são obrigatórios.', 400);
|
throw new ServiceError('CEP e número são obrigatórios.', 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
// // Consulta o endereço completo usando a API externa de CEP
|
// Consulta o endereço completo usando a API externa de CEP
|
||||||
// const addressData = await viaCepService.getConsultaCep(rawCep);
|
const addressData = await viaCepService.getConsultaCep(rawCep);
|
||||||
// if (!addressData) {
|
if (!addressData) {
|
||||||
// logger.warn('Endereço não encontrado ou resposta inválida do serviço de CEP', { cep: rawCep, response: addressData });
|
logger.warn('Endereço não encontrado ou resposta inválida do serviço de CEP', { cep: rawCep, response: addressData });
|
||||||
// throw new ServiceError('Endereço não encontrado para o CEP fornecido.', 404);
|
|
||||||
// }
|
|
||||||
// logger.info('Endereço obtido com sucesso via CEP', { data: addressData });
|
|
||||||
|
|
||||||
// const { logradouro, bairro, localidade: city, uf: state, cep } = addressData; // FIX: Usar address.data para desestruturar
|
|
||||||
// const addressString = `${logradouro}, ${rawNumero}, ${bairro}, ${city}, ${state}, ${cep}`;
|
|
||||||
// logger.info('String de endereço montada para geocodificação', { addressString });
|
|
||||||
|
|
||||||
|
|
||||||
const address = await cepRestService.getConsultaCep(rawCep);
|
|
||||||
// FIX: Revertendo para a verificação correta da resposta do cepRestService
|
|
||||||
if (!address) {
|
|
||||||
logger.warn('Endereço não encontrado ou resposta inválida do serviço de CEP', { cep: rawCep, response: address });
|
|
||||||
throw new ServiceError('Endereço não encontrado para o CEP fornecido.', 404);
|
throw new ServiceError('Endereço não encontrado para o CEP fornecido.', 404);
|
||||||
}
|
}
|
||||||
logger.info('Endereço obtido com sucesso via CEP', { data: address });
|
logger.info('Endereço obtido com sucesso via CEP', { data: addressData });
|
||||||
|
|
||||||
const { logradouro, bairro, localidade: city, uf: state, cep } = address; // FIX: Usar address.data para desestruturar
|
const { logradouro, bairro, localidade: city, uf: state, cep } = addressData; // FIX: Usar address.data para desestruturar
|
||||||
const addressString = `${logradouro}, ${rawNumero}, ${bairro}, ${city}, ${state}, ${cep}`;
|
const addressString = `${logradouro}, ${rawNumero}, ${bairro}, ${city}, ${state}, ${cep}`;
|
||||||
logger.info('String de endereço montada para geocodificação', { addressString });
|
logger.info('String de endereço montada para geocodificação', { addressString });
|
||||||
|
|
||||||
|
|
||||||
|
// const address = await cepRestService.getConsultaCep(rawCep);
|
||||||
|
// // FIX: Revertendo para a verificação correta da resposta do cepRestService
|
||||||
|
// if (!address) {
|
||||||
|
// logger.warn('Endereço não encontrado ou resposta inválida do serviço de CEP', { cep: rawCep, response: address });
|
||||||
|
// throw new ServiceError('Endereço não encontrado para o CEP fornecido.', 404);
|
||||||
|
// }
|
||||||
|
// logger.info('Endereço obtido com sucesso via CEP', { data: address });
|
||||||
|
|
||||||
|
// const { logradouro, bairro, localidade: city, uf: state, cep } = address; // FIX: Usar address.data para desestruturar
|
||||||
|
// const addressString = `${logradouro}, ${rawNumero}, ${bairro}, ${city}, ${state}, ${cep}`;
|
||||||
|
// logger.info('String de endereço montada para geocodificação', { addressString });
|
||||||
|
|
||||||
const coords = await googleService.geocodeWithGoogle(addressString);
|
const coords = await googleService.geocodeWithGoogle(addressString);
|
||||||
if (!coords) {
|
if (!coords) {
|
||||||
logger.error('Não foi possível obter coordenadas do Google Geocoding', { addressString });
|
logger.error('Não foi possível obter coordenadas do Google Geocoding', { addressString });
|
||||||
@ -80,8 +80,8 @@ async function verificarViabilidade(rawViabilidadeData) {
|
|||||||
let naoDedicado = false;
|
let naoDedicado = false;
|
||||||
let dedicado = false;
|
let dedicado = false;
|
||||||
|
|
||||||
if (viabilidade.data) {
|
if (viabilidade.data && viabilidade.data.distancia !== undefined) {
|
||||||
const distancia = viabilidade.data.distancia;
|
var distancia = viabilidade.data.distancia;
|
||||||
logger.info(`Distância para o ponto de presença: ${distancia}m`);
|
logger.info(`Distância para o ponto de presença: ${distancia}m`);
|
||||||
if (distancia <= 500) {
|
if (distancia <= 500) {
|
||||||
naoDedicado = true;
|
naoDedicado = true;
|
||||||
@ -91,10 +91,13 @@ async function verificarViabilidade(rawViabilidadeData) {
|
|||||||
dedicado = true;
|
dedicado = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.warn('Resposta do GeoGrid não continha dados de viabilidade.', { cep: rawCep, numero: rawNumero });
|
naoDedicado = false;
|
||||||
|
dedicado = false;
|
||||||
|
var distancia = "5KM+";
|
||||||
|
logger.warn('Dados de viabilidade não contêm informação de distância', { viabilidadeData: viabilidade.data });
|
||||||
}
|
}
|
||||||
|
|
||||||
const viabilidadeResult = new ViabilidadeModel(rawViabilidadeData.nome, rawViabilidadeData.email, rawViabilidadeData.telefone, logradouro, rawNumero, bairro, city, state, cep, naoDedicado, dedicado);
|
const viabilidadeResult = new ViabilidadeModel(rawViabilidadeData.nome, rawViabilidadeData.email, rawViabilidadeData.telefone, logradouro, rawNumero, bairro, city, state, cep, naoDedicado, dedicado, distancia || null);
|
||||||
|
|
||||||
await repository.insertViabilidadeData(viabilidadeResult)
|
await repository.insertViabilidadeData(viabilidadeResult)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
@ -116,6 +119,7 @@ async function criarProspecto(rawProspectData) {
|
|||||||
'200 Mega + Super WiFi': { id_servico: '94'},
|
'200 Mega + Super WiFi': { id_servico: '94'},
|
||||||
'500 Mega + Super WiFi': { id_servico: '96'},
|
'500 Mega + Super WiFi': { id_servico: '96'},
|
||||||
'700 Mega + Super WiFi': { id_servico: '97'},
|
'700 Mega + Super WiFi': { id_servico: '97'},
|
||||||
|
'1 Gb + Super WiFi': { id_servico: '32'},
|
||||||
};
|
};
|
||||||
|
|
||||||
const planoKey = getPayloadValue(payload, 'Descrição');
|
const planoKey = getPayloadValue(payload, 'Descrição');
|
||||||
@ -142,58 +146,30 @@ async function criarProspecto(rawProspectData) {
|
|||||||
|
|
||||||
if (payload["CPF:"] === "") {
|
if (payload["CPF:"] === "") {
|
||||||
// Pessoa Jurídica
|
// Pessoa Jurídica
|
||||||
const clientData = new ClientModelPj(
|
const prospectData = new ProspectModel(
|
||||||
payload["Razão Social:"],
|
getPayloadValue(payload, 'CEP'),
|
||||||
payload["E-mail:"],
|
servico, // passa o objeto { id_servico, valor }
|
||||||
payload["CEP:"],
|
getPayloadValue(payload, 'Razão Social'),
|
||||||
payload["Número:"],
|
getPayloadValue(payload, 'CNPJ'),
|
||||||
payload["Logradouro:"],
|
|
||||||
payload["Bairro:"],
|
|
||||||
payload["Cidade:"],
|
|
||||||
payload["Estado:"],
|
|
||||||
servico,
|
|
||||||
payload["Telefone:"],
|
|
||||||
"pj",
|
|
||||||
payload["Endereço de cobrança"],
|
|
||||||
payload["CNPJ:"],
|
|
||||||
payload["Selecione o dia de vencimento:"],
|
|
||||||
payload["Escolha a forma de pagamento:"],
|
|
||||||
payload["Banco:"],
|
|
||||||
`${payload["Agência:"]}-${payload["Dígito (agência):"]}`,
|
|
||||||
payload["Conta:"],
|
|
||||||
payload["E-mail de cobrança:"],
|
|
||||||
);
|
|
||||||
logger.info('Criando prospecto PJ no Hubsoft', { clientData });
|
|
||||||
const resultado = await hubsoftService.criarProspectoHubsoft(clientData);
|
|
||||||
logger.info('Prospecto PJ criado com sucesso no Hubsoft', { resultado });
|
|
||||||
return resultado;
|
|
||||||
} else {
|
|
||||||
// Pessoa Física
|
|
||||||
const clientData = new ClientModelPf(
|
|
||||||
payload["Nome completo:"],
|
|
||||||
payload["E-mail:"],
|
|
||||||
payload["CEP:"],
|
|
||||||
payload["Número:"],
|
|
||||||
payload["Logradouro:"],
|
|
||||||
payload["Bairro:"],
|
|
||||||
payload["Cidade:"],
|
|
||||||
payload["Estado:"],
|
|
||||||
servico,
|
|
||||||
payload["Plano:"],
|
|
||||||
payload["CPF:"],
|
|
||||||
celular,
|
celular,
|
||||||
"pf",
|
getPayloadValue(payload, 'E-mail'),
|
||||||
payload["Endereço de cobrança"],
|
"pj",
|
||||||
payload["Nome da mãe:"],
|
getPayloadValue(payload, 'Bairro'),
|
||||||
payload["Data de nascimento:"],
|
getPayloadValue(payload, 'Logradouro'),
|
||||||
payload["Selecione o dia de vencimento:"],
|
getPayloadValue(payload, 'Número'),
|
||||||
payload["Escolha a forma de pagamento:"],
|
4, // ID fixo do CRM Vendas
|
||||||
payload["Banco:"],
|
getPayloadValue(payload, 'Complemento') || ""
|
||||||
`${payload["Agência:"]}-${payload["Dígito (agência):"]}`,
|
|
||||||
payload["Conta:"],
|
|
||||||
payload["E-mail de cobrança:"],
|
|
||||||
);
|
);
|
||||||
|
console.log(prospectData);
|
||||||
|
// serializa para JSON plano conforme toJSON()
|
||||||
|
const prospectPayload = (typeof prospectData.pjToJSON === 'function')
|
||||||
|
? prospectData.pjToJSON()
|
||||||
|
: JSON.parse(JSON.stringify(prospectData));
|
||||||
|
|
||||||
|
await hubsoftService.criarProspectHubsoft(prospectPayload);
|
||||||
|
return prospectPayload;
|
||||||
|
} else {
|
||||||
|
// clientData não sendo usado, pois o e-mail está sendo enviado pelo frontend.
|
||||||
const prospectData = new ProspectModel(
|
const prospectData = new ProspectModel(
|
||||||
getPayloadValue(payload, 'CEP'),
|
getPayloadValue(payload, 'CEP'),
|
||||||
servico, // passa o objeto { id_servico, valor }
|
servico, // passa o objeto { id_servico, valor }
|
||||||
@ -205,12 +181,15 @@ async function criarProspecto(rawProspectData) {
|
|||||||
getPayloadValue(payload, 'Bairro'),
|
getPayloadValue(payload, 'Bairro'),
|
||||||
getPayloadValue(payload, 'Logradouro'),
|
getPayloadValue(payload, 'Logradouro'),
|
||||||
getPayloadValue(payload, 'Número'),
|
getPayloadValue(payload, 'Número'),
|
||||||
getPayloadValue(payload, 'Nome da mãe') || ""
|
getPayloadValue(payload, 'Nome da mãe') || "",
|
||||||
|
4, // ID fixo do CRM Vendas
|
||||||
|
getPayloadValue(payload, 'Complemento') || "",
|
||||||
|
getPayloadValue(payload, 'Data de nascimento') || ""
|
||||||
);
|
);
|
||||||
|
console.log(prospectData);
|
||||||
// serializa para JSON plano conforme toJSON()
|
// serializa para JSON plano conforme toJSON()
|
||||||
const prospectPayload = (typeof prospectData.toJSON === 'function')
|
const prospectPayload = (typeof prospectData.pfToJSON === 'function')
|
||||||
? prospectData.toJSON()
|
? prospectData.pfToJSON()
|
||||||
: JSON.parse(JSON.stringify(prospectData));
|
: JSON.parse(JSON.stringify(prospectData));
|
||||||
|
|
||||||
// envia objeto plano ao hubsoft (o hubsoftService já monta { prospectData })
|
// envia objeto plano ao hubsoft (o hubsoftService já monta { prospectData })
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user