Clean up logging and formatting
This commit is contained in:
@@ -3,7 +3,6 @@ import {paramParser} from './paramParser';
|
||||
export default function apiQueryPlugin(schema) {
|
||||
|
||||
schema.statics.apiQuery = function (rawParams, cb) {
|
||||
console.log(rawParams);
|
||||
const model = this;
|
||||
const params = paramParser(this, rawParams);
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/* eslint-disable no-use-before-define,camelcase */
|
||||
export function paramParser(model, rawParams) {
|
||||
console.log('raw params', rawParams);
|
||||
|
||||
let query = {
|
||||
searchParams: {},
|
||||
@@ -14,7 +15,6 @@ export function paramParser(model, rawParams) {
|
||||
.match(/{\w+}(.[^{}]*)/g);
|
||||
|
||||
if (separatedParams === null) {
|
||||
console.log('separated params null');
|
||||
query = parseParam(key, rawParams[key], model, query);
|
||||
} else {
|
||||
for (let i = 0; i < separatedParams.length; ++i) {
|
||||
@@ -23,7 +23,7 @@ export function paramParser(model, rawParams) {
|
||||
}
|
||||
}
|
||||
|
||||
console.log(query, 'query object');
|
||||
console.log('query object', query);
|
||||
return query;
|
||||
}
|
||||
|
||||
@@ -35,8 +35,7 @@ function convertToBoolean(str) {
|
||||
str === '1';
|
||||
}
|
||||
|
||||
function parseParam (key, val, model, query) {
|
||||
console.log(key, val);
|
||||
function parseParam(key, val, model, query) {
|
||||
const lcKey = key;
|
||||
let operator = val.match(/\{(.*)\}/);
|
||||
val = val.replace(/\{(.*)\}/, '');
|
||||
@@ -59,113 +58,107 @@ function parseParam (key, val, model, query) {
|
||||
return query;
|
||||
}
|
||||
|
||||
function parseSchemaForKey(schema, query, keyPrefix, lcKey, val, operator) {
|
||||
function parseSchemaForKey(schema, query, keyPrefix, lcKey, val, operator) {
|
||||
let paramType;
|
||||
const addSearchParam = value => {
|
||||
const key = keyPrefix + lcKey;
|
||||
|
||||
let paramType;
|
||||
if (typeof query.searchParams[key] !== 'undefined') {
|
||||
for (let i in value) {
|
||||
query.searchParams[key][i] = value[i];
|
||||
}
|
||||
} else {
|
||||
query.searchParams[key] = value;
|
||||
}
|
||||
};
|
||||
|
||||
const addSearchParam = value => {
|
||||
const key = keyPrefix + lcKey;
|
||||
let matches = lcKey.match(/(.+)\.(.+)/);
|
||||
if (matches) {
|
||||
// parse subschema
|
||||
if (schema.paths[matches[1]].constructor.name === 'DocumentArray' ||
|
||||
schema.paths[matches[1]].constructor.name === 'Mixed') {
|
||||
parseSchemaForKey(schema.paths[matches[1]].schema, `${matches[1]}.`, matches[2], val, operator)
|
||||
}
|
||||
|
||||
if (typeof query.searchParams[key] !== 'undefined') {
|
||||
for (let i in value) {
|
||||
query.searchParams[key][i] = value[i];
|
||||
}
|
||||
} else if (typeof schema === 'undefined') {
|
||||
paramType = 'String';
|
||||
|
||||
} else if (typeof schema.paths[lcKey] === 'undefined') {
|
||||
// nada, not found
|
||||
} else if (operator === 'near') {
|
||||
paramType = 'Near';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'SchemaBoolean') {
|
||||
paramType = 'Boolean';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'SchemaString') {
|
||||
paramType = 'String';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'SchemaNumber') {
|
||||
paramType = 'Number';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'ObjectId') {
|
||||
paramType = 'ObjectId';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'SchemaArray') {
|
||||
paramType = 'Array';
|
||||
}
|
||||
|
||||
if (paramType === 'Boolean') {
|
||||
addSearchParam(convertToBoolean(val));
|
||||
} else if (paramType === 'Number') {
|
||||
if (val.match(/([0-9]+,?)/) && val.match(',')) {
|
||||
if (operator === 'all') {
|
||||
addSearchParam({$all: val.split(',')});
|
||||
} else if (operator === 'nin') {
|
||||
addSearchParam({$nin: val.split(',')});
|
||||
} else if (operator === 'mod') {
|
||||
addSearchParam({$mod: [val.split(',')[0], val.split(',')[1]]});
|
||||
} else {
|
||||
query.searchParams[key] = value;
|
||||
addSearchParam({$in: val.split(',')});
|
||||
}
|
||||
};
|
||||
|
||||
let matches = lcKey.match(/(.+)\.(.+)/);
|
||||
if (matches) {
|
||||
// parse subschema
|
||||
if (schema.paths[matches[1]].constructor.name === 'DocumentArray' ||
|
||||
schema.paths[matches[1]].constructor.name === 'Mixed') {
|
||||
parseSchemaForKey(schema.paths[matches[1]].schema, `${matches[1]}.`, matches[2], val, operator)
|
||||
} else if (val.match(/([0-9]+)/)) {
|
||||
if (operator === 'gt' ||
|
||||
operator === 'gte' ||
|
||||
operator === 'lt' ||
|
||||
operator === 'lte' ||
|
||||
operator === 'ne') {
|
||||
let newParam = {};
|
||||
newParam['$' + operator] = val;
|
||||
addSearchParam(newParam);
|
||||
} else {
|
||||
addSearchParam(parseInt(val));
|
||||
}
|
||||
|
||||
} else if (typeof schema === 'undefined') {
|
||||
paramType = 'String';
|
||||
|
||||
} else if (typeof schema.paths[lcKey] === 'undefined') {
|
||||
// nada, not found
|
||||
} else if (operator === 'near') {
|
||||
paramType = 'Near';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'SchemaBoolean') {
|
||||
paramType = 'Boolean';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'SchemaString') {
|
||||
paramType = 'String';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'SchemaNumber') {
|
||||
paramType = 'Number';
|
||||
} else if (schema.paths[lcKey].constructor.name === 'ObjectId') {
|
||||
paramType = 'ObjectId';
|
||||
}
|
||||
else if (schema.paths[lcKey].constructor.name === 'SchemaArray') {
|
||||
paramType = 'Array';
|
||||
}
|
||||
} else if (paramType === 'String') {
|
||||
if (val.match(',')) {
|
||||
const options = val.split(',').map(str => new RegExp(str, 'i'));
|
||||
|
||||
console.log('Param Type: ' + paramType);
|
||||
|
||||
if (paramType === 'Boolean') {
|
||||
addSearchParam(convertToBoolean(val));
|
||||
} else if (paramType === 'Number') {
|
||||
if (val.match(/([0-9]+,?)/) && val.match(',')) {
|
||||
if (operator === 'all') {
|
||||
addSearchParam({$all: val.split(',')});
|
||||
} else if (operator === 'nin') {
|
||||
addSearchParam({$nin: val.split(',')});
|
||||
} else if (operator === 'mod') {
|
||||
addSearchParam({$mod: [val.split(',')[0], val.split(',')[1]]});
|
||||
} else {
|
||||
addSearchParam({$in: val.split(',')});
|
||||
}
|
||||
} else if (val.match(/([0-9]+)/)) {
|
||||
if (operator === 'gt' ||
|
||||
operator === 'gte' ||
|
||||
operator === 'lt' ||
|
||||
operator === 'lte' ||
|
||||
operator === 'ne') {
|
||||
let newParam = {};
|
||||
newParam['$' + operator] = val;
|
||||
addSearchParam(newParam);
|
||||
} else {
|
||||
addSearchParam(parseInt(val));
|
||||
}
|
||||
if (operator === 'all') {
|
||||
addSearchParam({$all: options});
|
||||
} else if (operator === 'nin') {
|
||||
addSearchParam({$nin: options});
|
||||
} else {
|
||||
addSearchParam({$in: options});
|
||||
}
|
||||
} else if (paramType === 'String') {
|
||||
if (val.match(',')) {
|
||||
const options = val.split(',').map(str => new RegExp(str, 'i'));
|
||||
|
||||
if (operator === 'all') {
|
||||
addSearchParam({$all: options});
|
||||
} else if (operator === 'nin') {
|
||||
addSearchParam({$nin: options});
|
||||
} else {
|
||||
addSearchParam({$in: options});
|
||||
}
|
||||
} else if (val.match(/([0-9]+)/)) {
|
||||
if (operator === 'gt' ||
|
||||
operator === 'gte' ||
|
||||
operator === 'lt' ||
|
||||
operator === 'lte') {
|
||||
let newParam = {};
|
||||
newParam['$' + operator] = val;
|
||||
addSearchParam(newParam);
|
||||
} else {
|
||||
addSearchParam(val);
|
||||
}
|
||||
} else if (operator === 'ne' || operator === 'not') {
|
||||
const neregex = new RegExp(val, 'i');
|
||||
addSearchParam({'$not': neregex});
|
||||
} else if (operator === 'like') {
|
||||
addSearchParam({$regex: val, $options: '-i'});
|
||||
} else if (val.match(/([0-9]+)/)) {
|
||||
if (operator === 'gt' ||
|
||||
operator === 'gte' ||
|
||||
operator === 'lt' ||
|
||||
operator === 'lte') {
|
||||
let newParam = {};
|
||||
newParam['$' + operator] = val;
|
||||
addSearchParam(newParam);
|
||||
} else {
|
||||
addSearchParam(val);
|
||||
}
|
||||
} else if (paramType === 'ObjectId') {
|
||||
} else if (operator === 'ne' || operator === 'not') {
|
||||
const neregex = new RegExp(val, 'i');
|
||||
addSearchParam({'$not': neregex});
|
||||
} else if (operator === 'like') {
|
||||
addSearchParam({$regex: val, $options: '-i'});
|
||||
} else {
|
||||
addSearchParam(val);
|
||||
} else if (paramType === 'Array') {
|
||||
addSearchParam(val);
|
||||
console.log(lcKey)
|
||||
}
|
||||
return query;
|
||||
} else if (paramType === 'ObjectId') {
|
||||
addSearchParam(val);
|
||||
} else if (paramType === 'Array') {
|
||||
addSearchParam(val);
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user