mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 12:17:08 +00:00
Implement GET middleware for events.
Produces a choice of outputs: JSON, GeoJSON, Seis+JSON and HTML.
This commit is contained in:
28
lib/www/server/api/middleware/event/get/geojson.js
Normal file
28
lib/www/server/api/middleware/event/get/geojson.js
Normal file
@@ -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;
|
||||
23
lib/www/server/api/middleware/event/get/html.js
Normal file
23
lib/www/server/api/middleware/event/get/html.js
Normal file
@@ -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;
|
||||
27
lib/www/server/api/middleware/event/get/index.js
Normal file
27
lib/www/server/api/middleware/event/get/index.js
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
16
lib/www/server/api/middleware/event/get/json.js
Normal file
16
lib/www/server/api/middleware/event/get/json.js
Normal file
@@ -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;
|
||||
18
lib/www/server/api/middleware/event/get/seis.js
Normal file
18
lib/www/server/api/middleware/event/get/seis.js
Normal file
@@ -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;
|
||||
Reference in New Issue
Block a user