Add PATCH note route and row_count to change log
- PATCH /api/log/:logid — saves note updates to pf.log (was missing, frontend call was silently failing) - GET /api/versions/:id/log — joins fc_table to return row_count per entry so the change log modal shows rows affected instead of '—' Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
56733df5d4
commit
2a9a3be0f0
@ -4,11 +4,31 @@ const { fcTable } = require('../lib/utils');
|
|||||||
module.exports = function(pool) {
|
module.exports = function(pool) {
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
// list all log entries for a version, newest first
|
// list all log entries for a version, newest first, with row counts from fc_table
|
||||||
router.get('/versions/:id/log', async (req, res) => {
|
router.get('/versions/:id/log', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
|
const verResult = await pool.query(`
|
||||||
|
SELECT v.*, s.tname
|
||||||
|
FROM pf.version v
|
||||||
|
JOIN pf.source s ON s.id = v.source_id
|
||||||
|
WHERE v.id = $1
|
||||||
|
`, [req.params.id]);
|
||||||
|
if (verResult.rows.length === 0) return res.status(404).json({ error: 'Version not found' });
|
||||||
|
|
||||||
|
const { tname, id: version_id } = verResult.rows[0];
|
||||||
|
const table = fcTable(tname, version_id);
|
||||||
|
|
||||||
const result = await pool.query(
|
const result = await pool.query(
|
||||||
`SELECT * FROM pf.log WHERE version_id = $1 ORDER BY stamp DESC`,
|
`SELECT l.*,
|
||||||
|
counts.row_count
|
||||||
|
FROM pf.log l
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT pf_logid, count(*)::int AS row_count
|
||||||
|
FROM ${table}
|
||||||
|
GROUP BY pf_logid
|
||||||
|
) counts ON counts.pf_logid = l.id
|
||||||
|
WHERE l.version_id = $1
|
||||||
|
ORDER BY l.stamp DESC`,
|
||||||
[req.params.id]
|
[req.params.id]
|
||||||
);
|
);
|
||||||
res.json(result.rows);
|
res.json(result.rows);
|
||||||
@ -18,6 +38,22 @@ module.exports = function(pool) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// update note on a log entry
|
||||||
|
router.patch('/log/:logid', async (req, res) => {
|
||||||
|
const { note } = req.body;
|
||||||
|
try {
|
||||||
|
const result = await pool.query(
|
||||||
|
`UPDATE pf.log SET note = $1 WHERE id = $2 RETURNING *`,
|
||||||
|
[note ?? null, parseInt(req.params.logid)]
|
||||||
|
);
|
||||||
|
if (result.rows.length === 0) return res.status(404).json({ error: 'Log entry not found' });
|
||||||
|
res.json(result.rows[0]);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
res.status(500).json({ error: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// undo an operation — deletes all forecast rows with this logid, then the log entry
|
// undo an operation — deletes all forecast rows with this logid, then the log entry
|
||||||
// two separate queries in a transaction to avoid FK ordering issues
|
// two separate queries in a transaction to avoid FK ordering issues
|
||||||
router.delete('/log/:logid', async (req, res) => {
|
router.delete('/log/:logid', async (req, res) => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user