135 lines
4.7 KiB
JavaScript
135 lines
4.7 KiB
JavaScript
|
|
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;
|