diff --git a/packages/medusa/src/api/routes/admin/orders/list-orders.js b/packages/medusa/src/api/routes/admin/orders/list-orders.js index 5173bad915..2ed0a8829f 100644 --- a/packages/medusa/src/api/routes/admin/orders/list-orders.js +++ b/packages/medusa/src/api/routes/admin/orders/list-orders.js @@ -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) { diff --git a/packages/medusa/src/api/routes/admin/products/list-products.js b/packages/medusa/src/api/routes/admin/products/list-products.js index 47f0f46395..958742583a 100644 --- a/packages/medusa/src/api/routes/admin/products/list-products.js +++ b/packages/medusa/src/api/routes/admin/products/list-products.js @@ -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 => diff --git a/packages/medusa/src/services/query-builder.js b/packages/medusa/src/services/query-builder.js new file mode 100644 index 0000000000..d121d856f4 --- /dev/null +++ b/packages/medusa/src/services/query-builder.js @@ -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 diff --git a/packages/medusa/yarn.lock b/packages/medusa/yarn.lock index c3775ee84d..d8c0b200f7 100644 --- a/packages/medusa/yarn.lock +++ b/packages/medusa/yarn.lock @@ -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"