diff --git a/lib/www/server/lib/db/gis/project/index.js b/lib/www/server/lib/db/gis/project/index.js index 3f88324..e32e6d1 100644 --- a/lib/www/server/lib/db/gis/project/index.js +++ b/lib/www/server/lib/db/gis/project/index.js @@ -3,5 +3,6 @@ module.exports = { bbox: require('./bbox'), preplot: require('./preplot'), raw: require('./raw'), - final: require('./final') + final: require('./final'), + layer: require('./layer') }; diff --git a/lib/www/server/lib/db/gis/project/layer/get.js b/lib/www/server/lib/db/gis/project/layer/get.js new file mode 100644 index 0000000..a50e30b --- /dev/null +++ b/lib/www/server/lib/db/gis/project/layer/get.js @@ -0,0 +1,28 @@ + +const { setSurvey } = require('../../../connection'); + +async function get (projectId, layerName, options = {}) { + + const client = await setSurvey(projectId); + + const text = ` + SELECT (data->>'data')::json data + FROM file_data + WHERE data->>'type' = 'map_layer' + AND data->>'format' = 'geojson' + AND data->>'name' = $1; + `; + + const values = [ layerName ]; + + const res = await client.query(text, values); + client.release(); + + if (res.rows && res.rows.length) { + return res.rows.map(row => row.data); + } else { + throw {status: 404}; + } +} + +module.exports = get; diff --git a/lib/www/server/lib/db/gis/project/layer/index.js b/lib/www/server/lib/db/gis/project/layer/index.js new file mode 100644 index 0000000..dfd9771 --- /dev/null +++ b/lib/www/server/lib/db/gis/project/layer/index.js @@ -0,0 +1,5 @@ + +module.exports = { + list: require('./list'), + get: require('./get') +}; diff --git a/lib/www/server/lib/db/gis/project/layer/list.js b/lib/www/server/lib/db/gis/project/layer/list.js new file mode 100644 index 0000000..199e9cb --- /dev/null +++ b/lib/www/server/lib/db/gis/project/layer/list.js @@ -0,0 +1,25 @@ + +const { setSurvey } = require('../../../connection'); + +async function list (projectId, options = {}) { + + const client = await setSurvey(projectId); + + const text = ` + SELECT DISTINCT data->>'name' name + FROM file_data + WHERE data->>'type' = 'map_layer' + AND data->>'format' = 'geojson'; + `; + + const res = await client.query(text); + client.release(); + + if (res.rows && res.rows.length) { + return res.rows.map(row => row.name); + } else { + throw {status: 404}; + } +} + +module.exports = list;