mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 12:57:08 +00:00
API: Add event querying endpoint.
Events may be filtered by sequence(s): …/event?sequence=1 …/event?sequence=1;3;7 Events may be filtered by date: …/event?date0=1970-01-01 Events may be filtered by a date interval: …/event?date0=1970-01-01&date1=1980-01-01 Events may also be paginated.
This commit is contained in:
@@ -82,10 +82,10 @@ app.map({
|
||||
// patch: [ mw.sequence.patch ],
|
||||
// },
|
||||
//
|
||||
// '/project/:project/event/': {
|
||||
// get: [ mw.event.list ],
|
||||
'/project/:project/event/': {
|
||||
get: [ mw.event.list ],
|
||||
// post: [ mw.event.post ],
|
||||
// },
|
||||
},
|
||||
// '/project/:project/event/:event': {
|
||||
// get: [ mw.event.get ],
|
||||
// put: [ mw.event.put ],
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
module.exports = {
|
||||
list: require('./list'),
|
||||
get: require('./get'),
|
||||
post: require('./post'),
|
||||
put: require('./put'),
|
||||
delete: require('./delete')
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
const { event } = require('../../../lib/db');
|
||||
|
||||
module.exports = async function (req, res, next) {
|
||||
|
||||
res.status(200).send(await event.list(req.params.project, req.query));
|
||||
next();
|
||||
|
||||
};
|
||||
|
||||
0
lib/www/server/lib/db/event/delete.js
Normal file
0
lib/www/server/lib/db/event/delete.js
Normal file
0
lib/www/server/lib/db/event/get.js
Normal file
0
lib/www/server/lib/db/event/get.js
Normal file
8
lib/www/server/lib/db/event/index.js
Normal file
8
lib/www/server/lib/db/event/index.js
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
module.exports = {
|
||||
list: require('./list'),
|
||||
get: require('./get'),
|
||||
post: require('./post'),
|
||||
put: require('./put'),
|
||||
delete: require('./delete')
|
||||
}
|
||||
34
lib/www/server/lib/db/event/list.js
Normal file
34
lib/www/server/lib/db/event/list.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const { pool } = require('../connection');
|
||||
|
||||
async function list (projectId, opts = {}) {
|
||||
await pool.query("CALL set_survey($1);", [projectId]);
|
||||
|
||||
const sortFields = [ "sequence", "shot_number", "ts0", "ts1", "label", "remarks" ];
|
||||
const sortKey = opts.sortBy && sortFields.includes(opts.sortBy) && opts.sortBy || "ts0";
|
||||
const sortDir = (opts.sortDesc == "true" || !opts.sortDesc) ? "DESC" : "ASC";
|
||||
const offset = Math.abs((opts.page-1)*opts.itemsPerPage) || 0;
|
||||
const limit = Math.abs(Number(opts.itemsPerPage)) || null;
|
||||
|
||||
const filter = opts.sequence
|
||||
? opts.sequence.includes(";")
|
||||
? [ "sequence = ANY ( $1 )", [ opts.sequence.split(";") ] ]
|
||||
: [ "sequence = $1", [ opts.sequence ] ]
|
||||
: opts.date0
|
||||
? opts.date1
|
||||
? [ "date(ts0) BETWEEN SYMMETRIC $1 AND $2", [ opts.date0, opts.date1 ] ]
|
||||
: [ "date(ts0) = $1", [ opts.date0 ] ]
|
||||
: [ "true = true", [] ];
|
||||
|
||||
const text = `
|
||||
SELECT *
|
||||
FROM events
|
||||
WHERE
|
||||
${filter[0]}
|
||||
ORDER BY ${sortKey} ${sortDir};
|
||||
`;
|
||||
|
||||
const res = await pool.query(text, filter[1]);
|
||||
return res.rows;
|
||||
}
|
||||
|
||||
module.exports = list;
|
||||
0
lib/www/server/lib/db/event/post.js
Normal file
0
lib/www/server/lib/db/event/post.js
Normal file
0
lib/www/server/lib/db/event/put.js
Normal file
0
lib/www/server/lib/db/event/put.js
Normal file
@@ -3,5 +3,6 @@ module.exports = {
|
||||
project: require('./project'),
|
||||
line: require('./line'),
|
||||
sequence: require('./sequence'),
|
||||
gis: require('./gis')
|
||||
event: require('./event'),
|
||||
gis: require('./gis'),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user