const express = require('express'); const router = express.Router(); const { query } = require('../config/database'); const { authenticateToken } = require('../middleware/auth'); // LISTAR EQUIPES router.get('/', authenticateToken, async (req, res) => { try { const company_id = req.user.company_id; // Verificar se a tabela teams existe const tableCheck = await query( `SELECT EXISTS ( SELECT FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'teams' )` ); if (!tableCheck.rows[0].exists) { // Tabela não existe, retornar array vazio return res.json({ success: true, teams: [] }); } const result = await query( `SELECT t.*, u.name as manager_name, (SELECT COUNT(*) FROM users WHERE team_id = t.id) as members_count, (SELECT COUNT(*) FROM devices WHERE team_id = t.id) as devices_count FROM teams t LEFT JOIN users u ON t.manager_id = u.id WHERE t.company_id = $1 ORDER BY t.created_at DESC`, [company_id] ); res.json({ success: true, teams: result.rows }); } catch (error) { console.error('Erro ao listar equipes:', error); // Se for erro de permissão, retornar array vazio em vez de erro 500 if (error.message && error.message.includes('permission denied')) { console.log('⚠️ Tabela teams sem permissão, retornando array vazio'); return res.json({ success: true, teams: [] }); } res.status(500).json({ error: 'Erro ao listar equipes', details: error.message }); } }); // CRIAR EQUIPE router.post('/', authenticateToken, async (req, res) => { try { const { name, description, manager_id } = req.body; const company_id = req.user.company_id; if (!name) { return res.status(400).json({ error: 'Nome é obrigatório' }); } const result = await query( `INSERT INTO teams (name, description, manager_id, company_id, is_active) VALUES ($1, $2, $3, $4, true) RETURNING *`, [name, description, manager_id, company_id] ); res.status(201).json({ success: true, team: result.rows[0] }); } catch (error) { console.error('Erro ao criar equipe:', error); res.status(500).json({ error: 'Erro ao criar equipe' }); } }); // ATUALIZAR EQUIPE router.put('/:id', authenticateToken, async (req, res) => { try { const { id } = req.params; const { name, description, manager_id, is_active } = req.body; const company_id = req.user.company_id; const result = await query( `UPDATE teams SET name = COALESCE($1, name), description = COALESCE($2, description), manager_id = COALESCE($3, manager_id), is_active = COALESCE($4, is_active) WHERE id = $5 AND company_id = $6 RETURNING *`, [name, description, manager_id, is_active, id, company_id] ); if (result.rows.length === 0) { return res.status(404).json({ error: 'Equipe não encontrada' }); } res.json({ success: true, team: result.rows[0] }); } catch (error) { console.error('Erro ao atualizar equipe:', error); res.status(500).json({ error: 'Erro ao atualizar equipe' }); } }); // DELETAR EQUIPE router.delete('/:id', authenticateToken, async (req, res) => { try { const { id } = req.params; const company_id = req.user.company_id; // Verificar se tem usuários ou devices vinculados const check = await query( 'SELECT (SELECT COUNT(*) FROM users WHERE team_id = $1) + (SELECT COUNT(*) FROM devices WHERE team_id = $1) as count', [id] ); if (check.rows[0].count > 0) { return res.status(400).json({ error: 'Não é possível deletar equipe com membros ou dispositivos vinculados' }); } const result = await query( 'DELETE FROM teams WHERE id = $1 AND company_id = $2 RETURNING *', [id, company_id] ); if (result.rows.length === 0) { return res.status(404).json({ error: 'Equipe não encontrada' }); } res.json({ success: true, message: 'Equipe deletada' }); } catch (error) { console.error('Erro ao deletar equipe:', error); res.status(500).json({ error: 'Erro ao deletar equipe' }); } }); module.exports = router;