dobo-knex
Version:
Knex/SQL driver for Dobo
35 lines (31 loc) • 1.48 kB
JavaScript
import defErrorHandler from '../error-handler.js'
import getRecord from './get.js'
async function recordUpdate ({ schema, id, body, options }) {
const { isSet } = this.lib.aneka
const { importModule } = this.app.bajo
const { noResult } = options
const { getInfo } = this.app.dobo
const { pick } = this.lib._
const { instance, returning, driver } = getInfo(schema)
for (const p of schema.properties) {
if (['object', 'array'].includes(p.type) && isSet(body[p.name])) body[p.name] = JSON.stringify(body[p.name])
}
const old = await getRecord.call(this, { schema, id })
let result
const mod = await importModule(`${this.name}:/dobo/lib/${driver.type}/record-update.js`)
const errorHandler = await importModule(`${this.name}:/dobo/lib/${driver.type}/error-handler.js`)
try {
if (mod) result = await mod.call(this, { schema, id, body, oldBody: old.data, options })
else result = await instance.client(schema.name).where('id', id).update(body, ...returning)
} catch (err) {
throw errorHandler ? (await errorHandler.call(this, err)) : (await defErrorHandler.call(this, err))
}
if (noResult) return
if (!driver.returning) {
const resp = await getRecord.call(this, { schema, id, options: { thrownNotFound: false } })
if (returning[0].length > 0) resp.data = pick(resp.data, returning[0])
result = [resp.data]
}
return { oldData: old.data, data: result[0] }
}
export default recordUpdate