mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 11:37:08 +00:00
Implement db.event.put
This commit is contained in:
@@ -0,0 +1,142 @@
|
|||||||
|
const { setSurvey, transaction } = require('../connection');
|
||||||
|
|
||||||
|
async function updateTimedEvent (event, client) {
|
||||||
|
|
||||||
|
const text = `
|
||||||
|
UPDATE events_timed
|
||||||
|
SET
|
||||||
|
remarks = COALESCE($2, remarks),
|
||||||
|
tstamp = COALESCE($3, tstamp)
|
||||||
|
WHERE id = $1;
|
||||||
|
`
|
||||||
|
|
||||||
|
return await client.query(text, [event.id, event.remarks, event.tstamp]);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateSeqEvent (event, client) {
|
||||||
|
|
||||||
|
const text = `
|
||||||
|
UPDATE events_seq
|
||||||
|
SET
|
||||||
|
remarks = COALESCE($2, remarks),
|
||||||
|
sequence = COALESCE($3, sequence),
|
||||||
|
point = COALESCE($4, point)
|
||||||
|
WHERE id = $1;
|
||||||
|
`
|
||||||
|
|
||||||
|
return await client.query(text, [event.id, event.remarks, event.sequence, event.point]);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateTimedEventLabels (event, client) {
|
||||||
|
if (!event.labels) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
await client.query("DELETE FROM events_timed_labels WHERE id = $1;", [event.id]);
|
||||||
|
|
||||||
|
const text = `
|
||||||
|
INSERT INTO events_timed_labels (id, label)
|
||||||
|
SELECT $1, label FROM unnest($2::text[]) t (label);
|
||||||
|
`;
|
||||||
|
|
||||||
|
return client.query(text, [event.id, event.labels]);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateSeqEventLabels (event, client) {
|
||||||
|
if (!event.labels) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
await client.query("DELETE FROM events_seq_labels WHERE id = $1;", [event.id]);
|
||||||
|
|
||||||
|
const text = `
|
||||||
|
INSERT INTO events_seq_labels (id, label)
|
||||||
|
SELECT $1, label FROM unnest($2::text[]) t (label);
|
||||||
|
`;
|
||||||
|
|
||||||
|
return client.query(text, [event.id, event.labels]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates events in the database.
|
||||||
|
*
|
||||||
|
* Events may have the following forms:
|
||||||
|
*
|
||||||
|
* Event associated with a time:
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* type: "timed",
|
||||||
|
* id: 0,
|
||||||
|
* remarks: "…",
|
||||||
|
* tstamp: "…",
|
||||||
|
* labels: [ "…", "…", … ]
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Events associated with a sequence / shotpoint:
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* type: "seq"
|
||||||
|
* remarks: "…",
|
||||||
|
* point: 0000,
|
||||||
|
* sequence: 000,
|
||||||
|
* labels: [ "…", "…", … ]
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* In both cases, either remarks or labels may be omitted.
|
||||||
|
*
|
||||||
|
* Labels associated with a sequence / shotpoint (without event):
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* type: "shot_labels",
|
||||||
|
* point: 0000,
|
||||||
|
* sequence: 000,
|
||||||
|
* labels: [ "…", "…", … ] // Sets these labels
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* type: "shot_labels",
|
||||||
|
* point: 0000,
|
||||||
|
* sequence: 000,
|
||||||
|
* labels: {
|
||||||
|
* add: […], // Adds these labels
|
||||||
|
* remove: […] // Removes these labels
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
async function put (projectId, payload, opts = {}) {
|
||||||
|
// console.log("put event", projectId, payload);
|
||||||
|
|
||||||
|
const client = await setSurvey(projectId);
|
||||||
|
await transaction.begin(client);
|
||||||
|
try {
|
||||||
|
if (!Array.isArray(payload)) {
|
||||||
|
payload = [payload];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const event of payload) {
|
||||||
|
// console.log("Event", event);
|
||||||
|
|
||||||
|
switch (event.type) {
|
||||||
|
case "timed":
|
||||||
|
await updateTimedEvent(event, client);
|
||||||
|
await updateTimedEventLabels(event, client)
|
||||||
|
break;
|
||||||
|
case "sequence":
|
||||||
|
await updateSeqEvent(event, client);
|
||||||
|
await updateSeqEventLabels(event, client);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Error?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
transaction.commit(client);
|
||||||
|
} catch (err) {
|
||||||
|
transaction.rollback(client)
|
||||||
|
} finally {
|
||||||
|
client.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = put;
|
||||||
|
|||||||
Reference in New Issue
Block a user