From 84f925b3cb07c3e5b8ee823edc02eca4592d1444 Mon Sep 17 00:00:00 2001 From: "gabriel.amancio" Date: Mon, 26 Jan 2026 08:02:53 -0300 Subject: [PATCH] =?UTF-8?q?FEAT:=20Implementa=20nova=20funcionalidade=20de?= =?UTF-8?q?=20viabilidade=20com=20integra=C3=A7=C3=A3o=20=C3=A0=20API=20e?= =?UTF-8?q?=20ajustes=20na=20estrutura=20do=20projeto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 + public/main.js | 52 ++++++++++++++++-------- src/app.js | 4 +- src/config/apiConfig.js | 10 +++++ src/controllers/viabilidadeController.js | 20 +++++++++ src/routes.js | 9 ++-- src/server.js | 2 +- src/services/distanceService.js | 1 + src/services/viabilidadeService.js | 19 +++++++++ 9 files changed, 98 insertions(+), 21 deletions(-) create mode 100644 src/config/apiConfig.js create mode 100644 src/controllers/viabilidadeController.js create mode 100644 src/services/viabilidadeService.js diff --git a/.env b/.env index 926a3f0..7d5fbe3 100644 --- a/.env +++ b/.env @@ -4,6 +4,8 @@ API_KEY="6d717e972ba17c7cf0ab731801b8bbeac2f281e5" COOKIE="PHPSESSID=6d717e972ba17c7cf0ab731801b8bbeac2f281e5" PORT="3000" +API_VIABILIDADE_URL="https://api.sothis.com.br/api/viabilidade" + DATABASE_HOST = 'crash.sothistelecom.com' DATABASE_PORT = '3306' DATABASE_NAME = 'viabilidade_data' diff --git a/public/main.js b/public/main.js index b439c8a..a963fb5 100644 --- a/public/main.js +++ b/public/main.js @@ -7,35 +7,55 @@ document.getElementById('btnConsultaCep').addEventListener('click', async () => const naoDedicado = document.getElementById('link-nao-dedicado'); endereco.innerText = 'Consultando...'; 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(); - if (data && data.endereco !== undefined) { + if (data && data.logradouro !== undefined) { // colocar o card-results__container (resultados) com display block - endereco.innerHTML = `Endereço: ${data.endereco}.`; + endereco.innerHTML = `Endereço: ${data.logradouro} ${data.numero} ${data.bairro} ${data.cidade} ${data.estado} ${data.cep} .`; 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" - dedicado.innerText = data.dedicado; - naoDedicado.innerText = data.naoDedicado; - if (data.dedicado === 'Viável') { - // precisa remover a classe inviavel se existir + if (data.dedicado) { + dedicado.innerText = "Viável"; dedicado.classList.remove('inviavel'); dedicado.classList.add('viavel'); - } else if (data.dedicado === 'Não viável') { - // precisa remover a classe viavel se existir + } else { + dedicado.innerText = "Não viável"; dedicado.classList.remove('viavel'); dedicado.classList.add('inviavel'); - } - - if (data.naoDedicado === 'Viável') { - // precisa remover a classe inviavel se existir + } + + if (data.naoDedicado) { + naoDedicado.innerText = "Viável"; naoDedicado.classList.remove('inviavel'); naoDedicado.classList.add('viavel'); - } else if (data.naoDedicado === 'Não viável') { - // precisa remover a classe viavel se existir + } else { + naoDedicado.innerText = "Não viável"; naoDedicado.classList.remove('viavel'); 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) { endereco.innerText = 'Erro: ' + data.error; } else { diff --git a/src/app.js b/src/app.js index 12c4b4d..06a8dc3 100644 --- a/src/app.js +++ b/src/app.js @@ -1,4 +1,5 @@ const dotenv = require("dotenv"); +const path = require("path"); dotenv.config(); @@ -10,7 +11,8 @@ function createApp() { const app = express(); app.use(express.json()); - app.use(router); + app.use(express.static(path.join(__dirname, "../public"))); + app.use("/", router); app.use(cors()); return app; diff --git a/src/config/apiConfig.js b/src/config/apiConfig.js new file mode 100644 index 0000000..5441cb0 --- /dev/null +++ b/src/config/apiConfig.js @@ -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 +}; \ No newline at end of file diff --git a/src/controllers/viabilidadeController.js b/src/controllers/viabilidadeController.js new file mode 100644 index 0000000..b708e90 --- /dev/null +++ b/src/controllers/viabilidadeController.js @@ -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 }; \ No newline at end of file diff --git a/src/routes.js b/src/routes.js index 77d2095..adcbf9b 100644 --- a/src/routes.js +++ b/src/routes.js @@ -1,11 +1,14 @@ const express = require("express"); -const consultaCepController = require("./controllers/consultaCepController"); +const viabilidadeController = require("./controllers/viabilidadeController"); const path = require("path"); const { Router } = express; const router = Router(); -router.use(express.static(path.join(__dirname, "..", "public"))); -router.get('/consulta-cep', consultaCepController.getConsultaCep); +router.get("/viabilidade", viabilidadeController.getViabilidade); + +router.get("/", (req, res) => { + res.sendFile(path.join(__dirname, "../public/index.html")); +}); module.exports = router; diff --git a/src/server.js b/src/server.js index e31c8c5..bd33334 100644 --- a/src/server.js +++ b/src/server.js @@ -5,5 +5,5 @@ const app = createApp(); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { - console.log(`Server running on http://localhost:${PORT}`) + console.log(`Server running on ${PORT}`) }); diff --git a/src/services/distanceService.js b/src/services/distanceService.js index 44123f1..18a8592 100644 --- a/src/services/distanceService.js +++ b/src/services/distanceService.js @@ -42,6 +42,7 @@ async function getMinDistance(lat, lon) { const data = resp.data || {}; const registros = data.registros || []; + console.log(data.registros[0]); console.info( `[INFO] API resp. raio=${raio} lat=${lat} lon=${lon} registros=${registros.length}` ); diff --git a/src/services/viabilidadeService.js b/src/services/viabilidadeService.js new file mode 100644 index 0000000..664148c --- /dev/null +++ b/src/services/viabilidadeService.js @@ -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 }; \ No newline at end of file