From 316117cb833fdd0fc9b6c1a33ed5a51845b8af8a Mon Sep 17 00:00:00 2001 From: "D. Berge" Date: Thu, 20 May 2021 18:16:26 +0200 Subject: [PATCH] Implement info.delete() database method. It deletes a (possibly deeply nested) element in the `info` table. --- lib/www/server/lib/db/info/delete.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib/www/server/lib/db/info/delete.js b/lib/www/server/lib/db/info/delete.js index e69de29..38139b4 100644 --- a/lib/www/server/lib/db/info/delete.js +++ b/lib/www/server/lib/db/info/delete.js @@ -0,0 +1,28 @@ +const { setSurvey, transaction } = require('../connection'); + +async function del (projectId, path, opts = {}) { + const client = await setSurvey(projectId); + const [key, ...jsonpath] = (path||"").split("/").filter(i => i.length); + + try { + const text = jsonpath.length + ? ` + UPDATE info + SET value = value #- $2 + WHERE key = $1; + ` + : ` + DELETE FROM info + WHERE key = $1; + `; + const values = jsonpath.length ? [key, jsonpath] : [key]; + await client.query(text, values); + } catch (err) { + console.error("ERROR", err); + throw err; + } finally { + client.release(); + } +} + +module.exports = del;