From 1d2636926e80275bb3bc55df2de98175c4ac405b Mon Sep 17 00:00:00 2001 From: tulioperdigao <116309232+tulioperdigao@users.noreply.github.com> Date: Tue, 28 Oct 2025 16:02:02 -0300 Subject: [PATCH] =?UTF-8?q?REFACTOR:=20Ajustando=20arquitetura=20de=20past?= =?UTF-8?q?as=20e=20refatorando=20o=20projeto=20para=20deixar=20app=20mais?= =?UTF-8?q?=20enxuto=20e=20deixar=20l=C3=B3gica=20nos=20Controllers=20e=20?= =?UTF-8?q?Services.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/jsonService.js | 15 ------ src/app.js | 20 ++++++++ {config => src/config}/databaseConfig.js | 0 .../controllers/consultaCepController.js | 50 ++++--------------- {models => src/models}/databaseModel.js | 0 src/routes.js | 11 ++++ server.js => src/server.js | 0 src/services/cepService.js | 21 ++++++++ {services => src/services}/distanceService.js | 0 {services => src/services}/geocodeService.js | 0 {services => src/services}/sleepService.js | 0 11 files changed, 63 insertions(+), 54 deletions(-) delete mode 100644 services/jsonService.js create mode 100644 src/app.js rename {config => src/config}/databaseConfig.js (100%) rename app.js => src/controllers/consultaCepController.js (76%) rename {models => src/models}/databaseModel.js (100%) create mode 100644 src/routes.js rename server.js => src/server.js (100%) create mode 100644 src/services/cepService.js rename {services => src/services}/distanceService.js (100%) rename {services => src/services}/geocodeService.js (100%) rename {services => src/services}/sleepService.js (100%) diff --git a/services/jsonService.js b/services/jsonService.js deleted file mode 100644 index 2e1cce4..0000000 --- a/services/jsonService.js +++ /dev/null @@ -1,15 +0,0 @@ -const axios = require('axios'); - -async function fetchJson(url, opts = {}) { - try { - const r = await axios.get(url, { timeout: 10000, ...opts }); - return r.data; - } catch (e) { - console.warn(`fetchJson error ${url}: ${e.message}`); - return null; - } -} - -module.exports = { - fetchJson -}; \ No newline at end of file diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..12c4b4d --- /dev/null +++ b/src/app.js @@ -0,0 +1,20 @@ +const dotenv = require("dotenv"); + +dotenv.config(); + +const express = require("express"); +const cors = require("cors"); +const router = require("./routes"); + +function createApp() { + const app = express(); + + app.use(express.json()); + app.use(router); + app.use(cors()); + + return app; + +} + +module.exports = createApp; diff --git a/config/databaseConfig.js b/src/config/databaseConfig.js similarity index 100% rename from config/databaseConfig.js rename to src/config/databaseConfig.js diff --git a/app.js b/src/controllers/consultaCepController.js similarity index 76% rename from app.js rename to src/controllers/consultaCepController.js index 2b6c17e..3ee76e9 100644 --- a/app.js +++ b/src/controllers/consultaCepController.js @@ -1,24 +1,9 @@ -const dotenv = require("dotenv"); +const { fetchCepJson } = require("../services/cepService"); +const { getMinDistance } = require("../services/distanceService"); +const { geocodeWithGoogle } = require("../services/geocodeService"); +const { insertConsultaData } = require("../models/databaseModel"); -dotenv.config(); - -const express = require("express"); -const path = require("path"); -const cors = require("cors"); -const { fetchJson } = require("./services/jsonService"); -const { getMinDistance } = require("./services/distanceService"); -const { geocodeWithGoogle } = require("./services/geocodeService"); -const { insertConsultaData } = require("./models/databaseModel"); - -function createApp() { - const app = express(); - - app.use(cors()); - app.use(express.static(path.join(__dirname, "public"))); - app.use(express.json()); - - // manual CEP+Numero query: resolves ViaCEP -> Nominatim -> Geogrid - app.get("/consulta-cep", async (req, res) => { +const getConsultaCep = async (req, res) => { const { cep: rawCep, numero: rawNumero } = req.query; if (!rawCep) return res.status(400).json({ error: "cep é obrigatório" }); const cep = String(rawCep).trim().replace(/\D/g, ""); @@ -27,13 +12,7 @@ function createApp() { try { const viaCepUrl = 'https://api.cep.rest/'; - let cepRestData = await fetch(viaCepUrl, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ cep }) }) - .then(response => response.json()); + let cepRestData = await fetchCepJson(viaCepUrl, cep); // ViaCEP com retry e backoff (corrige shadowing e trata exceções) const maxAttempts = 5; @@ -43,13 +22,7 @@ function createApp() { if (!cepRestData || cepRestData.erro) { while (attempt < maxAttempts) { try { - cepRestData = await fetch(viaCepUrl, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ cep }) - }).then(response => response.json()); + cepRestData = await fetchCepJson(viaCepUrl, cep); if (cepRestData && !cepRestData.erro) break; console.info(`[INFO] ViaCEP retornou erro ou vazio na tentativa ${attempt + 1} para CEP ${cep}`); } catch (e) { @@ -132,9 +105,8 @@ function createApp() { console.error(err); return res.status(500).json({ error: "erro na consulta" }); } - }); + }; - return app; -} - -module.exports = createApp; +module.exports = { + getConsultaCep +}; \ No newline at end of file diff --git a/models/databaseModel.js b/src/models/databaseModel.js similarity index 100% rename from models/databaseModel.js rename to src/models/databaseModel.js diff --git a/src/routes.js b/src/routes.js new file mode 100644 index 0000000..77d2095 --- /dev/null +++ b/src/routes.js @@ -0,0 +1,11 @@ +const express = require("express"); +const consultaCepController = require("./controllers/consultaCepController"); +const path = require("path"); +const { Router } = express; +const router = Router(); + +router.use(express.static(path.join(__dirname, "..", "public"))); +router.get('/consulta-cep', consultaCepController.getConsultaCep); + +module.exports = router; + diff --git a/server.js b/src/server.js similarity index 100% rename from server.js rename to src/server.js diff --git a/src/services/cepService.js b/src/services/cepService.js new file mode 100644 index 0000000..3073deb --- /dev/null +++ b/src/services/cepService.js @@ -0,0 +1,21 @@ + + +async function fetchCepJson(url, cep) { + try { + const r = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ cep }) }) + .then(response => response.json()); + return r; + } catch (error) { + console.error("[ERROR] Falha ao buscar JSON do CEP:", error); + throw error; + } +} + +module.exports = { + fetchCepJson +}; \ No newline at end of file diff --git a/services/distanceService.js b/src/services/distanceService.js similarity index 100% rename from services/distanceService.js rename to src/services/distanceService.js diff --git a/services/geocodeService.js b/src/services/geocodeService.js similarity index 100% rename from services/geocodeService.js rename to src/services/geocodeService.js diff --git a/services/sleepService.js b/src/services/sleepService.js similarity index 100% rename from services/sleepService.js rename to src/services/sleepService.js