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 =>
|
||||
|
||||
48
packages/medusa/src/services/query-builder.js
Normal file
48
packages/medusa/src/services/query-builder.js
Normal file
@@ -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
|
||||
@@ -4568,6 +4568,14 @@ media-typer@0.3.0:
|
||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
|
||||
|
||||
medusa-core-utils@^0.3.0:
|
||||
version "0.1.39"
|
||||
resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-0.1.39.tgz#d57816c9bd43f9a92883650c1e66add1665291df"
|
||||
integrity sha512-R8+U1ile7if+nR6Cjh5exunx0ETV0OfkWUUBUpz1KmHSDv0V0CcvQqU9lcZesPFDEbu3Y2iEjsCqidVA4nG2nQ==
|
||||
dependencies:
|
||||
"@hapi/joi" "^16.1.8"
|
||||
joi-objectid "^3.0.1"
|
||||
|
||||
medusa-interfaces@^0.1.27:
|
||||
version "0.1.27"
|
||||
resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-0.1.27.tgz#e77f9a9f82a7118eac8b35c1498ef8a5cec78898"
|
||||
@@ -4575,6 +4583,13 @@ medusa-interfaces@^0.1.27:
|
||||
dependencies:
|
||||
mongoose "^5.8.0"
|
||||
|
||||
medusa-test-utils@^0.3.0:
|
||||
version "0.1.39"
|
||||
resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-0.1.39.tgz#b7c166006a2fa4f02e52ab3bfafc19a3ae787f3e"
|
||||
integrity sha512-M/Br8/HYvl7x2oLnme4NxdQwoyV0XUyOWiCyvPp7q1HUTB684lhJf1MikZVrcSjsh2L1rpyi3GRbKdf4cpJWvw==
|
||||
dependencies:
|
||||
mongoose "^5.8.0"
|
||||
|
||||
memory-pager@^1.0.2:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
|
||||
|
||||
Reference in New Issue
Block a user