src/model/buildBaseQuery.js
// @flow
import cloneDeep from 'lodash.clonedeep';
import { merge } from 'lodash';
import { buildFilterQuery } from './buildFilterQuery';
/**
* sets find(queryObject) with provided baseQuery plus additional filters
* @public
* @param {object} args - query arguments for the .find() method
* @return {object} baseQuery - base query for the find method
*/
export function buildBaseQuery(args: any): any {
let query = {};
// if there is already a baseQuery provided from other model methods
// apply the baseQuery to this query as a base
if (args && args.baseQuery) {
query = cloneDeep(args.baseQuery);
}
// if the user chose further filter criterias, build and merge them here
if (args && args.filter) {
query = merge(query, buildFilterQuery(args.filter));
}
// for pagination
// default
let lastCreatedAt = 0;
// if there was sent a lastCreatedAt with the args, then use that instead
if (
args.lastCreatedAt &&
(args.lastCreatedAt !== '' && typeof args.lastCreatedAt !== 'object')
) {
lastCreatedAt = args.lastCreatedAt;
}
// check if the user entered a different filter criteria for "createdAt"
// if so, take the one from the user, otherwise use the default for pagination
if (!query['createdAt']) {
query['createdAt'] = { $gt: lastCreatedAt };
}
return query;
}