added stringin filter mode
This commit is contained in:
		@@ -394,7 +394,7 @@ describe('/sample', () => {
 | 
			
		||||
        url: '/samples?status=all&fields[]=number&fields[]=batch&filters[]=%7B%22mode%22%3A%22xx%22%2C%22field%22%3A%22batch%22%2C%22values%22%3A%5B%221704-005%22%5D%7D',
 | 
			
		||||
        auth: {basic: 'janedoe'},
 | 
			
		||||
        httpStatus: 400,
 | 
			
		||||
        res: {status: 'Invalid body format', details: '"filters[0].mode" must be one of [eq, ne, lt, lte, gt, gte, in, nin]'}
 | 
			
		||||
        res: {status: 'Invalid body format', details: '"filters[0].mode" must be one of [eq, ne, lt, lte, gt, gte, in, nin, stringin]'}
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    it('rejects an filter field not existing', done => {
 | 
			
		||||
 
 | 
			
		||||
@@ -758,6 +758,9 @@ function filterQueries (filters) {
 | 
			
		||||
    if (e.mode === 'or') {  // allow or queries (needed for $ne added)
 | 
			
		||||
      return {['$' + e.mode]: e.values};
 | 
			
		||||
    }
 | 
			
		||||
    else if (e.mode === 'stringin') {
 | 
			
		||||
      return {[e.field]: {['$in']: [new RegExp(e.values[0])]}};
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      return {[e.field]: {['$' + e.mode]: (e.mode.indexOf('in') >= 0 ? e.values : e.values[0])}};  // add filter criteria as {field: {$mode: value}}, only use first value when mode is not in/nin
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -213,7 +213,7 @@ export default class SampleValidate {
 | 
			
		||||
      csv: Joi.boolean().default(false),
 | 
			
		||||
      fields: Joi.array().items(Joi.string().pattern(new RegExp('^(' + this.fieldKeys.join('|').replace(/\./g, '\\.').replace(/\*/g, '.+') + ')$', 'm'))).default(['_id','number','type','batch','material_id','color','condition','note_id','user_id','added']).messages({'string.pattern.base': 'Invalid field name'}),
 | 
			
		||||
      filters: Joi.array().items(Joi.object({
 | 
			
		||||
        mode: Joi.string().valid('eq', 'ne', 'lt', 'lte', 'gt', 'gte', 'in', 'nin'),
 | 
			
		||||
        mode: Joi.string().valid('eq', 'ne', 'lt', 'lte', 'gt', 'gte', 'in', 'nin', 'stringin'),
 | 
			
		||||
        field: Joi.string().pattern(new RegExp('^(' + this.fieldKeys.join('|').replace(/\./g, '\\.').replace(/\*/g, '.+') + ')$', 'm')).messages({'string.pattern.base': 'Invalid filter field name'}),
 | 
			
		||||
        values: Joi.array().items(Joi.alternatives().try(Joi.string().max(128), Joi.number(), Joi.boolean(), Joi.date().iso(), Joi.object())).min(1)
 | 
			
		||||
      })).default([])
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user