From 6087846556fe36a3980823fa33c1c215c75b55ef Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Wed, 8 Jul 2026 07:15:31 +0200 Subject: [PATCH] =?UTF-8?q?feat(agenda-bridge):=20/numeros-internos=20p/?= =?UTF-8?q?=20guard=20anti-leak=20da=20Secret=C3=A1ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lista os dígitos dos números de pessoa_comunicacao da clínica (dentistas/equipe) p/ o motor não tratar um número interno como paciente. Co-Authored-By: Claude Opus 4.8 --- backend/newwhats/agenda-bridge.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/backend/newwhats/agenda-bridge.js b/backend/newwhats/agenda-bridge.js index 79fa93b..aa770fa 100644 --- a/backend/newwhats/agenda-bridge.js +++ b/backend/newwhats/agenda-bridge.js @@ -549,6 +549,23 @@ export function createAgendaBridge(pool) { } catch (e) { res.status(500).json({ error: e.message }); } }); + // ── GET /numeros-internos ─────────────────────────────────────────────────────── + // Só os dígitos dos números de pessoa_comunicacao da clínica (dentistas/equipe). O + // motor usa p/ NÃO tratar um número interno como paciente (anti-loop/leak). + router.get('/numeros-internos', async (req, res) => { + const clinicaId = String(req.query.clinica_id || ''); + if (!clinicaId) return res.status(400).json({ error: 'clinica_id obrigatório' }); + try { + const { rows } = await pool.query('SELECT numeros FROM pessoa_comunicacao WHERE clinica_id = $1', [clinicaId]); + const set = new Set(); + for (const r of rows) for (const n of (Array.isArray(r.numeros) ? r.numeros : [])) { + const d = String(n?.numero || '').replace(/\D/g, ''); + if (d.length >= 8) set.add(d); + } + res.json({ numeros: [...set] }); + } catch (e) { res.status(500).json({ error: e.message }); } + }); + // ── GET /contatos ───────────────────────────────────────────────────────────── // "Agenda de contatos internos" p/ roteamento por SITUAÇÃO. Lista todas as pessoas da // clínica (dono/dentista/funcionário) com o papel, as situações de cada número e se pode