eventdata api

This commit is contained in:
Brian Cao 2022-10-18 15:54:17 -07:00
parent b948f0d381
commit 67394194af
9 changed files with 230 additions and 14 deletions

View file

@ -85,6 +85,60 @@ function getTimestampInterval(field) {
}
}
function getJsonField(column, property, value) {
const db = getDatabaseType(process.env.DATABASE_URL);
if (db === POSTGRESQL) {
let accessor = `${column} ->> '${property}'`;
if (value && typeof value === 'number') {
accessor = `CAST(${accessor} AS DECIMAL)`;
}
return accessor;
}
if (db === MYSQL) {
return `${column} ->> "$.${property}"`;
}
}
function getEventDataColumnsQuery(column, columns) {
const query = Object.keys(columns).reduce((arr, key) => {
const filter = columns[key];
if (filter === undefined) {
return arr;
}
arr.push(`${filter}(${getJsonField(column, key)})`);
return arr;
}, []);
return query.join(',\n');
}
function getEventDataFilterQuery(column, filters) {
const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key];
if (filter === undefined) {
return arr;
}
arr.push(
`${getJsonField(column, key, filter)} = ${
typeof filter === 'string' ? `'${filter}'` : filter
}`,
);
return arr;
}, []);
return query.join('\nand ');
}
function getFilterQuery(table, column, filters = {}, params = []) {
const query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key];
@ -193,6 +247,8 @@ export default {
getDateQuery,
getTimestampInterval,
getFilterQuery,
getEventDataColumnsQuery,
getEventDataFilterQuery,
parseFilters,
rawQuery,
transaction,