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
|
||||
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
|
||||
this.nome = nome;
|
||||
this.email = email;
|
||||
@ -13,6 +13,7 @@ class ViabilidadeModel {
|
||||
this.cep = cep;
|
||||
this.naoDedicado = naoDedicado;
|
||||
this.dedicado = dedicado;
|
||||
this.distancia = distancia;
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,7 +73,7 @@ class ClientModelPj {
|
||||
}
|
||||
|
||||
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.servico = servico;
|
||||
this.cpf_cnpj = cpfCnpj;
|
||||
@ -84,9 +85,12 @@ class ProspectModel {
|
||||
this.numero = numero;
|
||||
this.email = email;
|
||||
this.nomeMae = nomeMae;
|
||||
this.id_crm = idCrm;
|
||||
this.complemento = complemento;
|
||||
this.dataNascimento = dataNascimento;
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
pfToJSON() {
|
||||
return {
|
||||
cep: this.cep,
|
||||
servico: (this.servico && typeof this.servico === 'object') ? {
|
||||
@ -101,13 +105,32 @@ class ProspectModel {
|
||||
numero: this.numero,
|
||||
endereco: this.endereco,
|
||||
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};
|
||||
|
||||
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
const geogridService = require("../../shared/apis/geogridService.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 logger = require('../../shared/utils/logger.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');
|
||||
|
||||
// utilitário para ler chaves do payload tolerante a ":" e espaços
|
||||
@ -43,30 +43,30 @@ async function verificarViabilidade(rawViabilidadeData) {
|
||||
throw new ServiceError('CEP e número são obrigatórios.', 400);
|
||||
}
|
||||
|
||||
// // Consulta o endereço completo usando a API externa de CEP
|
||||
// const addressData = await viaCepService.getConsultaCep(rawCep);
|
||||
// if (!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 });
|
||||
// Consulta o endereço completo usando a API externa de CEP
|
||||
const addressData = await viaCepService.getConsultaCep(rawCep);
|
||||
if (!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: 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}`;
|
||||
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);
|
||||
if (!coords) {
|
||||
@ -80,8 +80,8 @@ async function verificarViabilidade(rawViabilidadeData) {
|
||||
let naoDedicado = false;
|
||||
let dedicado = false;
|
||||
|
||||
if (viabilidade.data) {
|
||||
const distancia = viabilidade.data.distancia;
|
||||
if (viabilidade.data && viabilidade.data.distancia !== undefined) {
|
||||
var distancia = viabilidade.data.distancia;
|
||||
logger.info(`Distância para o ponto de presença: ${distancia}m`);
|
||||
if (distancia <= 500) {
|
||||
naoDedicado = true;
|
||||
@ -91,10 +91,13 @@ async function verificarViabilidade(rawViabilidadeData) {
|
||||
dedicado = true;
|
||||
}
|
||||
} 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)
|
||||
.then(() => {
|
||||
@ -116,6 +119,7 @@ async function criarProspecto(rawProspectData) {
|
||||
'200 Mega + Super WiFi': { id_servico: '94'},
|
||||
'500 Mega + Super WiFi': { id_servico: '96'},
|
||||
'700 Mega + Super WiFi': { id_servico: '97'},
|
||||
'1 Gb + Super WiFi': { id_servico: '32'},
|
||||
};
|
||||
|
||||
const planoKey = getPayloadValue(payload, 'Descrição');
|
||||
@ -142,58 +146,30 @@ async function criarProspecto(rawProspectData) {
|
||||
|
||||
if (payload["CPF:"] === "") {
|
||||
// Pessoa Jurídica
|
||||
const clientData = new ClientModelPj(
|
||||
payload["Razão Social:"],
|
||||
payload["E-mail:"],
|
||||
payload["CEP:"],
|
||||
payload["Número:"],
|
||||
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:"],
|
||||
const prospectData = new ProspectModel(
|
||||
getPayloadValue(payload, 'CEP'),
|
||||
servico, // passa o objeto { id_servico, valor }
|
||||
getPayloadValue(payload, 'Razão Social'),
|
||||
getPayloadValue(payload, 'CNPJ'),
|
||||
celular,
|
||||
"pf",
|
||||
payload["Endereço de cobrança"],
|
||||
payload["Nome da mãe:"],
|
||||
payload["Data de nascimento:"],
|
||||
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:"],
|
||||
getPayloadValue(payload, 'E-mail'),
|
||||
"pj",
|
||||
getPayloadValue(payload, 'Bairro'),
|
||||
getPayloadValue(payload, 'Logradouro'),
|
||||
getPayloadValue(payload, 'Número'),
|
||||
4, // ID fixo do CRM Vendas
|
||||
getPayloadValue(payload, 'Complemento') || ""
|
||||
);
|
||||
|
||||
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(
|
||||
getPayloadValue(payload, 'CEP'),
|
||||
servico, // passa o objeto { id_servico, valor }
|
||||
@ -205,12 +181,15 @@ async function criarProspecto(rawProspectData) {
|
||||
getPayloadValue(payload, 'Bairro'),
|
||||
getPayloadValue(payload, 'Logradouro'),
|
||||
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()
|
||||
const prospectPayload = (typeof prospectData.toJSON === 'function')
|
||||
? prospectData.toJSON()
|
||||
const prospectPayload = (typeof prospectData.pfToJSON === 'function')
|
||||
? prospectData.pfToJSON()
|
||||
: JSON.parse(JSON.stringify(prospectData));
|
||||
|
||||
// envia objeto plano ao hubsoft (o hubsoftService já monta { prospectData })
|
||||
|
||||
Loading…
Reference in New Issue
Block a user