mirror of
https://gitlab.com/wgp/dougal/software.git
synced 2025-12-06 11:27:09 +00:00
Refactor db.event.post
This commit is contained in:
@@ -1,46 +1,66 @@
|
|||||||
const { setSurvey, transaction } = require('../connection');
|
const { setSurvey, transaction } = require('../connection');
|
||||||
|
|
||||||
async function insertSeqRemarks(remarks, shotNumber, sequence, client) {
|
async function insertSequenceEvent(event, client) {
|
||||||
const text = `
|
const text = `
|
||||||
INSERT INTO events_seq (remarks, shot_number, sequence)
|
INSERT INTO events_seq (remarks, point, sequence)
|
||||||
VALUES ($1, $2, $3)
|
VALUES ($1, $2, $3)
|
||||||
RETURNING id;
|
RETURNING id;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
console.log("insertSeqRemarks", text, remarks, shotNumber, sequence);
|
const res = await client.query(text, [event.remarks, event.point, event.sequence]);
|
||||||
return (await client.query(text, [remarks, shotNumber, sequence]))[0].id;
|
event.type = "sequence";
|
||||||
|
event.id = res.rows[0].id;
|
||||||
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function insertSeqLabel(label, eventId, client) {
|
async function insertSequenceEventLabels(event, client) {
|
||||||
|
if (event.type && event.type != "sequence") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const text = `
|
const text = `
|
||||||
INSERT INTO events_seq_labels (label, id)
|
INSERT INTO events_seq_labels (id, label)
|
||||||
VALUES ($1, $2);
|
SELECT $1, name
|
||||||
|
FROM unnest($2::text[]) l (name)
|
||||||
|
INNER JOIN labels USING (name)
|
||||||
|
WHERE (data->'model'->'user')::boolean IS true
|
||||||
`;
|
`;
|
||||||
|
|
||||||
console.log("insertSeqLabel", text, label, eventId);
|
// console.log("insertSequenceEventLabels", text, event);
|
||||||
return await client.query(text, [label, eventId]);
|
return await client.query(text, [event.id, event.labels]);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function insertShotLabel(label, shotNumber, sequence, client) {
|
async function insertTimedEvent(event, client) {
|
||||||
const text = `
|
const text = `
|
||||||
INSERT INTO events_seq_shots_labels (label, shot_number, sequence)
|
INSERT INTO events_timed (remarks, tstamp)
|
||||||
VALUES ($1, $2, $3);
|
VALUES ($1, $2)
|
||||||
|
RETURNING id;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
console.log("insertShotLabel", text, label, shotNumber, sequence);
|
const res = await client.query(text, [event.remarks, event.tstamp]);
|
||||||
return await client.query(text, [label, shotNumber, sequence]);
|
event.type = "timed";
|
||||||
|
event.id = res.rows[0].id;
|
||||||
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function insertTimedEventLabel(label, eventId, client) {
|
async function insertTimedEventLabels(event, client) {
|
||||||
|
if (event.type && event.type != "timed") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const text = `
|
const text = `
|
||||||
INSERT INTO events_timed_labels (label, id)
|
INSERT INTO events_timed_labels (id, label)
|
||||||
VALUES ($1, $2);
|
SELECT $1, name
|
||||||
|
FROM unnest($2::text[]) l (name)
|
||||||
|
INNER JOIN labels USING (name)
|
||||||
|
WHERE (data->'model'->'user')::boolean IS true
|
||||||
`;
|
`;
|
||||||
|
|
||||||
console.log("insertTimedEventLabel", text, label, eventId);
|
// console.log("insertTimedEventLabels", text, event);
|
||||||
return await client.query(text, [label, eventId]);
|
return await client.query(text, [event.id, event.labels]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserts events into the database.
|
* Inserts events into the database.
|
||||||
*
|
*
|
||||||
@@ -50,8 +70,7 @@ async function insertTimedEventLabel(label, eventId, client) {
|
|||||||
*
|
*
|
||||||
* {
|
* {
|
||||||
* remarks: "…",
|
* remarks: "…",
|
||||||
* ts0: "…",
|
* tstamp: "…",
|
||||||
* ts1: "…",
|
|
||||||
* labels: [ "…", "…", … ]
|
* labels: [ "…", "…", … ]
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
@@ -67,7 +86,7 @@ async function insertTimedEventLabel(label, eventId, client) {
|
|||||||
* In both cases, either remarks or labels may be omitted.
|
* In both cases, either remarks or labels may be omitted.
|
||||||
*/
|
*/
|
||||||
async function post (projectId, payload, opts = {}) {
|
async function post (projectId, payload, opts = {}) {
|
||||||
console.log("post event", projectId, payload);
|
// console.log("post event", projectId, payload);
|
||||||
|
|
||||||
const client = await setSurvey(projectId);
|
const client = await setSurvey(projectId);
|
||||||
await transaction.begin(client);
|
await transaction.begin(client);
|
||||||
@@ -75,39 +94,21 @@ async function post (projectId, payload, opts = {}) {
|
|||||||
if (!Array.isArray(payload)) {
|
if (!Array.isArray(payload)) {
|
||||||
payload = [payload];
|
payload = [payload];
|
||||||
}
|
}
|
||||||
|
// console.log("Payload", payload);
|
||||||
|
|
||||||
for (const event of payload) {
|
for (const event of payload) {
|
||||||
console.log("Event", event);
|
// console.log("Event", event);
|
||||||
if (event.sequence && event.shotNumber) {
|
if (event.sequence && event.point) {
|
||||||
// A shot event
|
// A shot event
|
||||||
console.log("Shot event");
|
// console.log("Shot event");
|
||||||
if (event.remarks) {
|
await insertSequenceEvent(event, client);
|
||||||
const eventId = await insertSeqRemarks(event.remarks, event.shotNumber, event.sequence, client);
|
await insertSequenceEventLabels(event, client);
|
||||||
console.log("eventId", eventId);
|
} else if (event.tstamp) {
|
||||||
if (event.labels) {
|
|
||||||
for (const label of event.labels) {
|
|
||||||
await insertSeqLabel(label, eventId, client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (event.labels) {
|
|
||||||
// A label event
|
|
||||||
for (const label of event.labels) {
|
|
||||||
await insertShotLabel(label, event.shotNumber, event.sequence, client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (event.ts0) {
|
|
||||||
// A timed event
|
// A timed event
|
||||||
|
|
||||||
// Called even if remarks is blank, as timed labels are always associated
|
// console.log("Timed event");
|
||||||
// with an event id from events_timed.
|
await insertTimedEvent(event, client);
|
||||||
const eventId = await insertTimedEvent(event.remarks, event.ts0, event.ts1, client);
|
await insertTimedEventLabels(event, client);
|
||||||
|
|
||||||
if (event.labels) {
|
|
||||||
for (const label of event.labels) {
|
|
||||||
await insertTimedEventLabel(label, eventId, client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user