Some quick updates after testing.

This commit is contained in:
mike12345567 2021-06-15 13:50:41 +01:00
parent 7e9b9f2180
commit 0cf316d2d6
7 changed files with 20 additions and 16 deletions

View File

@ -53,6 +53,10 @@ async function handleRequest(
entityId: tableName, entityId: tableName,
operation, operation,
}, },
resource: {
// not specifying any fields means "*"
fields: [],
},
filters: idFilters != null ? idFilters : filters, filters: idFilters != null ? idFilters : filters,
sort, sort,
paginate, paginate,
@ -68,7 +72,7 @@ exports.patch = async ctx => {
const id = inputs._id const id = inputs._id
// don't save the ID to db // don't save the ID to db
delete inputs._id delete inputs._id
ctx.body = await handleRequest(appId, DataSourceOperation.UPDATE, tableId, { return handleRequest(appId, DataSourceOperation.UPDATE, tableId, {
id, id,
row: inputs, row: inputs,
}) })
@ -81,7 +85,7 @@ exports.save = async ctx => {
return exports.patch(ctx) return exports.patch(ctx)
} }
const tableId = ctx.params.tableId const tableId = ctx.params.tableId
ctx.body = await handleRequest(appId, DataSourceOperation.CREATE, tableId, { return handleRequest(appId, DataSourceOperation.CREATE, tableId, {
row: inputs, row: inputs,
}) })
} }
@ -96,14 +100,14 @@ exports.fetchView = async ctx => {
exports.fetch = async ctx => { exports.fetch = async ctx => {
const appId = ctx.appId const appId = ctx.appId
const tableId = ctx.params.tableId const tableId = ctx.params.tableId
ctx.body = await handleRequest(appId, DataSourceOperation.READ, tableId) return handleRequest(appId, DataSourceOperation.READ, tableId)
} }
exports.find = async ctx => { exports.find = async ctx => {
const appId = ctx.appId const appId = ctx.appId
const id = ctx.params.rowId const id = ctx.params.rowId
const tableId = ctx.params.tableId const tableId = ctx.params.tableId
ctx.body = await handleRequest(appId, DataSourceOperation.READ, tableId, { return handleRequest(appId, DataSourceOperation.READ, tableId, {
id, id,
}) })
} }
@ -111,7 +115,7 @@ exports.find = async ctx => {
exports.destroy = async ctx => { exports.destroy = async ctx => {
const appId = ctx.appId const appId = ctx.appId
const tableId = ctx.params.tableId const tableId = ctx.params.tableId
ctx.body = await handleRequest(appId, DataSourceOperation.DELETE, tableId, { return handleRequest(appId, DataSourceOperation.DELETE, tableId, {
id: ctx.request.body._id, id: ctx.request.body._id,
}) })
} }
@ -128,7 +132,7 @@ exports.bulkDestroy = async ctx => {
})) }))
} }
await Promise.all(promises) await Promise.all(promises)
ctx.body = { response: { ok: true }, rows } return { response: { ok: true }, rows }
} }
exports.search = async ctx => { exports.search = async ctx => {
@ -153,7 +157,7 @@ exports.search = async ctx => {
[params.sort]: direction, [params.sort]: direction,
} }
} }
ctx.body = await handleRequest(appId, DataSourceOperation.READ, tableId, { return handleRequest(appId, DataSourceOperation.READ, tableId, {
filters: query, filters: query,
sort, sort,
paginate: paginateObj, paginate: paginateObj,
@ -162,10 +166,10 @@ exports.search = async ctx => {
exports.validate = async ctx => { exports.validate = async ctx => {
// can't validate external right now - maybe in future // can't validate external right now - maybe in future
ctx.body = { valid: true } return { valid: true }
} }
exports.fetchEnrichedRow = async ctx => { exports.fetchEnrichedRow = async ctx => {
// TODO: How does this work // TODO: How does this work
ctx.throw(501, "Not implemented") throw "Not Implemented"
} }

View File

@ -18,7 +18,7 @@ validateJs.extend(validateJs.validators.datetime, {
exports.makeExternalQuery = async (appId, json) => { exports.makeExternalQuery = async (appId, json) => {
const datasourceId = json.endpoint.datasourceId const datasourceId = json.endpoint.datasourceId
const database = new CouchDB(ctx.appId) const database = new CouchDB(appId)
const datasource = await database.get(datasourceId) const datasource = await database.get(datasourceId)
const Integration = integrations[datasource.source] const Integration = integrations[datasource.source]
// query is the opinionated function // query is the opinionated function

View File

@ -3,8 +3,6 @@ const { DataSourceOperation, SortDirection } = require("../../constants")
const BASE_LIMIT = 5000 const BASE_LIMIT = 5000
function addFilters(query, filters) { function addFilters(query, filters) {
// if all or specified in filters, then everything is an or
const allOr = !!filters.allOr
function iterate(structure, fn) { function iterate(structure, fn) {
for (let [key, value] of Object.entries(structure)) { for (let [key, value] of Object.entries(structure)) {
fn(key, value) fn(key, value)
@ -13,6 +11,8 @@ function addFilters(query, filters) {
if (!filters) { if (!filters) {
return query return query
} }
// if all or specified in filters, then everything is an or
const allOr = !!filters.allOr
if (filters.string) { if (filters.string) {
iterate(filters.string, (key, value) => { iterate(filters.string, (key, value) => {
const fnc = allOr ? "orWhere" : "where" const fnc = allOr ? "orWhere" : "where"

View File

@ -53,7 +53,7 @@ const SCHEMA = {
async function internalQuery(client, sql) { async function internalQuery(client, sql) {
try { try {
return await client.query(sql) return await client.query(sql.sql, sql.bindings)
} catch (err) { } catch (err) {
throw new Error(err) throw new Error(err)
} }

View File

@ -57,7 +57,7 @@ function internalQuery(client, query) {
// Node MySQL is callback based, so we must wrap our call in a promise // Node MySQL is callback based, so we must wrap our call in a promise
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.connect() client.connect()
return client.query(query, (error, results) => { return client.query(query.sql, query.bindings, (error, results) => {
if (error) { if (error) {
reject(error) reject(error)
} else { } else {

View File

@ -119,7 +119,7 @@ class PostgresPlus extends Sql {
async query(json) { async query(json) {
const operation = this._operation(json).toLowerCase() const operation = this._operation(json).toLowerCase()
const sql = this._query(json) const sql = this._query(json)
const response = await this.client.query(sql) const response = await this.client.query(sql.sql, sql.bindings)
return response.rows.length ? response.rows : [{ [operation]: true }] return response.rows.length ? response.rows : [{ [operation]: true }]
} }
} }

View File

@ -57,7 +57,7 @@ const SCHEMA = {
async function internalQuery(client, sql) { async function internalQuery(client, sql) {
try { try {
return await client.query(sql) return await client.query(sql.sql, sql.bindings)
} catch (err) { } catch (err) {
throw new Error(err) throw new Error(err)
} }