Files
NoIdle/backend/routes/activities.js

79 lines
2.8 KiB
JavaScript
Raw Permalink Normal View History

const express = require('express');
const router = express.Router();
const { query } = require('../config/database');
const { authenticateToken } = require('../middleware/auth');
// REGISTRAR ATIVIDADE (sem auth - usado pelo client)
router.post('/', async (req, res) => {
try {
const { device_id, window_title, application_name, idle_time_seconds, urls } = req.body;
if (!device_id) {
return res.status(400).json({ error: 'device_id é obrigatório' });
}
const deviceCheck = await query(
'SELECT id, company_id FROM devices WHERE device_id = $1',
[device_id]
);
if (deviceCheck.rows.length === 0) {
return res.status(404).json({ error: 'Dispositivo não encontrado' });
}
const device = deviceCheck.rows[0];
const result = await query(
`INSERT INTO activities (device_id, company_id, window_title, application_name, idle_time_seconds, timestamp)
VALUES ($1, $2, $3, $4, $5, NOW()) RETURNING *`,
[device.id, device.company_id, window_title, application_name, idle_time_seconds || 0]
);
// Se tem URLs, salvar também
if (urls && Array.isArray(urls) && urls.length > 0) {
for (const urlData of urls) {
await query(
`INSERT INTO browsing_history (device_id, url, title, browser, visited_at)
VALUES ($1, $2, $3, $4, NOW())`,
[device_id, urlData.url, urlData.title, urlData.browser]
);
}
console.log(`📊 ${urls.length} URLs registradas para ${device_id}`);
}
res.status(201).json({ success: true, activity: result.rows[0] });
} catch (error) {
console.error('Erro ao registrar atividade:', error);
res.status(500).json({ error: 'Erro ao registrar atividade' });
}
});
// LISTAR ATIVIDADES
router.get('/', authenticateToken, async (req, res) => {
try {
const company_id = req.user.company_id;
const { device_id, limit = 100 } = req.query;
let queryText = `SELECT a.*, d.device_name FROM activities a
JOIN devices d ON a.device_id = d.id
WHERE a.company_id = $1`;
const params = [company_id];
if (device_id) {
params.push(device_id);
queryText += ` AND a.device_id = $${params.length}`;
}
queryText += ` ORDER BY a.timestamp DESC LIMIT $${params.length + 1}`;
params.push(limit);
const result = await query(queryText, params);
res.json({ success: true, activities: result.rows });
} catch (error) {
console.error('Erro ao listar atividades:', error);
res.status(500).json({ error: 'Erro ao listar atividades' });
}
});
module.exports = router;