feat: possibilità di ingrandire gli elenchi delle pagine dashbaord, ticket e ticket a mio carico

This commit is contained in:
2026-07-08 08:00:02 +02:00
parent f9cbfc63b9
commit fd78b7e283
4 changed files with 150 additions and 5 deletions
+59 -3
View File
@@ -74,6 +74,17 @@ seedPhrases();
// GET /api/dashboard/stats — Dashboard statistics
router.get('/stats', async (req, res) => {
const activeAgentId = parseInt(req.headers['x-agent-id'], 10) || 1;
let previewLimit = 10;
try {
const row = db.prepare("SELECT preview_limit FROM agent_settings WHERE agent_id = ?").get(activeAgentId);
if (row) {
previewLimit = row.preview_limit;
}
} catch (err) {
console.error('Error reading agent_settings:', err.message);
}
try {
// All queries in parallel for speed
const [
@@ -138,7 +149,7 @@ router.get('/stats', async (req, res) => {
JOIN ticket_state_type tst ON ts.type_id = tst.id
WHERE tst.name IN ('new', 'open', 'pending reminder', 'pending auto')`
),
// 10 most recent tickets
// Custom most recent tickets based on agent settings
pool.query(
`SELECT t.id, t.tn, t.title, ts.name AS state_name,
tp.name AS priority_name, tp.color AS priority_color,
@@ -148,7 +159,8 @@ router.get('/stats', async (req, res) => {
JOIN ticket_priority tp ON t.ticket_priority_id = tp.id
JOIN queue q ON t.queue_id = q.id
ORDER BY t.create_time DESC
LIMIT 10`
LIMIT $1`,
[previewLimit]
),
// Escalated tickets
pool.query(
@@ -164,7 +176,7 @@ router.get('/stats', async (req, res) => {
JOIN ticket_state_type tst ON ts.type_id = tst.id
WHERE tst.name IN ('new', 'open', 'pending reminder', 'pending auto')
AND t.user_id = $1`,
[activeAgentId]
[activeAgentId]
),
]);
@@ -178,6 +190,7 @@ router.get('/stats', async (req, res) => {
recent_tickets: recentTickets.rows,
escalated: parseInt(escalated.rows[0].count),
total_my_open: parseInt(myOpenCount.rows[0].count),
preview_limit: previewLimit,
});
} catch (err) {
console.error('Error fetching dashboard stats:', err);
@@ -206,4 +219,47 @@ router.get('/phrases', (req, res) => {
}
});
// GET /api/dashboard/settings — Retrieve settings for the agent
router.get('/settings', (req, res) => {
const activeAgentId = parseInt(req.headers['x-agent-id'], 10) || 1;
try {
const row = db.prepare("SELECT preview_limit, tickets_per_page FROM agent_settings WHERE agent_id = ?").get(activeAgentId);
if (row) {
res.json(row);
} else {
res.json({ preview_limit: 10, tickets_per_page: 50 });
}
} catch (err) {
console.error('Error reading agent settings:', err);
res.status(500).json({ error: err.message });
}
});
// POST /api/dashboard/settings — Save settings for the agent
router.post('/settings', (req, res) => {
const activeAgentId = parseInt(req.headers['x-agent-id'], 10) || 1;
const { preview_limit, tickets_per_page } = req.body;
try {
let currentSettings = { preview_limit: 10, tickets_per_page: 50 };
const row = db.prepare("SELECT preview_limit, tickets_per_page FROM agent_settings WHERE agent_id = ?").get(activeAgentId);
if (row) {
currentSettings = row;
}
const newPreviewLimit = preview_limit !== undefined ? parseInt(preview_limit, 10) : currentSettings.preview_limit;
const newTicketsPerPage = tickets_per_page !== undefined ? parseInt(tickets_per_page, 10) : currentSettings.tickets_per_page;
db.prepare(`
INSERT OR REPLACE INTO agent_settings (agent_id, preview_limit, tickets_per_page)
VALUES (?, ?, ?)
`).run(activeAgentId, newPreviewLimit, newTicketsPerPage);
res.json({ success: true, preview_limit: newPreviewLimit, tickets_per_page: newTicketsPerPage });
} catch (err) {
console.error('Error saving agent settings:', err);
res.status(500).json({ error: err.message });
}
});
module.exports = router;