mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 10:17:07 +00:00
Add additional formats for sequence list endpoint.
The original and default "Accept: application/json" will return a sequence summary. "Accept: application/geo+json" will return a GeoJSON of the entire project. "Accept: application/vnd.aaltronav.dougal+octet-stream" will return the entire project in Dougal's binary format.
This commit is contained in:
17
lib/www/server/api/middleware/sequence/list/binary.js
Normal file
17
lib/www/server/api/middleware/sequence/list/binary.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
const { bundle } = require('../../../../lib/binary');
|
||||||
|
const { sequence } = require('../../../../lib/db');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
const json = await sequence.get(req.params.project, null, req.query);
|
||||||
|
const data = bundle(json, {type: req.query.type});
|
||||||
|
console.log("bundle", data);
|
||||||
|
|
||||||
|
res.status(200).send(Buffer.from(data));
|
||||||
|
next();
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
33
lib/www/server/api/middleware/sequence/list/geojson.js
Normal file
33
lib/www/server/api/middleware/sequence/list/geojson.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
const { ERROR, INFO, DEBUG } = require('DOUGAL_ROOT/debug')(__filename);
|
||||||
|
|
||||||
|
const { sequence } = require('../../../../lib/db');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
const ts0 = Date.now();
|
||||||
|
const json = await sequence.get(req.params.project, null, req.query);
|
||||||
|
const geometry = req.query.geometry || "geometrypreplot";
|
||||||
|
const δt = Date.now()-ts0;
|
||||||
|
DEBUG("Full-project data retrieval completed in %.3f s", δt / 1000);
|
||||||
|
|
||||||
|
|
||||||
|
const geojson = {
|
||||||
|
type: "FeatureCollection",
|
||||||
|
features: json.map(feature => {
|
||||||
|
return {
|
||||||
|
type: "Feature",
|
||||||
|
geometry: feature[geometry],
|
||||||
|
properties: {...feature}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
res.status(200).send(geojson);
|
||||||
|
next();
|
||||||
|
} catch (err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
25
lib/www/server/api/middleware/sequence/list/index.js
Normal file
25
lib/www/server/api/middleware/sequence/list/index.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
const json = require('./json');
|
||||||
|
const geojson = require('./geojson');
|
||||||
|
const binary = require('./binary');
|
||||||
|
|
||||||
|
module.exports = async function (req, res, next) {
|
||||||
|
try {
|
||||||
|
const handlers = {
|
||||||
|
"application/json": json,
|
||||||
|
"application/geo+json": geojson,
|
||||||
|
"application/vnd.aaltronav.dougal+octet-stream": binary
|
||||||
|
};
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
|
|
||||||
const { sequence } = require('../../../lib/db');
|
const { sequence } = require('../../../../lib/db');
|
||||||
|
|
||||||
module.exports = async function (req, res, next) {
|
module.exports = async function (req, res, next) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
console.log("JSON");
|
||||||
res.status(200).send(await sequence.list(req.params.project, req.query));
|
res.status(200).send(await sequence.list(req.params.project, req.query));
|
||||||
next();
|
next();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Reference in New Issue
Block a user