src/support/toMongooseStringQuery.js
import inflector from './inflector';import debug from './debug';/** @ignore */Function `prepareQuery` has 27 lines of code (exceeds 25 allowed). Consider refactoring.
Function `prepareQuery` has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.async function prepareQuery (database, model, query, item) { let [modelname, property] = item.split('.'); let prequery = {}; let value = (query.value ? query.value : query[item]); value = query.condition === '===' ? value : (property === 'id' ? value : new RegExp(`.*${value}.*`)); prequery[property] = value; let finds = []; if (property === 'id') { finds = [await database[inflector.pluralize(modelname)].findById(value)]; } else { finds = await database[inflector.pluralize(modelname)].find({ where: prequery }); } let term = modelname; switch (model.relations[modelname].type) { case 'belongsTo': term = model.relations[modelname].keyFrom; break; /* istanbul ignore next */ case 'hasMany': debug('hasMany');TODO found // TODO: camintejs does not allow me to do this; break; } return { key: term, condition: 'some', value: finds.map(m => m._id) };}/** @ignore */Function `getQuery` has 31 lines of code (exceeds 25 allowed). Consider refactoring.
Function `getQuery` has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.async function getQuery (database, model, filtergroup) { let group = []; for (let index in filtergroup) { let filter = filtergroup[index]; if (filter.key.indexOf('.') > -1) { filter = await prepareQuery(database, model, filter, filter.key); } if (index > 0) { group.push(filtergroup[index - 1].link === 'or' ? '||' : '&&'); } switch (filter.condition) { case 'like': group.push(`(this.${filter.key}.search(/${filter.value}/ig)>-1) `); break; case 'in': group.push(`(['${filter.value.join("', '", '')}'].indexOf(this.${filter.key})>-1)`); break; case 'some': group.push(`(['${filter.value.join("', '", '')}'].some(function(r){return r == that.${filter.key}}))`); break; case '==': group.push(`this.${filter.key}.search('${filter.value}')>-1`); break; case '===': group.push(`this.${filter.key} === '${filter.value}'`); break; default: group.push(`(this.${filter.key} ${filter.condition} '${filter.value}') `); break; } } return group.join(' ');}/** @ignore */Function `buildFilterSet` has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.async function buildFilterSet (query, model, database) { let filterset = query.filterset || []; if (query.filterset) { delete query.filterset; } let searchgroup = { filters: [], link: null }; for (let item in query) { if (item.indexOf('.') > -1) { searchgroup.filters.push(await prepareQuery(database, model, query, item)); } else { searchgroup.filters.push({ key: item, condition: 'like', value: query[item] }); } if (filterset.length > 0) { filterset[filterset.length - 1].link = 'and'; } filterset.push(searchgroup); } return filterset;}/** @ignore */Function `toMongooseStringQuery` has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.export default async function toMongooseStringQuery (queryBody, model, database) { let filterset = await buildFilterSet(queryBody, model, database); let query = []; for (let index in filterset) { let filtergroup = filterset[index]; if (index > 0) { query.push(filterset[index - 1].link === 'or' ? '||' : '&&'); } query.push(`(${await getQuery(database, model, filtergroup.filters)})`); } /* istanbul ignore else */ if (query.length > 0) { query.splice(0, 0, 'var that=this;return '); } else { query.push('return true'); } return query.join(' ') + ';';}