FEAT: Implementa nova funcionalidade de viabilidade com integração à API e ajustes na estrutura do projeto
This commit is contained in:
parent
1d2636926e
commit
84f925b3cb
2
.env
2
.env
@ -4,6 +4,8 @@ API_KEY="6d717e972ba17c7cf0ab731801b8bbeac2f281e5"
|
|||||||
COOKIE="PHPSESSID=6d717e972ba17c7cf0ab731801b8bbeac2f281e5"
|
COOKIE="PHPSESSID=6d717e972ba17c7cf0ab731801b8bbeac2f281e5"
|
||||||
PORT="3000"
|
PORT="3000"
|
||||||
|
|
||||||
|
API_VIABILIDADE_URL="https://api.sothis.com.br/api/viabilidade"
|
||||||
|
|
||||||
DATABASE_HOST = 'crash.sothistelecom.com'
|
DATABASE_HOST = 'crash.sothistelecom.com'
|
||||||
DATABASE_PORT = '3306'
|
DATABASE_PORT = '3306'
|
||||||
DATABASE_NAME = 'viabilidade_data'
|
DATABASE_NAME = 'viabilidade_data'
|
||||||
|
|||||||
@ -7,35 +7,55 @@ document.getElementById('btnConsultaCep').addEventListener('click', async () =>
|
|||||||
const naoDedicado = document.getElementById('link-nao-dedicado');
|
const naoDedicado = document.getElementById('link-nao-dedicado');
|
||||||
endereco.innerText = 'Consultando...';
|
endereco.innerText = 'Consultando...';
|
||||||
try {
|
try {
|
||||||
const resp = await fetch(`/consulta-cep?cep=${encodeURIComponent(cep)}&numero=${encodeURIComponent(numero)}`);
|
const resp = await fetch(`/viabilidade?cep=${encodeURIComponent(cep)}&numero=${encodeURIComponent(numero)}`);
|
||||||
const data = await resp.json();
|
const data = await resp.json();
|
||||||
if (data && data.endereco !== undefined) {
|
if (data && data.logradouro !== undefined) {
|
||||||
// colocar o card-results__container (resultados) com display block
|
// colocar o card-results__container (resultados) com display block
|
||||||
endereco.innerHTML = `<strong>Endereço:</strong> ${data.endereco}.`;
|
endereco.innerHTML = `<strong>Endereço:</strong> ${data.logradouro} ${data.numero} ${data.bairro} ${data.cidade} ${data.estado} ${data.cep} .`;
|
||||||
resultados.style.display = 'block';
|
resultados.style.display = 'block';
|
||||||
|
|
||||||
// insere nos spans link-dedicado e link-nao-dedicado os textos de viabilidade e se for viavel adicionar classe "viavel" e se for inviavel adicionar classe "inviavel"
|
if (data.dedicado) {
|
||||||
dedicado.innerText = data.dedicado;
|
dedicado.innerText = "Viável";
|
||||||
naoDedicado.innerText = data.naoDedicado;
|
|
||||||
if (data.dedicado === 'Viável') {
|
|
||||||
// precisa remover a classe inviavel se existir
|
|
||||||
dedicado.classList.remove('inviavel');
|
dedicado.classList.remove('inviavel');
|
||||||
dedicado.classList.add('viavel');
|
dedicado.classList.add('viavel');
|
||||||
} else if (data.dedicado === 'Não viável') {
|
} else {
|
||||||
// precisa remover a classe viavel se existir
|
dedicado.innerText = "Não viável";
|
||||||
dedicado.classList.remove('viavel');
|
dedicado.classList.remove('viavel');
|
||||||
dedicado.classList.add('inviavel');
|
dedicado.classList.add('inviavel');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.naoDedicado === 'Viável') {
|
if (data.naoDedicado) {
|
||||||
// precisa remover a classe inviavel se existir
|
naoDedicado.innerText = "Viável";
|
||||||
naoDedicado.classList.remove('inviavel');
|
naoDedicado.classList.remove('inviavel');
|
||||||
naoDedicado.classList.add('viavel');
|
naoDedicado.classList.add('viavel');
|
||||||
} else if (data.naoDedicado === 'Não viável') {
|
} else {
|
||||||
// precisa remover a classe viavel se existir
|
naoDedicado.innerText = "Não viável";
|
||||||
naoDedicado.classList.remove('viavel');
|
naoDedicado.classList.remove('viavel');
|
||||||
naoDedicado.classList.add('inviavel');
|
naoDedicado.classList.add('inviavel');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// // insere nos spans link-dedicado e link-nao-dedicado os textos de viabilidade e se for viavel adicionar classe "viavel" e se for inviavel adicionar classe "inviavel"
|
||||||
|
// dedicado.innerText = data.dedicado;
|
||||||
|
// naoDedicado.innerText = data.naoDedicado;
|
||||||
|
// if (data.dedicado === 'Viável') {
|
||||||
|
// // precisa remover a classe inviavel se existir
|
||||||
|
// dedicado.classList.remove('inviavel');
|
||||||
|
// dedicado.classList.add('viavel');
|
||||||
|
// } else if (data.dedicado === 'Não viável') {
|
||||||
|
// // precisa remover a classe viavel se existir
|
||||||
|
// dedicado.classList.remove('viavel');
|
||||||
|
// dedicado.classList.add('inviavel');
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (data.naoDedicado === 'Viável') {
|
||||||
|
// // precisa remover a classe inviavel se existir
|
||||||
|
// naoDedicado.classList.remove('inviavel');
|
||||||
|
// naoDedicado.classList.add('viavel');
|
||||||
|
// } else if (data.naoDedicado === 'Não viável') {
|
||||||
|
// // precisa remover a classe viavel se existir
|
||||||
|
// naoDedicado.classList.remove('viavel');
|
||||||
|
// naoDedicado.classList.add('inviavel');
|
||||||
|
// }
|
||||||
} else if (data.error) {
|
} else if (data.error) {
|
||||||
endereco.innerText = 'Erro: ' + data.error;
|
endereco.innerText = 'Erro: ' + data.error;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const dotenv = require("dotenv");
|
const dotenv = require("dotenv");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
@ -10,7 +11,8 @@ function createApp() {
|
|||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(router);
|
app.use(express.static(path.join(__dirname, "../public")));
|
||||||
|
app.use("/", router);
|
||||||
app.use(cors());
|
app.use(cors());
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
|
|||||||
10
src/config/apiConfig.js
Normal file
10
src/config/apiConfig.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
const dotenv = require("dotenv");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
dotenv.config({ path: path.join(__dirname, '../../.env') }); // Caminho para .env na raiz
|
||||||
|
|
||||||
|
const API_URL = process.env.API_VIABILIDADE_URL;
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
API_URL
|
||||||
|
};
|
||||||
20
src/controllers/viabilidadeController.js
Normal file
20
src/controllers/viabilidadeController.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
const viabilidadeService = require("../services/viabilidadeService");
|
||||||
|
|
||||||
|
async function getViabilidade(req, res) {
|
||||||
|
const { cep, numero } = req.query;
|
||||||
|
|
||||||
|
if (!cep || !numero) {
|
||||||
|
return res.status(400).json({ error: "CEP e número são obrigatórios." });
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await viabilidadeService.getViabilidadeData(cep, numero);
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
res.json(data);
|
||||||
|
} else {
|
||||||
|
res.status(500).json({ error: "Falha ao obter dados de viabilidade." });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { getViabilidade };
|
||||||
@ -1,11 +1,14 @@
|
|||||||
const express = require("express");
|
const express = require("express");
|
||||||
const consultaCepController = require("./controllers/consultaCepController");
|
const viabilidadeController = require("./controllers/viabilidadeController");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const { Router } = express;
|
const { Router } = express;
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.use(express.static(path.join(__dirname, "..", "public")));
|
router.get("/viabilidade", viabilidadeController.getViabilidade);
|
||||||
router.get('/consulta-cep', consultaCepController.getConsultaCep);
|
|
||||||
|
router.get("/", (req, res) => {
|
||||||
|
res.sendFile(path.join(__dirname, "../public/index.html"));
|
||||||
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|
||||||
|
|||||||
@ -5,5 +5,5 @@ const app = createApp();
|
|||||||
const PORT = process.env.PORT || 3000;
|
const PORT = process.env.PORT || 3000;
|
||||||
|
|
||||||
app.listen(PORT, () => {
|
app.listen(PORT, () => {
|
||||||
console.log(`Server running on http://localhost:${PORT}`)
|
console.log(`Server running on ${PORT}`)
|
||||||
});
|
});
|
||||||
|
|||||||
@ -42,6 +42,7 @@ async function getMinDistance(lat, lon) {
|
|||||||
|
|
||||||
const data = resp.data || {};
|
const data = resp.data || {};
|
||||||
const registros = data.registros || [];
|
const registros = data.registros || [];
|
||||||
|
console.log(data.registros[0]);
|
||||||
console.info(
|
console.info(
|
||||||
`[INFO] API resp. raio=${raio} lat=${lat} lon=${lon} registros=${registros.length}`
|
`[INFO] API resp. raio=${raio} lat=${lat} lon=${lon} registros=${registros.length}`
|
||||||
);
|
);
|
||||||
|
|||||||
19
src/services/viabilidadeService.js
Normal file
19
src/services/viabilidadeService.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
const axios = require('axios');
|
||||||
|
const apiConfig = require('../config/apiConfig');
|
||||||
|
|
||||||
|
async function getViabilidadeData(cep, numero) {
|
||||||
|
try {
|
||||||
|
const data = {
|
||||||
|
cep,
|
||||||
|
numero
|
||||||
|
};
|
||||||
|
const url = apiConfig.API_URL;
|
||||||
|
const response = await axios.post(url, data);
|
||||||
|
return response.data;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`[ERROR] Falha ao obter dados de viabilidade: ${error.message}`);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { getViabilidadeData };
|
||||||
Loading…
Reference in New Issue
Block a user