79 lines
2.8 KiB
JavaScript
79 lines
2.8 KiB
JavaScript
|
|
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;
|