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 <noreply@anthropic.com>
This commit is contained in:
20
server.js
20
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 });
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user