v_1.5_patch_0.2
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
'use strict';
|
||||
const express = require('express');
|
||||
const { db } = require('../db');
|
||||
const { log } = require('../lib/audit');
|
||||
const { parseInputDate } = require('../lib/dates');
|
||||
const { requireAuth, requireAdmin } = require('../middleware/auth');
|
||||
|
||||
const router = express.Router();
|
||||
const PAGE = 'Version Control';
|
||||
|
||||
// ---- Read: available to every signed-in user --------------------------
|
||||
router.get('/', requireAuth, (req, res) => {
|
||||
const entries = db.prepare(
|
||||
`SELECT id, version, title, released_on, notes, sort_order, created_at, updated_at
|
||||
FROM version_entries
|
||||
ORDER BY sort_order DESC, COALESCE(released_on, '') DESC, id DESC`
|
||||
).all();
|
||||
res.json({ entries });
|
||||
});
|
||||
|
||||
// ---- Write: administrators only ---------------------------------------
|
||||
function clean(body) {
|
||||
return {
|
||||
version: String((body && body.version) || '').trim(),
|
||||
title: String((body && body.title) || '').trim(),
|
||||
released_on: parseInputDate((body && body.released_on) || ''),
|
||||
released_on_raw: String((body && body.released_on) || '').trim(),
|
||||
notes: String((body && body.notes) || '').trim(),
|
||||
sort_order: Number.isFinite(Number(body && body.sort_order)) ? Number(body.sort_order) : 0,
|
||||
};
|
||||
}
|
||||
|
||||
router.post('/', requireAuth, requireAdmin, (req, res) => {
|
||||
const v = clean(req.body);
|
||||
if (!v.version) return res.status(400).json({ error: 'A version is required.' });
|
||||
if (v.released_on_raw && !v.released_on) {
|
||||
return res.status(400).json({ error: 'Release date must be a valid date in DD-MM-YYYY format.' });
|
||||
}
|
||||
const info = db.prepare(
|
||||
`INSERT INTO version_entries (version, title, released_on, notes, sort_order, created_by)
|
||||
VALUES (?, ?, ?, ?, ?, ?)`
|
||||
).run(v.version, v.title || null, v.released_on || null, v.notes || null, v.sort_order, req.session.user.id);
|
||||
|
||||
log(req, 'VERSION_ENTRY_CREATED', 'Data Management', `Added version entry "${v.version}"`);
|
||||
res.json({ ok: true, entry: db.prepare('SELECT * FROM version_entries WHERE id = ?').get(info.lastInsertRowid) });
|
||||
});
|
||||
|
||||
router.patch('/:id', requireAuth, requireAdmin, (req, res) => {
|
||||
const id = Number(req.params.id);
|
||||
const existing = db.prepare('SELECT * FROM version_entries WHERE id = ?').get(id);
|
||||
if (!existing) return res.status(404).json({ error: 'Entry not found.' });
|
||||
|
||||
const v = clean(req.body);
|
||||
if (!v.version) return res.status(400).json({ error: 'A version is required.' });
|
||||
if (v.released_on_raw && !v.released_on) {
|
||||
return res.status(400).json({ error: 'Release date must be a valid date in DD-MM-YYYY format.' });
|
||||
}
|
||||
db.prepare(
|
||||
`UPDATE version_entries
|
||||
SET version = ?, title = ?, released_on = ?, notes = ?, sort_order = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?`
|
||||
).run(v.version, v.title || null, v.released_on || null, v.notes || null, v.sort_order, id);
|
||||
|
||||
log(req, 'VERSION_ENTRY_UPDATED', 'Data Management', `Updated version entry "${v.version}"`);
|
||||
res.json({ ok: true, entry: db.prepare('SELECT * FROM version_entries WHERE id = ?').get(id) });
|
||||
});
|
||||
|
||||
router.delete('/:id', requireAuth, requireAdmin, (req, res) => {
|
||||
const id = Number(req.params.id);
|
||||
const existing = db.prepare('SELECT * FROM version_entries WHERE id = ?').get(id);
|
||||
if (!existing) return res.status(404).json({ error: 'Entry not found.' });
|
||||
db.prepare('DELETE FROM version_entries WHERE id = ?').run(id);
|
||||
log(req, 'VERSION_ENTRY_DELETED', 'Data Management', `Deleted version entry "${existing.version}"`);
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user