periodicjs.core.data
Version:
Core data is the ORM wrapping component of periodicjs.core.controller that provides database adapters for commonly used databases (ie. mongo, sql, postgres). Adapters provide a standard set of methods and options regardless of the type of database and so
121 lines (116 loc) • 3.08 kB
JavaScript
;
const moment = require('moment');
const mongoose = require('mongoose');
const mongoid = require('./mongoid');
function get_db_fq_op(options) {
switch (options.f_op) {
case 'size':
return '$size';
case 'lte':
case 'lte-date':
return '$lte';
case 'lt':
case 'lt-date':
return '$lt';
case 'gt':
case 'gt-date':
return '$gt';
case 'gte':
case 'gte-date':
return '$gte';
case 'not':
case 'not-date':
return '$ne';
case 'not-in':
return '$nin';
case 'in':
return '$in';
case 'has':
case 'exists':
return '$exists';
case 'all':
case 'contains':
return '$all';
default:
return null;
}
};
function get_db_fq_val(options) {
switch (options.f_op) {
case 'is-date':
case 'not-date':
case 'lte-date':
case 'lt-date':
case 'gte-date':
case 'gt-date':
case 'is-date':
return moment(options.f_val).toDate(); //moment to date
case 'exists':
if (options.f_val === 'true' || options.f_val === true) {
return true;
} else {
return false;
}
break;
case 'in':
case 'not-in':
case 'nin':
case 'all':
case 'contains':
return options.f_val.split(','); //moment to date
default:
if (options.f_val === 'null' || options.f_val === null) {
return null;
} else {
return options.f_val;
}
}
}
function getFilterQueries(filterqueries,type) {
const filterQuery = [];
if (Array.isArray(filterqueries) === false) {
filterqueries = new Array(filterqueries);
}
filterqueries.forEach(function (f_query) {
let orbuilder = f_query.split('|||');
let orbuilderquery = {};
orbuilderquery[ orbuilder[ 0 ] ] = {};
if (mongoid(orbuilder[ 2 ])) {
orbuilder[ 2 ] = mongoose.Types.ObjectId(orbuilder[ 2 ]);
}
if (orbuilder[1] === 'is') {
orbuilderquery[orbuilder[0]] = orbuilder[2];
} else if (orbuilder[1] === 'is-date') {
orbuilderquery[orbuilder[0]] = moment(orbuilder[2]).toDate();
} else if (orbuilder[1] === 'like') {
orbuilderquery[ orbuilder[ 0 ] ] = (type === 'loki') ? { $regex:stripTags(orbuilder[2]), } : new RegExp(stripTags(orbuilder[2]), 'gi');
} else if (orbuilder[1] === 'not-like') {
orbuilderquery[ orbuilder[ 0 ] ] = (type === 'loki') ? {
'$not': {
$regex: stripTags(orbuilder[ 2 ]),
},
} : {
'$not': new RegExp(stripTags(orbuilder[ 2 ]), 'gi'),
};
} else {
orbuilderquery[orbuilder[0]][get_db_fq_op({ f_op: orbuilder[1] })] = get_db_fq_val({ f_op: orbuilder[1], f_val: orbuilder[2] });
}
console.log('orbuilderquery', orbuilderquery);
filterQuery.push(orbuilderquery);
});
console.log({ filterQuery });
return filterQuery;
}
function stripTags(textinput) {
if (textinput) {
return textinput.replace(/[^a-z0-9@._]/gi, '-');
} else {
return false;
}
}
module.exports = {
get_db_fq_op,
get_db_fq_val,
getFilterQueries,
stripTags,
};