import express from 'express'; import db from '../config/database.js'; import { authenticateToken, authorize } from '../middleware/auth.js'; const router = express.Router(); // Get all departments router.get('/', authenticateToken, async (req, res) => { try { const [departments] = await db.query('SELECT * FROM departments ORDER BY name'); res.json(departments); } catch (error) { console.error('Get departments error:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Get department by ID router.get('/:id', authenticateToken, async (req, res) => { try { const [departments] = await db.query('SELECT * FROM departments WHERE id = ?', [req.params.id]); if (departments.length === 0) { return res.status(404).json({ error: 'Department not found' }); } res.json(departments[0]); } catch (error) { console.error('Get department error:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Get sub-departments by department ID router.get('/:id/sub-departments', authenticateToken, async (req, res) => { try { const [subDepartments] = await db.query( 'SELECT * FROM sub_departments WHERE department_id = ? ORDER BY name', [req.params.id] ); res.json(subDepartments); } catch (error) { console.error('Get sub-departments error:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Create department (SuperAdmin only) router.post('/', authenticateToken, authorize('SuperAdmin'), async (req, res) => { try { const { name } = req.body; if (!name) { return res.status(400).json({ error: 'Department name required' }); } const [result] = await db.query('INSERT INTO departments (name) VALUES (?)', [name]); const [newDepartment] = await db.query('SELECT * FROM departments WHERE id = ?', [result.insertId]); res.status(201).json(newDepartment[0]); } catch (error) { if (error.code === 'ER_DUP_ENTRY') { return res.status(400).json({ error: 'Department already exists' }); } console.error('Create department error:', error); res.status(500).json({ error: 'Internal server error' }); } }); // Create sub-department (SuperAdmin only) router.post('/:id/sub-departments', authenticateToken, authorize('SuperAdmin'), async (req, res) => { try { const { name, primaryActivity } = req.body; if (!name || !primaryActivity) { return res.status(400).json({ error: 'Name and primary activity required' }); } const [result] = await db.query( 'INSERT INTO sub_departments (department_id, name, primary_activity) VALUES (?, ?, ?)', [req.params.id, name, primaryActivity] ); const [newSubDepartment] = await db.query( 'SELECT * FROM sub_departments WHERE id = ?', [result.insertId] ); res.status(201).json(newSubDepartment[0]); } catch (error) { console.error('Create sub-department error:', error); res.status(500).json({ error: 'Internal server error' }); } }); export default router;