This commit is contained in:
chris 2025-08-02 08:43:40 -04:00
parent 4299738f37
commit c3b02c4530

View File

@ -210,7 +210,60 @@ function setupRoutes() {
res.status(500).json({ message: "Server error fetching logs." });
}
});
// Gets all users for the management table
app.get('/api/admin/users', authenticateToken, requireRole('admin'), async (req, res) => {
try {
const users = await db.all("SELECT id, username, role FROM users");
// Add a flag to identify the primary admin to protect them from deletion/demotion
const usersWithPrimaryFlag = users.map(u => ({
...u,
isPrimary: u.username === ADMIN_USERNAME
}));
res.json(usersWithPrimaryFlag);
} catch {
res.status(500).json({ message: "Failed to fetch users." });
}
});
// Gets all time entries for the detailed log view
app.get('/api/admin/logs', authenticateToken, requireRole('admin'), async (req, res) => {
try {
const rows = await db.all("SELECT * FROM time_entries ORDER BY punch_in_time DESC");
res.json(rows);
} catch {
res.status(500).json({ message: "Server error fetching logs." });
}
});
// Gets only PENDING time off requests for the main dashboard view
app.get('/api/admin/time-off-requests/pending', authenticateToken, requireRole('admin'), async (req, res) => {
try {
const rows = await db.all("SELECT * FROM time_off_requests WHERE status = 'pending' ORDER BY start_date ASC");
res.json(rows);
} catch {
res.status(500).json({ message: "Failed to fetch pending requests." });
}
});
// Gets APPROVED/DENIED requests for the history view
app.get('/api/admin/time-off-requests/history', authenticateToken, requireRole('admin'), async (req, res) => {
try {
const rows = await db.all("SELECT * FROM time_off_requests WHERE status != 'pending' ORDER BY start_date DESC");
res.json(rows);
} catch {
res.status(500).json({ message: "Failed to fetch request history." });
}
});
// Gets archived time entries
app.get('/api/admin/archives', authenticateToken, requireRole('admin'), async (req, res) => {
try {
const rows = await db.all("SELECT * FROM archived_time_entries ORDER BY archived_at DESC");
res.json(rows);
} catch {
res.status(500).json({ message: "Failed to fetch archives." });
}
});
// THIS IS THE NEW/FIXED ROUTE
app.put('/api/admin/logs/:id', authenticateToken, requireRole('admin'), async (req, res) => {
try {