Initial commit: StudyOS platform
This commit is contained in:
78
server/routes/progress.js
Normal file
78
server/routes/progress.js
Normal file
@@ -0,0 +1,78 @@
|
||||
const express = require('express');
|
||||
const db = require('../db');
|
||||
const router = express.Router();
|
||||
|
||||
// GET /api/progress — all topics with pct calculation
|
||||
router.get('/', (req, res) => {
|
||||
try {
|
||||
const rows = db.prepare('SELECT * FROM progress ORDER BY topic').all();
|
||||
const result = rows.map(r => {
|
||||
const pct = r.exercises_done > 0 ? Math.round((r.exercises_correct / r.exercises_done) * 100) : 0;
|
||||
return {
|
||||
topic: r.topic,
|
||||
exercises_done: r.exercises_done,
|
||||
exercises_correct: r.exercises_correct,
|
||||
percentage: pct,
|
||||
last_session: r.last_session,
|
||||
notes: r.notes,
|
||||
};
|
||||
});
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
console.error('[progress] list error:', err.message);
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// PUT /api/progress/:topic — update exercises (body: { correct: bool })
|
||||
router.put('/:topic', (req, res) => {
|
||||
const topic = req.params.topic;
|
||||
const { correct } = req.body;
|
||||
|
||||
if (correct === undefined) {
|
||||
return res.status(400).json({ error: 'correct is required' });
|
||||
}
|
||||
|
||||
try {
|
||||
const existing = db.prepare('SELECT * FROM progress WHERE topic = ?').get(topic);
|
||||
if (existing) {
|
||||
db.prepare(`
|
||||
UPDATE progress SET
|
||||
exercises_done = exercises_done + 1,
|
||||
exercises_correct = exercises_correct + ?,
|
||||
last_session = datetime('now')
|
||||
WHERE topic = ?
|
||||
`).run(correct === true ? 1 : 0, topic);
|
||||
} else {
|
||||
db.prepare(`
|
||||
INSERT INTO progress (topic, exercises_done, exercises_correct, last_session, notes)
|
||||
VALUES (?, 1, ?, datetime('now'), '[]')
|
||||
`).run(topic, correct === true ? 1 : 0);
|
||||
}
|
||||
|
||||
const row = db.prepare('SELECT * FROM progress WHERE topic = ?').get(topic);
|
||||
const pct = row.exercises_done > 0 ? Math.round((row.exercises_correct / row.exercises_done) * 100) : 0;
|
||||
res.json({ ...row, percentage: pct });
|
||||
} catch (err) {
|
||||
console.error('[progress] update error:', err.message);
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
// DELETE /api/progress/:topic — reset
|
||||
router.delete('/:topic', (req, res) => {
|
||||
const topic = req.params.topic;
|
||||
|
||||
try {
|
||||
const info = db.prepare('DELETE FROM progress WHERE topic = ?').run(topic);
|
||||
if (info.changes === 0) {
|
||||
return res.status(404).json({ error: 'Topic not found' });
|
||||
}
|
||||
res.json({ deleted: true });
|
||||
} catch (err) {
|
||||
console.error('[progress] delete error:', err.message);
|
||||
res.status(500).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user