dobo
Version:
Database ORM/ODM for Bajo Framework
24 lines (21 loc) • 1.11 kB
JavaScript
import resolveMethod from '../../lib/resolve-method.js'
async function aggregate (name, filter = {}, options = {}) {
const { runHook } = this.app.bajo
const { dataOnly = true, noHook, aggregate } = options
options.dataOnly = false
await this.modelExists(name, true)
const { handler, schema, driver } = await resolveMethod.call(this, name, 'stat-aggregate', options)
if (!noHook) {
await runHook(`${this.name}:beforeStatAggregate`, name, aggregate, filter, options)
await runHook(`${this.name}.${name}:beforeStatAggregate`, aggregate, filter, options)
}
filter.query = await this.buildQuery({ filter, schema, options }) ?? {}
filter.match = this.buildMatch({ input: filter.match, schema, options }) ?? {}
const rec = await handler.call(this.app[driver.ns], { schema, filter, options })
if (!noHook) {
await runHook(`${this.name}.${name}:afterStatAggregate`, aggregate, filter, options, rec)
await runHook(`${this.name}:afterStatAggregate`, name, aggregate, filter, options, rec)
}
return dataOnly ? rec.data : rec
}
export default aggregate