From f9ef971802dd5ff7b19f103f7f4f5367282f1371 Mon Sep 17 00:00:00 2001 From: "D. Berge" Date: Thu, 1 Oct 2020 18:25:32 +0200 Subject: [PATCH] Add preplot line patching endpoint. Allows us to change remarks, meta and ntba fields in preplot lines. --- lib/www/server/api/index.js | 8 ++--- lib/www/server/api/middleware/line/index.js | 3 +- lib/www/server/api/middleware/line/patch.js | 17 ++++++++++ lib/www/server/lib/db/line/delete.js | 0 lib/www/server/lib/db/line/get.js | 0 lib/www/server/lib/db/line/index.js | 9 +++++ .../server/lib/db/{line.js => line/list.js} | 6 ++-- lib/www/server/lib/db/line/patch.js | 33 +++++++++++++++++++ lib/www/server/lib/db/line/post.js | 0 lib/www/server/lib/db/line/put.js | 0 10 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 lib/www/server/lib/db/line/delete.js create mode 100644 lib/www/server/lib/db/line/get.js create mode 100644 lib/www/server/lib/db/line/index.js rename lib/www/server/lib/db/{line.js => line/list.js} (94%) create mode 100644 lib/www/server/lib/db/line/patch.js create mode 100644 lib/www/server/lib/db/line/post.js create mode 100644 lib/www/server/lib/db/line/put.js diff --git a/lib/www/server/api/index.js b/lib/www/server/api/index.js index 4747d61..648a97f 100644 --- a/lib/www/server/api/index.js +++ b/lib/www/server/api/index.js @@ -91,11 +91,11 @@ app.map({ '/project/:project/line/': { get: [ mw.line.list ], }, -// '/project/:project/line/:line': { + '/project/:project/line/:line': { // get: [ mw.line.get ], -// patch: [ mw.line.patch ], -// }, -// + patch: [ mw.line.patch ], + }, + '/project/:project/sequence/': { get: [ mw.sequence.list ], }, diff --git a/lib/www/server/api/middleware/line/index.js b/lib/www/server/api/middleware/line/index.js index ac72b9b..9370e60 100644 --- a/lib/www/server/api/middleware/line/index.js +++ b/lib/www/server/api/middleware/line/index.js @@ -1,4 +1,5 @@ module.exports = { list: require('./list'), -// get: require('./get') + get: require('./get'), + patch: require('./patch') }; diff --git a/lib/www/server/api/middleware/line/patch.js b/lib/www/server/api/middleware/line/patch.js index e69de29..c931ac2 100644 --- a/lib/www/server/api/middleware/line/patch.js +++ b/lib/www/server/api/middleware/line/patch.js @@ -0,0 +1,17 @@ + +const { line } = require('../../../lib/db'); + +module.exports = async function (req, res, next) { + + try { + const payload = req.body; + + await line.patch(req.params.project, req.params.line, payload); + res.status(201).send(); + next(); + } catch (err) { + next(err); + } + + +}; diff --git a/lib/www/server/lib/db/line/delete.js b/lib/www/server/lib/db/line/delete.js new file mode 100644 index 0000000..e69de29 diff --git a/lib/www/server/lib/db/line/get.js b/lib/www/server/lib/db/line/get.js new file mode 100644 index 0000000..e69de29 diff --git a/lib/www/server/lib/db/line/index.js b/lib/www/server/lib/db/line/index.js new file mode 100644 index 0000000..8a0f6fc --- /dev/null +++ b/lib/www/server/lib/db/line/index.js @@ -0,0 +1,9 @@ + +module.exports = { + list: require('./list'), + get: require('./get'), + post: require('./post'), + put: require('./put'), + patch: require('./patch'), + delete: require('./delete') +} diff --git a/lib/www/server/lib/db/line.js b/lib/www/server/lib/db/line/list.js similarity index 94% rename from lib/www/server/lib/db/line.js rename to lib/www/server/lib/db/line/list.js index 675462f..0d61516 100644 --- a/lib/www/server/lib/db/line.js +++ b/lib/www/server/lib/db/line/list.js @@ -1,4 +1,4 @@ -const { setSurvey } = require('./connection'); +const { setSurvey } = require('../connection'); async function list (projectId, opts = {}) { const client = await setSurvey(projectId); @@ -42,6 +42,4 @@ async function list (projectId, opts = {}) { return res.rows; } -module.exports = { - list -}; +module.exports = list; diff --git a/lib/www/server/lib/db/line/patch.js b/lib/www/server/lib/db/line/patch.js new file mode 100644 index 0000000..f6a9b59 --- /dev/null +++ b/lib/www/server/lib/db/line/patch.js @@ -0,0 +1,33 @@ +const { setSurvey, transaction } = require('../connection'); + +async function patch (projectId, line, payload, opts = {}) { + const client = await setSurvey(projectId); + + const patchables = { + "remarks": "UPDATE preplot_lines SET remarks = $2 WHERE line = $1;", + "meta": "UPDATE preplot_lines SET meta = $2 WHERE line = $1;", + "ntba": "UPDATE preplot_lines SET ntba = $2 WHERE line = $1;", + }; + + try { + transaction.begin(client); + for (const key in payload) { + const text = patchables[key]; + const values = [ line, 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; diff --git a/lib/www/server/lib/db/line/post.js b/lib/www/server/lib/db/line/post.js new file mode 100644 index 0000000..e69de29 diff --git a/lib/www/server/lib/db/line/put.js b/lib/www/server/lib/db/line/put.js new file mode 100644 index 0000000..e69de29