FilterService.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. const knex = require('../models/database');
  2. // const FilterTypes = require('../models/FilterModels')
  3. const paginator = require('../helpers/paginator');
  4. const FilterTypes = {}
  5. class FilterService {
  6. constructor(){
  7. this.FilterTypes = FilterTypes;
  8. }
  9. buildQuery(query,filter){
  10. switch(filter['type']){
  11. case 'includes':
  12. return query.whereIn(filter['field'],filter['options'])
  13. case 'equals':
  14. return query.where(filter['field'],filter['options'])
  15. case 'search':
  16. return query.where(filter['field'], 'like', '%' + filter['options'] + '%');
  17. case 'less':
  18. return query.where(filter['field'], '<', filter['options']);
  19. case 'more':
  20. return query.where(filter['field'], '>', filter['options']);
  21. case 'ascending':
  22. return query.orderBy(filter['field'],'asc')
  23. case 'descending':
  24. return query.orderBy(filter['field'],'desc')
  25. case 'value_range':
  26. return query.whereBetween(filter['field'],filter['options'])
  27. case 'raw':
  28. break; // RAW SQL - Injection
  29. return query.whereRaw(filter['options'])
  30. }
  31. }
  32. parseFilters(query, filters) {
  33. filters.forEach((filter, index) => {
  34. query = this.buildQuery(query, filter);
  35. });
  36. return query;
  37. }
  38. }
  39. module.exports = new FilterService();