From 35248fb27bfcd82e745d45d6a2abb1fe3c82a4f5 Mon Sep 17 00:00:00 2001 From: VPS 4 Deploy Agent Date: Sun, 31 May 2026 16:25:37 +0200 Subject: [PATCH] fix(gtos): compatibilidade TransformModal com novo formato da API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A refatoração do GET /api/gtos para retornar { rows, total, pages } quebrou o TransformModal que esperava um array direto. Correções: - routes/gtos.js: restaura suporte a ?patient=NOME (match exato) para o TransformModal continuar filtrando só as GTOs do paciente exibido, sem retornar resultados de outros pacientes via ILIKE. - TransformModal.jsx: lê data.rows (novo formato) com fallback para array direto (compatibilidade durante transição). As duas superfícies (TransformModal e GtosPage) agora usam a mesma API, mesmos dados, sem lógica duplicada ou conflitante. Co-Authored-By: Claude Sonnet 4.6 --- .../src/components/TransformModal.jsx | 5 +++-- dental-server/routes/gtos.js | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dental-server/dental-client/src/components/TransformModal.jsx b/dental-server/dental-client/src/components/TransformModal.jsx index a7de3cc..e4787b6 100644 --- a/dental-server/dental-client/src/components/TransformModal.jsx +++ b/dental-server/dental-client/src/components/TransformModal.jsx @@ -65,8 +65,9 @@ export default function TransformModal({ isOpen, onClose, image, onSaved }) { const loadGtos = async (patientName) => { setLoadingGtos(true); try { - const { data } = await api.get(`/gtos?patient=${encodeURIComponent(patientName)}`); - setGtos(data || []); + const { data } = await api.get(`/gtos?patient=${encodeURIComponent(patientName)}&limit=100`); + // Suporta tanto o formato novo { rows } quanto o antigo array (retrocompatibilidade) + setGtos(Array.isArray(data) ? data : (data.rows || [])); } catch { setGtos([]); } finally { diff --git a/dental-server/routes/gtos.js b/dental-server/routes/gtos.js index a43adf9..60749ce 100644 --- a/dental-server/routes/gtos.js +++ b/dental-server/routes/gtos.js @@ -12,17 +12,24 @@ const db = require('../database'); // ================================================================ router.get('/', async (req, res) => { try { - const search = (req.query.search || '').trim(); - const filter = req.query.filter || 'all'; - const page = Math.max(1, parseInt(req.query.page) || 1); - const limit = Math.min(100, parseInt(req.query.limit) || 20); - const offset = (page - 1) * limit; + const search = (req.query.search || '').trim(); + const patient = (req.query.patient || '').trim(); // match exato (usado pelo TransformModal) + const filter = req.query.filter || 'all'; + const page = Math.max(1, parseInt(req.query.page) || 1); + const limit = Math.min(200, parseInt(req.query.limit) || 20); + const offset = (page - 1) * limit; let params = []; let where = []; let i = 1; - if (search) { + // Match exato por paciente (TransformModal: mostra só as GTOs deste paciente) + if (patient) { + where.push(`g.patient_name = $${i}`); + params.push(patient); + i++; + } else if (search) { + // Busca ILIKE por nome ou número (GtosPage) where.push(`(g.patient_name ILIKE $${i} OR g.gto_number ILIKE $${i})`); params.push(`%${search}%`); i++;