diff --git a/lib/www/server/api/middleware/event/get.js b/lib/www/server/api/middleware/event/get.js deleted file mode 100644 index e69de29..0000000 diff --git a/lib/www/server/api/middleware/event/get/geojson.js b/lib/www/server/api/middleware/event/get/geojson.js new file mode 100644 index 0000000..5b98068 --- /dev/null +++ b/lib/www/server/api/middleware/event/get/geojson.js @@ -0,0 +1,28 @@ + +const { event } = require('../../../../lib/db'); + +const geojson = async function (req, res, next) { + try { + const query = req.query; + query.sequence = req.params.sequence; + const events = await event.list(req.params.project, query); + const response = { + type: "FeatureCollection", + features: events.filter(event => event.geometry).map(event => { + const feature = { + type: "Feature", + geometry: event.geometry, + properties: event + }; + delete feature.properties.geometry; + return feature; + }) + }; + res.status(200).send(response); + next(); + } catch (err) { + next(err); + } +} + +module.exports = geojson; diff --git a/lib/www/server/api/middleware/event/get/html.js b/lib/www/server/api/middleware/event/get/html.js new file mode 100644 index 0000000..3f31f45 --- /dev/null +++ b/lib/www/server/api/middleware/event/get/html.js @@ -0,0 +1,23 @@ +const { event, sequence, configuration } = require('../../../../lib/db'); +const { transform } = require('../../../../lib/sse'); +const render = require('../../../../lib/render'); + +const html = async function (req, res, next) { + try { + const query = req.query; + query.sequence = req.params.sequence; + const events = await event.list(req.params.project, query); + const sequences = await sequence.list(req.params.project, query); + const seis = transform(events, sequences, {projectId: req.params.project}); + const templates = await configuration.get(req.params.project, "sse/templates"); + const template = templates[0].template; + + const response = await render(seis, template); + res.status(200).send(response); + next(); + } catch (err) { + next(err); + } +}; + +module.exports = html; diff --git a/lib/www/server/api/middleware/event/get/index.js b/lib/www/server/api/middleware/event/get/index.js new file mode 100644 index 0000000..4f12da1 --- /dev/null +++ b/lib/www/server/api/middleware/event/get/index.js @@ -0,0 +1,27 @@ +const json = require('./json'); +const geojson = require('./geojson'); +const seis = require('./seis'); +const html = require('./html'); + +module.exports = async function (req, res, next) { + try { + const handlers = { + "application/json": json, + "application/geo+json": geojson, + "application/vnd.seis+json": seis, + "text/html": html, + }; + + const mimetype = (handlers[req.query.mime] && req.query.mime) || req.accepts(Object.keys(handlers)); + + if (mimetype) { + res.set("Content-Type", mimetype); + await handlers[mimetype](req, res, next); + } else { + res.status(406).send(); + next(); + } + } catch (err) { + next(err); + } +} diff --git a/lib/www/server/api/middleware/event/get/json.js b/lib/www/server/api/middleware/event/get/json.js new file mode 100644 index 0000000..8988a31 --- /dev/null +++ b/lib/www/server/api/middleware/event/get/json.js @@ -0,0 +1,16 @@ + +const { event } = require('../../../../lib/db'); + +const json = async function (req, res, next) { + try { + const query = req.query; + query.sequence = req.params.sequence; + const response = await event.list(req.params.project, query); + res.status(200).send(response); + next(); + } catch (err) { + next(err); + } +}; + +module.exports = json; diff --git a/lib/www/server/api/middleware/event/get/seis.js b/lib/www/server/api/middleware/event/get/seis.js new file mode 100644 index 0000000..5d73862 --- /dev/null +++ b/lib/www/server/api/middleware/event/get/seis.js @@ -0,0 +1,18 @@ +const { event, sequence } = require('../../../../lib/db'); +const { transform } = require('../../../../lib/sse'); + +const seis = async function (req, res, next) { + try { + const query = req.query; + query.sequence = req.params.sequence; + const events = await event.list(req.params.project, query); + const sequences = await sequence.list(req.params.project, query); + const response = transform(events, sequences, {projectId: req.params.project}); + res.status(200).send(response); + next(); + } catch (err) { + next(err); + } +}; + +module.exports = seis;