Adds query builder
This commit is contained in:
1 parent
348c9980a5
commit
782acf4dca
4 files changed
+90
-4
No files matched your search
@@ -1,9 +1,22 @@
|
|||||||
export default async (req, res) => {
|
import _ from "lodash"
|
||||||
const selector = {}
|
|
||||||
|
|
||||||
|
export default async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const orderService = req.scope.resolve("orderService")
|
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 })
|
res.json({ orders })
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -1,7 +1,17 @@
|
|||||||
|
import _ from "lodash"
|
||||||
|
|
||||||
export default async (req, res) => {
|
export default async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const productService = req.scope.resolve("productService")
|
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 = await Promise.all(
|
||||||
products.map(
|
products.map(
|
||||||
async product =>
|
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
|
||||||
@@ -4568,6 +4568,14 @@ media-typer@0.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||||
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
|
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:
|
medusa-interfaces@^0.1.27:
|
||||||
version "0.1.27"
|
version "0.1.27"
|
||||||
resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-0.1.27.tgz#e77f9a9f82a7118eac8b35c1498ef8a5cec78898"
|
resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-0.1.27.tgz#e77f9a9f82a7118eac8b35c1498ef8a5cec78898"
|
||||||
@@ -4575,6 +4583,13 @@ medusa-interfaces@^0.1.27:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mongoose "^5.8.0"
|
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:
|
memory-pager@^1.0.2:
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
|
resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
|
||||||
|
|||||||
Reference in new issue
Block a user