fix: chart.js legend error + smart cache for date-range queries
- Fix forecast chart confidence band fill config (fill:'+1' → explicit target) to resolve 't.legend.handleEvent' TypeError in Chart.js 4.4.1 - Add getOrFetchRange() to cache.js: auto TTL based on data age (end date >10 days old → 24h cache, recent → 5min cache) - Apply smart cache to 6 heavy endpoints: bi, bi/revenue, bi/strategic, providers, providers/failed, providers/trend Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
13
server.js
13
server.js
@@ -357,7 +357,7 @@ app.get('/admin/api/bi', requireRole('admin'), async (req, res) => {
|
||||
return row ? row.nome : null;
|
||||
};
|
||||
|
||||
const data = await fetchBIData(start, end, getAgenteName);
|
||||
const data = await cache.getOrFetchRange('bi', start, end, () => fetchBIData(start, end, getAgenteName));
|
||||
res.json(data);
|
||||
} catch (err) {
|
||||
console.error('Admin BI API error:', err);
|
||||
@@ -369,7 +369,8 @@ app.get('/admin/api/bi/revenue', requireRole('admin'), async (req, res) => {
|
||||
try {
|
||||
const { start, end, granularity } = req.query;
|
||||
if (!start || !end) return res.status(400).json({ error: 'start and end required' });
|
||||
const data = await fetchRevenueAnalytics(start, end, granularity || 'dia');
|
||||
const g = granularity || 'dia';
|
||||
const data = await cache.getOrFetchRange(`bi-rev-${g}`, start, end, () => fetchRevenueAnalytics(start, end, g));
|
||||
res.json(data);
|
||||
} catch (err) {
|
||||
console.error('Revenue API error:', err);
|
||||
@@ -381,7 +382,7 @@ app.get('/admin/api/bi/strategic', requireRole('admin'), async (req, res) => {
|
||||
try {
|
||||
const { start, end } = req.query;
|
||||
if (!start || !end) return res.status(400).json({ error: 'start and end required' });
|
||||
const data = await fetchBIStrategic(start, end);
|
||||
const data = await cache.getOrFetchRange('bi-strat', start, end, () => fetchBIStrategic(start, end));
|
||||
res.json(data);
|
||||
} catch (err) {
|
||||
console.error('Strategic BI API error:', err);
|
||||
@@ -917,7 +918,7 @@ app.get('/admin/api/providers', requireRole('admin'), async (req, res) => {
|
||||
try {
|
||||
const { start, end } = req.query;
|
||||
if (!start || !end) return res.status(400).json({ error: 'start and end required' });
|
||||
const data = await fetchProviderPerformance(start, end);
|
||||
const data = await cache.getOrFetchRange('providers', start, end, () => fetchProviderPerformance(start, end));
|
||||
res.json(data);
|
||||
} catch (err) {
|
||||
console.error('Provider API error:', err);
|
||||
@@ -929,7 +930,7 @@ app.get('/admin/api/providers/failed', requireRole('admin'), async (req, res) =>
|
||||
try {
|
||||
const { start, end } = req.query;
|
||||
if (!start || !end) return res.status(400).json({ error: 'start and end required' });
|
||||
const data = await fetchFailedTransactions(start, end);
|
||||
const data = await cache.getOrFetchRange('providers-fail', start, end, () => fetchFailedTransactions(start, end));
|
||||
res.json(data);
|
||||
} catch (err) {
|
||||
console.error('Failed TX API error:', err);
|
||||
@@ -941,7 +942,7 @@ app.get('/admin/api/providers/trend', requireRole('admin'), async (req, res) =>
|
||||
try {
|
||||
const { start, end } = req.query;
|
||||
if (!start || !end) return res.status(400).json({ error: 'start and end required' });
|
||||
const data = await fetchProviderTrend(start, end);
|
||||
const data = await cache.getOrFetchRange('providers-trend', start, end, () => fetchProviderTrend(start, end));
|
||||
res.json(data);
|
||||
} catch (err) {
|
||||
console.error('Provider Trend API error:', err);
|
||||
|
||||
Reference in New Issue
Block a user