Implement sequence patching endpoint.

Allows us to change remarks and meta fields in sequences.
This commit is contained in:
D. Berge
2020-09-27 19:21:59 +02:00
parent bfcc02a140
commit fd1f1a2c1a
5 changed files with 57 additions and 4 deletions

View File

@@ -99,10 +99,10 @@ app.map({
'/project/:project/sequence/': {
get: [ mw.sequence.list ],
},
// '/project/:project/sequence/:line': {
'/project/:project/sequence/:sequence': {
// get: [ mw.sequence.get ],
// patch: [ mw.sequence.patch ],
// },
patch: [ mw.sequence.patch ],
},
//
'/project/:project/event/': {
get: [ mw.event.cache.get, mw.event.list, mw.event.cache.save ],

View File

@@ -1,4 +1,5 @@
module.exports = {
list: require('./list'),
get: require('./get')
get: require('./get'),
patch: require('./patch')
};

View File

@@ -0,0 +1,17 @@
const { sequence } = require('../../../lib/db');
module.exports = async function (req, res, next) {
try {
const payload = req.body;
await sequence.patch(req.params.project, req.params.sequence, payload);
res.status(201).send();
next();
} catch (err) {
next(err);
}
};

View File

@@ -4,5 +4,6 @@ module.exports = {
get: require('./get'),
post: require('./post'),
put: require('./put'),
patch: require('./patch'),
delete: require('./delete')
}

View File

@@ -0,0 +1,34 @@
const { setSurvey, transaction } = require('../connection');
async function patch (projectId, sequence, payload, opts = {}) {
const client = await setSurvey(projectId);
const patchables = {
"remarks": "UPDATE raw_lines SET remarks = $2 WHERE sequence = $1;",
"remarks_final": "UPDATE final_lines SET remarks = $2 WHERE sequence = $1;",
"meta": "UPDATE raw_lines SET meta = $2 WHERE sequence = $1;",
"meta_final": "UPDATE final_lines SET meta = $2 WHERE sequence = $1;"
};
try {
transaction.begin(client);
for (const key in payload) {
const text = patchables[key];
const values = [ sequence, payload[key] ];
if (!text) {
throw {status: 400, message: "Invalid patch" };
}
await client.query(text, values);
}
transaction.commit(client);
} catch (err) {
transaction.rollback(err);
throw err;
} finally {
client.release();
}
}
module.exports = patch;