OwlCyberSecurity - MANAGER
Edit File: leaveRoutes.mjs
import express from 'express'; import { submitLeave, fetchAllLeaves, updateLeave, deleteLeave } from '../controllers/leaveController.mjs'; import { checkRole } from '../routes/roleMiddleware.mjs'; import sequelize from '../config/database.mjs'; import Employee from '../models/employee.mjs'; export default function (Leave) { const router = express.Router(); // Middleware to attach model to the request router.use((req, res, next) => { req.model = Leave; next(); }); router.get('/next-id', async (req, res) => { try { // Check if the Leaves table is empty const [countResult] = await sequelize.query('SELECT COUNT(*) as total FROM Leaves'); const total = countResult[0].total; if (total === 0) { // Reset auto_increment to 1 await sequelize.query('ALTER TABLE Leaves AUTO_INCREMENT = 1'); } const [result] = await sequelize.query("SHOW TABLE STATUS LIKE 'Leaves'"); const nextID = result?.[0]?.Auto_increment; if (!nextID) { return res.status(500).json({ message: 'Could not determine next LeaveID' }); } res.json({ nextID }); } catch (error) { console.error('Error fetching next LeaveID:', error); res.status(500).json({ message: 'Failed to fetch next LeaveID' }); } }); // ✅ Only 'entry' and 'admin' users can submit leave router.post('/', checkRole('entry'), submitLeave); // ✅ directly pass submitLeave // ✅ GET: Fetch all leaves (admin only) router.get('/', checkRole('admin'), (req, res) => fetchAllLeaves(req, res, Leave)); // ✅ Edit leave by ID (admin only) router.put('/:id', checkRole('admin'), (req, res) => updateLeave(req, res, Leave)); // ✅ Delete leave by ID (admin only) router.delete('/:id', checkRole('admin'), (req, res) => deleteLeave(req, res, Leave, Employee)); return router; }