From 014354a16dd695d9bae0af5565457b696a04a8a1 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Fri, 28 Aug 2020 11:36:35 +0200 Subject: [PATCH] Adds discount decoration --- .../routes/admin/discounts/get-discount.js | 17 +++++++++++- packages/medusa/src/services/discount.js | 26 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/packages/medusa/src/api/routes/admin/discounts/get-discount.js b/packages/medusa/src/api/routes/admin/discounts/get-discount.js index af776f1ce1..075d8d8c11 100644 --- a/packages/medusa/src/api/routes/admin/discounts/get-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/get-discount.js @@ -4,7 +4,22 @@ export default async (req, res) => { const discountService = req.scope.resolve("discountService") const data = await discountService.retrieve(discount_id) - res.status(200).json({ discount: data }) + const discount = await discountService.decorate( + data, + [ + "code", + "is_dynamic", + "discount_rule", + "usage_count", + "disabled", + "starts_at", + "ends_at", + "regions", + ], + ["valid_for"] + ) + + res.status(200).json({ discount }) } catch (err) { throw err } diff --git a/packages/medusa/src/services/discount.js b/packages/medusa/src/services/discount.js index c0241d53e7..21afaa812e 100644 --- a/packages/medusa/src/services/discount.js +++ b/packages/medusa/src/services/discount.js @@ -13,6 +13,7 @@ class DiscountService extends BaseService { dynamicDiscountCodeModel, totalsService, productVariantService, + productService, regionService, eventBusService, }) { @@ -30,6 +31,9 @@ class DiscountService extends BaseService { /** @private @const {ProductVariantService} */ this.productVariantService_ = productVariantService + /** @private @const {ProductService} */ + this.productService_ = productService + /** @private @const {RegionService} */ this.regionService_ = regionService @@ -431,6 +435,28 @@ class DiscountService extends BaseService { throw new MedusaError(MedusaError.Types.DB_ERROR, err.message) }) } + + /** + * Decorates a discount. + * @param {Discount} discount - the discount to decorate. + * @param {string[]} fields - the fields to include. + * @param {string[]} expandFields - fields to expand. + * @return {Discount} return the decorated discount. + */ + async decorate(discount, fields = [], expandFields = []) { + const requiredFields = ["_id", "metadata"] + const decorated = _.pick(discount, fields.concat(requiredFields)) + + if (expandFields.includes("valid_for")) { + decorated.discount_rule.valid_for = await Promise.all( + decorated.discount_rule.valid_for.map(async p => { + return this.productService_.retrieve(p) + }) + ) + } + + return decorated + } } export default DiscountService