fix(gtos): compatibilidade TransformModal com novo formato da API
continuous-integration/webhook Deploy concluído (VPS4)

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 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Deploy Agent
2026-05-31 16:25:37 +02:00
parent b18e78cc6c
commit 35248fb27b
2 changed files with 16 additions and 8 deletions
@@ -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 {
+13 -6
View File
@@ -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++;