Files
dougal-software/lib/www/server/lib/db/event/list.js
2020-08-22 20:23:28 +02:00

37 lines
1.1 KiB
JavaScript

const { setSurvey } = require('../connection');
async function list (projectId, opts = {}) {
const client = await setSurvey(projectId);
const sortFields = [ "sequence", "point", "tstamp", "remarks" ];
const sortKey = opts.sortBy && sortFields.includes(opts.sortBy) && opts.sortBy || "tstamp";
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(tstamp) BETWEEN SYMMETRIC $1 AND $2", [ opts.date0, opts.date1 ] ]
: [ "date(tstamp) = $1", [ opts.date0 ] ]
: [ "true = true", [] ];
const text = `
SELECT *,
array(SELECT label FROM events_labels l WHERE l.type = e.type AND l.id = e.id) labels
FROM events e
WHERE
${filter[0]}
ORDER BY ${sortKey} ${sortDir};
`;
const res = await client.query(text, filter[1]);
client.release();
return res.rows;
}
module.exports = list;