Files
medusa-store/packages/medusa/src/services/query-builder.js
2020-08-12 20:55:31 +02:00

49 lines
1.1 KiB
JavaScript

import { BaseService } from "medusa-interfaces"
import _ from "lodash"
class QueryBuilderService extends BaseService {
buildQuery(params, properties) {
const textSearch = _.pick(params, ["q"])
const filters = _.pick(params, properties)
const textQuery = this.buildTextSearchQuery(textSearch, properties)
const filterQuery = this.buildFilterQuery(filters)
if (textQuery && filterQuery) {
return {
$and: [textQuery, filterQuery],
}
} else if (!textQuery && filterQuery) {
return filterQuery
} else if (textQuery && !filterQuery) {
return textQuery
} else {
return {}
}
}
buildFilterQuery(filters) {
if (_.isEmpty(filters)) return
const filterQuery = {}
Object.keys(filters).map(filter => {
filterQuery[filter] = filters[filter]
})
return filterQuery
}
buildTextSearchQuery(search, searchProperties) {
if (_.isEmpty(search)) return
const searchQuery = searchProperties.map(s => ({
[s]: new RegExp(search.q),
}))
return { $or: searchQuery }
}
}
export default QueryBuilderService