Files
smanab/Sistem-Pelanggaran-Siswa/routes/achievements.js

66 lines
2.2 KiB
JavaScript

import express from 'express';
import pool from '../database.js';
const router = express.Router();
// GET all achievements
router.get('/', async (req, res) => {
try {
const [rows] = await pool.execute(`
SELECT id, student_id as studentId, title, level, date, score_reduction as scoreReduction
FROM achievements
ORDER BY date DESC
`);
res.json(rows);
} catch (error) {
console.error('Error fetching achievements:', error);
res.status(500).json({ error: 'Failed to fetch achievements' });
}
});
// GET achievements by student
router.get('/student/:studentId', async (req, res) => {
try {
const [rows] = await pool.execute(`
SELECT id, student_id as studentId, title, level, date, score_reduction as scoreReduction
FROM achievements
WHERE student_id = ?
ORDER BY date DESC
`, [req.params.studentId]);
res.json(rows);
} catch (error) {
console.error('Error fetching student achievements:', error);
res.status(500).json({ error: 'Failed to fetch achievements' });
}
});
// POST create achievement
router.post('/', async (req, res) => {
try {
const { id, studentId, title, level, date, scoreReduction } = req.body;
await pool.execute(`
INSERT INTO achievements (id, student_id, title, level, date, score_reduction)
VALUES (?, ?, ?, ?, ?, ?)
`, [id || Date.now().toString(), studentId, title, level, date || new Date().toISOString().split('T')[0], scoreReduction]);
res.status(201).json({ status: 'success', message: 'Achievement recorded' });
} catch (error) {
console.error('Error creating achievement:', error);
res.status(500).json({ error: 'Failed to create achievement' });
}
});
// DELETE achievement
router.delete('/:id', async (req, res) => {
try {
await pool.execute('DELETE FROM achievements WHERE id = ?', [req.params.id]);
res.json({ status: 'success', message: 'Achievement deleted' });
} catch (error) {
console.error('Error deleting achievement:', error);
res.status(500).json({ error: 'Failed to delete achievement' });
}
});
export default router;