const express = require('express'); const crypto = require('crypto'); const { requireRole } = require('../middleware/auth'); const createTeamsRouter = ({ pool }) => { const router = express.Router(); router.get('/teams', async (req, res) => { try { const { tenantId } = req.query; const effectiveTenantId = req.user.role === 'super_admin' ? tenantId : req.user.tenant_id; let q = 'SELECT * FROM teams'; const params = []; if (effectiveTenantId && effectiveTenantId !== 'all') { q += ' WHERE tenant_id = ?'; params.push(effectiveTenantId); } if (req.user.role === 'manager') { if (req.user.team_id) { q += (params.length > 0 ? ' AND' : ' WHERE') + ' id = ?'; params.push(req.user.team_id); } else { q += (params.length > 0 ? ' AND' : ' WHERE') + ' 1=0'; } } const [rows] = await pool.query(q, params); res.json(rows); } catch (error) { res.status(500).json({ error: error.message }); } }); router.post('/teams', requireRole(['admin', 'super_admin']), async (req, res) => { const { name, description, tenantId } = req.body; const effectiveTenantId = req.user.role === 'super_admin' ? tenantId : req.user.tenant_id; try { const tid = `team_${crypto.randomUUID().split('-')[0]}`; await pool.query( 'INSERT INTO teams (id, tenant_id, name, description) VALUES (?, ?, ?, ?)', [tid, effectiveTenantId, name, description || null] ); res.status(201).json({ id: tid, message: 'Time criado com sucesso.' }); } catch (error) { console.error('Create team error:', error); res.status(500).json({ error: error.message }); } }); router.put('/teams/:id', requireRole(['admin', 'super_admin']), async (req, res) => { const { name, description } = req.body; try { const [existing] = await pool.query('SELECT tenant_id FROM teams WHERE id = ?', [req.params.id]); if (existing.length === 0) return res.status(404).json({ error: 'Not found' }); if (req.user.role !== 'super_admin' && existing[0].tenant_id !== req.user.tenant_id) { return res.status(403).json({ error: 'Acesso negado.' }); } await pool.query( 'UPDATE teams SET name = ?, description = ? WHERE id = ?', [name, description || null, req.params.id] ); res.json({ message: 'Team updated successfully.' }); } catch (error) { console.error('Update team error:', error); res.status(500).json({ error: error.message }); } }); router.delete('/teams/:id', requireRole(['admin', 'super_admin']), async (req, res) => { try { const [existing] = await pool.query('SELECT tenant_id FROM teams WHERE id = ?', [req.params.id]); if (existing.length === 0) return res.status(404).json({ error: 'Not found' }); if (req.user.role !== 'super_admin' && existing[0].tenant_id !== req.user.tenant_id) { return res.status(403).json({ error: 'Acesso negado.' }); } await pool.query('UPDATE users SET team_id = NULL WHERE team_id = ?', [req.params.id]); await pool.query('DELETE FROM teams WHERE id = ?', [req.params.id]); res.json({ message: 'Team deleted successfully.' }); } catch (error) { console.error('Delete team error:', error); res.status(500).json({ error: error.message }); } }); return router; }; module.exports = { createTeamsRouter };