Initial Version
This commit is contained in:
51
server/utils/searchFeatures.js
Normal file
51
server/utils/searchFeatures.js
Normal file
@@ -0,0 +1,51 @@
|
||||
class SearchFeatures {
|
||||
constructor(query, queryString) {
|
||||
this.query = query
|
||||
this.queryString = queryString
|
||||
}
|
||||
|
||||
search() {
|
||||
const keyword = this.queryString.keyword ? {
|
||||
name: {
|
||||
$regex: this.queryString.keyword,
|
||||
$options: "i",
|
||||
}
|
||||
} : {};
|
||||
|
||||
// console.log(keyword);
|
||||
|
||||
this.query = this.query.find({ ...keyword });
|
||||
return this;
|
||||
}
|
||||
|
||||
filter() {
|
||||
const queryCopy = { ...this.queryString }
|
||||
|
||||
// fields to remove for category
|
||||
const removeFields = ["keyword", "page", "limit"];
|
||||
|
||||
// console.log(queryCopy);
|
||||
removeFields.forEach(key => delete queryCopy[key]);
|
||||
// console.log(queryCopy);
|
||||
|
||||
// price filter
|
||||
let queryString = JSON.stringify(queryCopy);
|
||||
queryString = queryString.replace(/\b(gt|gte|lt|lte)\b/g, key => `$${key}`);
|
||||
|
||||
// console.log(JSON.parse(queryString));
|
||||
|
||||
this.query = this.query.find(JSON.parse(queryString));
|
||||
return this;
|
||||
}
|
||||
|
||||
pagination(resultPerPage) {
|
||||
const currentPage = Number(this.queryString.page) || 1;
|
||||
|
||||
const skipProducts = resultPerPage * (currentPage - 1);
|
||||
|
||||
this.query = this.query.limit(resultPerPage).skip(skipProducts);
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = SearchFeatures;
|
||||
Reference in New Issue
Block a user