Adds query builder
This commit is contained in:
@@ -1,9 +1,22 @@
|
||||
export default async (req, res) => {
|
||||
const selector = {}
|
||||
import _ from "lodash"
|
||||
|
||||
export default async (req, res) => {
|
||||
try {
|
||||
const orderService = req.scope.resolve("orderService")
|
||||
const orders = await orderService.list(selector)
|
||||
const queryBuilderService = req.scope.resolve("queryBuilderService")
|
||||
|
||||
const query = queryBuilderService.buildQuery(req.query, [
|
||||
"email",
|
||||
"status",
|
||||
"fulfillment_status",
|
||||
"payment_status",
|
||||
])
|
||||
|
||||
let orders = await orderService.list(query)
|
||||
|
||||
orders = await Promise.all(
|
||||
orders.map(order => orderService.decorate(order))
|
||||
)
|
||||
|
||||
res.json({ orders })
|
||||
} catch (error) {
|
||||
|
||||
@@ -1,7 +1,17 @@
|
||||
import _ from "lodash"
|
||||
|
||||
export default async (req, res) => {
|
||||
try {
|
||||
const productService = req.scope.resolve("productService")
|
||||
let products = await productService.list({})
|
||||
const queryBuilderService = req.scope.resolve("queryBuilderService")
|
||||
|
||||
const query = queryBuilderService.buildQuery(req.query, [
|
||||
"title",
|
||||
"description",
|
||||
])
|
||||
|
||||
let products = await productService.list(query)
|
||||
|
||||
products = await Promise.all(
|
||||
products.map(
|
||||
async product =>
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
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
|
||||
Reference in New Issue
Block a user