From 6c925db42b7f2e0d08fab3588fdea7e659a1a4d9 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 16 Feb 2026 15:56:22 -0500 Subject: [PATCH] fix: busca server-side + top 20 clientes (antes carregava 261K clientes no browser) - fetchClientList separado em fetchTopClients (top 20 LIMIT) e fetchClientSearch (LIKE server-side) - Novos endpoints: /admin/api/clientes/top e /admin/api/clientes/search?q= - Cards clicaveis com data-id/data-nome + event delegation (sem inline onclick) - Busca agora faz fetch server-side com debounce 300ms (min 2 chars) Co-Authored-By: Claude Opus 4.6 --- server.js | 20 ++++++++++++++++---- src/admin-cliente.js | 45 ++++++++++++++++++++++++++------------------ src/queries.js | 26 ++++++++++++++++++++++--- 3 files changed, 66 insertions(+), 25 deletions(-) diff --git a/server.js b/server.js index 082e2e9..06dc420 100644 --- a/server.js +++ b/server.js @@ -11,7 +11,7 @@ const express = require('express'); const session = require('express-session'); const path = require('path'); const { authenticate, requireAuth, requireRole, createAgente, createUser } = require('./src/auth'); -const { fetchTransacoes, fetchAllTransacoes, serialize, fetchDailyStats, fetchKPIs, fetchTrend30Days, fetchTopAgentes, fetchTrendByPeriod, fetchKPIsByPeriod, fetchBIData, fetchRevenueAnalytics, fetchBIStrategic, fetchClientList, fetchClientProfile, fetchClientData } = require('./src/queries'); +const { fetchTransacoes, fetchAllTransacoes, serialize, fetchDailyStats, fetchKPIs, fetchTrend30Days, fetchTopAgentes, fetchTrendByPeriod, fetchKPIsByPeriod, fetchBIData, fetchRevenueAnalytics, fetchBIStrategic, fetchTopClients, fetchClientSearch, fetchClientProfile, fetchClientData } = require('./src/queries'); const { buildHTML } = require('./src/dashboard'); const { buildAdminHTML } = require('./src/admin-panel'); const { buildAdminHomeHTML } = require('./src/admin-home'); @@ -395,12 +395,24 @@ app.get('/admin/cliente', requireRole('admin'), (req, res) => { } }); -app.get('/admin/api/clientes', requireRole('admin'), async (req, res) => { +app.get('/admin/api/clientes/top', requireRole('admin'), async (req, res) => { try { - const data = await cache.getOrFetch('client-list', fetchClientList, 15 * 60 * 1000); + const data = await cache.getOrFetch('top-clients', fetchTopClients, 15 * 60 * 1000); res.json(data); } catch (err) { - console.error('Client list API error:', err); + console.error('Top clients API error:', err); + res.status(500).json({ error: err.message }); + } +}); + +app.get('/admin/api/clientes/search', requireRole('admin'), async (req, res) => { + try { + const q = (req.query.q || '').trim(); + if (q.length < 2) return res.json([]); + const data = await fetchClientSearch(q); + res.json(data); + } catch (err) { + console.error('Client search API error:', err); res.status(500).json({ error: err.message }); } }); diff --git a/src/admin-cliente.js b/src/admin-cliente.js index 593cebb..dc4fe8a 100644 --- a/src/admin-cliente.js +++ b/src/admin-cliente.js @@ -578,7 +578,7 @@ ${buildFooter()}