Adds query builder

This commit is contained in:
olivermrbl
2020-08-12 20:55:31 +02:00
parent 348c9980a5
commit 782acf4dca
4 changed files with 90 additions and 4 deletions

View File

@@ -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) {

View File

@@ -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 =>

View 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

View File

@@ -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"