lib_factory_model_find-one-record.js
import { cloneOptions } from './helper.js'
const action = 'findOneRecord'
/**
* Finds a single record from the model's underlying data store based on the provided filter.
*
* If no arguments are provided, it automatically turns into a chainable {@link DoboAction} object.
* @async
* @memberof DoboModel
* @method
* @param {DoboModel.TFilter} filter - The filter parameters for finding the record.
* @param {DoboModel.TOptions} [opts] - Options object.
* @returns {DoboAction|DoboModel.TResultFindRecord|Array<DoboModel.TRecord>}
* @see {@link DoboModel.THookBeforeFindRecord}
*/
async function findOneRecord (...args) {
if (args.length === 0) return this.action(action, ...args)
const { getDefaultValues } = this.app.dobo
const [params = {}, opts = {}] = args
const { cloneDeep } = this.app.lib._
opts.dataOnly = opts.dataOnly ?? true
const { dataOnly } = opts
if (dataOnly) opts.count = false
const nFilter = cloneDeep(params || {})
const nOptions = cloneOptions.call(this, opts)
nOptions.count = false
nOptions.dataOnly = false
nFilter.limit = 1
const { warnings } = getDefaultValues(nOptions)
const resp = await this.findRecord(nFilter, nOptions)
const data = resp.data[0]
const result = { data, warnings: resp.warnings }
if (!warnings) delete result.warnings
return dataOnly ? data : result
}
export default findOneRecord