diff --git a/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js b/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js index 2cf02de38e..150a6dfe8b 100644 --- a/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js +++ b/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js @@ -106,7 +106,13 @@ class WebshipperFulfillmentService extends FulfillmentService { const fromOrder = await this.orderService_.retrieve(orderId, { select: ["total"], - relations: ["discounts", "shipping_address", "returns"], + relations: [ + "discounts", + "discounts.rule", + "discounts.rule.valid_for", + "shipping_address", + "returns", + ], }) const methodData = returnOrder.shipping_method.data @@ -286,10 +292,11 @@ class WebshipperFulfillmentService extends FulfillmentService { )) && this.invoiceGenerator_.createCertificateOfOrigin ) { - const base64Coo = await this.invoiceGenerator_.createCertificateOfOrigin( - fromOrder, - fulfillmentItems - ) + const base64Coo = + await this.invoiceGenerator_.createCertificateOfOrigin( + fromOrder, + fulfillmentItems + ) certificateOfOrigin = await this.client_.documents .create({ @@ -419,9 +426,8 @@ class WebshipperFulfillmentService extends FulfillmentService { url: l.url, tracking_number: l.number, })) - const [orderId, fulfillmentIndex] = wsOrder.data.attributes.ext_ref.split( - "." - ) + const [orderId, fulfillmentIndex] = + wsOrder.data.attributes.ext_ref.split(".") if (orderId.charAt(0).toLowerCase() === "s") { if (fulfillmentIndex.startsWith("ful")) { diff --git a/packages/medusa-plugin-segment/src/subscribers/order.js b/packages/medusa-plugin-segment/src/subscribers/order.js index 33f1d2f291..b048245d5f 100644 --- a/packages/medusa-plugin-segment/src/subscribers/order.js +++ b/packages/medusa-plugin-segment/src/subscribers/order.js @@ -44,6 +44,8 @@ class OrderSubscriber { "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "payments", "fulfillments", @@ -146,6 +148,8 @@ class OrderSubscriber { "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "payments", "fulfillments", @@ -253,6 +257,8 @@ class OrderSubscriber { "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "payments", "fulfillments", diff --git a/packages/medusa-plugin-sendgrid/src/services/sendgrid.js b/packages/medusa-plugin-sendgrid/src/services/sendgrid.js index a577a67696..d951685bd9 100644 --- a/packages/medusa-plugin-sendgrid/src/services/sendgrid.js +++ b/packages/medusa-plugin-sendgrid/src/services/sendgrid.js @@ -320,6 +320,8 @@ class SendGridService extends NotificationService { "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "shipping_methods.shipping_option", "payments", @@ -363,6 +365,8 @@ class SendGridService extends NotificationService { "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "shipping_methods.shipping_option", "payments", @@ -496,6 +500,8 @@ class SendGridService extends NotificationService { relations: [ "items", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_address", "returns", "swaps", @@ -601,6 +607,8 @@ class SendGridService extends NotificationService { relations: [ "items", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_address", "swaps", "swaps.additional_items", @@ -686,7 +694,14 @@ class SendGridService extends NotificationService { }) const order = await this.orderService_.retrieve(swap.order_id, { - relations: ["items", "discounts", "swaps", "swaps.additional_items"], + relations: [ + "items", + "discounts", + "discounts.rule", + "discounts.rule.valid_for", + "swaps", + "swaps.additional_items", + ], }) let merged = [...order.items] diff --git a/packages/medusa-plugin-slack-notification/src/services/slack.js b/packages/medusa-plugin-slack-notification/src/services/slack.js index 5821191e95..0770f1c9db 100644 --- a/packages/medusa-plugin-slack-notification/src/services/slack.js +++ b/packages/medusa-plugin-slack-notification/src/services/slack.js @@ -40,6 +40,8 @@ class SlackService extends BaseService { "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "payments", "fulfillments", diff --git a/packages/medusa/src/api/routes/admin/discounts/create-discount.js b/packages/medusa/src/api/routes/admin/discounts/create-discount.js index e7b9ea364e..66b51c64e3 100644 --- a/packages/medusa/src/api/routes/admin/discounts/create-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/create-discount.js @@ -1,4 +1,5 @@ import { MedusaError, Validator } from "medusa-core-utils" +import { defaultRelations } from "." /** * @oas [post] /discounts @@ -96,11 +97,10 @@ export default async (req, res) => { const discountService = req.scope.resolve("discountService") const created = await discountService.create(value) - const discount = await discountService.retrieve(created.id, [ - "rule", - "rule.valid_for", - "regions", - ]) + const discount = await discountService.retrieve( + created.id, + defaultRelations + ) res.status(200).json({ discount }) } catch (err) { diff --git a/packages/medusa/src/api/routes/admin/draft-orders/index.js b/packages/medusa/src/api/routes/admin/draft-orders/index.js index d5a08f41ce..e68f244c21 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/index.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/index.js @@ -57,6 +57,7 @@ export const defaultCartRelations = [ "payment_sessions", "shipping_methods.shipping_option", "discounts", + "discounts.rule", ] export const defaultCartFields = [ diff --git a/packages/medusa/src/api/routes/admin/draft-orders/register-payment.js b/packages/medusa/src/api/routes/admin/draft-orders/register-payment.js index e38bc93d54..b9d854453f 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/register-payment.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/register-payment.js @@ -43,7 +43,14 @@ export default async (req, res) => { .withTransaction(manager) .retrieve(draftOrder.cart_id, { select: ["total"], - relations: ["discounts", "shipping_methods", "region", "items"], + relations: [ + "discounts", + "discounts.rule", + "discounts.rule.valid_for", + "shipping_methods", + "region", + "items", + ], }) await paymentProviderService diff --git a/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js b/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js index 4a00dbbd89..bc54bdc90b 100644 --- a/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js +++ b/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js @@ -7,6 +7,8 @@ const defaultRelations = [ "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "payments", "fulfillments", diff --git a/packages/medusa/src/api/routes/admin/orders/create-claim.js b/packages/medusa/src/api/routes/admin/orders/create-claim.js index ade142b418..77c8a37004 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-claim.js +++ b/packages/medusa/src/api/routes/admin/orders/create-claim.js @@ -202,7 +202,12 @@ export default async (req, res) => { const order = await orderService .withTransaction(manager) .retrieve(id, { - relations: ["items", "discounts"], + relations: [ + "items", + "cart", + "cart.discounts", + "cart.discounts.rule", + ], }) await claimService.withTransaction(manager).create({ diff --git a/packages/medusa/src/api/routes/admin/orders/index.js b/packages/medusa/src/api/routes/admin/orders/index.js index 0a6f64ddfe..a9e4af97b6 100644 --- a/packages/medusa/src/api/routes/admin/orders/index.js +++ b/packages/medusa/src/api/routes/admin/orders/index.js @@ -221,6 +221,8 @@ export const defaultRelations = [ "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "payments", "fulfillments", @@ -316,6 +318,8 @@ export const allowedRelations = [ "billing_address", "shipping_address", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods", "payments", "fulfillments", diff --git a/packages/medusa/src/api/routes/store/carts/index.js b/packages/medusa/src/api/routes/store/carts/index.js index 42363bd12c..6c702af07b 100644 --- a/packages/medusa/src/api/routes/store/carts/index.js +++ b/packages/medusa/src/api/routes/store/carts/index.js @@ -116,4 +116,6 @@ export const defaultRelations = [ "payment_sessions", "shipping_methods.shipping_option", "discounts", + "discounts.rule", + "discounts.rule.valid_for", ] diff --git a/packages/medusa/src/api/routes/store/orders/index.js b/packages/medusa/src/api/routes/store/orders/index.js index 8aaa346bca..e7aefc2571 100644 --- a/packages/medusa/src/api/routes/store/orders/index.js +++ b/packages/medusa/src/api/routes/store/orders/index.js @@ -36,6 +36,8 @@ export const defaultRelations = [ "items.variant.product", "shipping_methods", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "customer", "payments", "region", @@ -74,6 +76,8 @@ export const allowedRelations = [ "items.variant.product", "shipping_methods", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "customer", "payments", "region", diff --git a/packages/medusa/src/models/discount.ts b/packages/medusa/src/models/discount.ts index a4ef833b3c..64ac6c29c5 100644 --- a/packages/medusa/src/models/discount.ts +++ b/packages/medusa/src/models/discount.ts @@ -35,7 +35,7 @@ export class Discount { @Column({ nullable: true }) rule_id: string - @ManyToOne(() => DiscountRule, { cascade: true, eager: true }) + @ManyToOne(() => DiscountRule, { cascade: true }) @JoinColumn({ name: "rule_id" }) rule: DiscountRule diff --git a/packages/medusa/src/services/__tests__/cart.js b/packages/medusa/src/services/__tests__/cart.js index 55817e2592..84c794f8cd 100644 --- a/packages/medusa/src/services/__tests__/cart.js +++ b/packages/medusa/src/services/__tests__/cart.js @@ -647,12 +647,13 @@ describe("CartService", () => { "shipping_address", "billing_address", "gift_cards", - "discounts", "customer", "region", "payment_sessions", "region.countries", + "discounts", "discounts.rule", + "discounts.rule.valid_for", "discounts.regions", ], { diff --git a/packages/medusa/src/services/__tests__/discount.js b/packages/medusa/src/services/__tests__/discount.js index 5802063386..acc61e58cf 100644 --- a/packages/medusa/src/services/__tests__/discount.js +++ b/packages/medusa/src/services/__tests__/discount.js @@ -13,6 +13,9 @@ describe("DiscountService", () => { id: IdMap.getId("france"), } }, + withTransaction: function() { + return this + }, } const discountService = new DiscountService({ diff --git a/packages/medusa/src/services/__tests__/order.js b/packages/medusa/src/services/__tests__/order.js index 76db532917..72555220f9 100644 --- a/packages/medusa/src/services/__tests__/order.js +++ b/packages/medusa/src/services/__tests__/order.js @@ -231,6 +231,8 @@ describe("OrderService", () => { "payment", "items", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "gift_cards", "shipping_methods", ], diff --git a/packages/medusa/src/services/__tests__/swap.js b/packages/medusa/src/services/__tests__/swap.js index 9cc4088174..3577dada96 100644 --- a/packages/medusa/src/services/__tests__/swap.js +++ b/packages/medusa/src/services/__tests__/swap.js @@ -198,6 +198,7 @@ describe("SwapService", () => { "order.swaps", "order.swaps.additional_items", "order.discounts", + "order.discounts.rule", "additional_items", "return_order", "return_order.items", diff --git a/packages/medusa/src/services/cart.js b/packages/medusa/src/services/cart.js index fede0289d8..9719fa1700 100644 --- a/packages/medusa/src/services/cart.js +++ b/packages/medusa/src/services/cart.js @@ -166,6 +166,8 @@ class CartService extends BaseService { relationSet.add("items") relationSet.add("gift_cards") relationSet.add("discounts") + relationSet.add("discounts.rule") + relationSet.add("discounts.rule.valid_for") //relationSet.add("discounts.parent_discount") //relationSet.add("discounts.parent_discount.rule") //relationSet.add("discounts.parent_discount.regions") @@ -600,12 +602,13 @@ class CartService extends BaseService { "shipping_address", "billing_address", "gift_cards", - "discounts", "customer", "region", "payment_sessions", "region.countries", + "discounts", "discounts.rule", + "discounts.rule.valid_for", "discounts.regions", ], }) @@ -871,6 +874,7 @@ class CartService extends BaseService { async applyDiscount(cart, discountCode) { const discount = await this.discountService_.retrieveByCode(discountCode, [ "rule", + "rule.valid_for", "regions", ]) @@ -968,7 +972,13 @@ class CartService extends BaseService { async removeDiscount(cartId, discountCode) { return this.atomicPhase_(async manager => { const cart = await this.retrieve(cartId, { - relations: ["discounts", "payment_sessions", "shipping_methods"], + relations: [ + "discounts", + "discounts.rule", + "discounts.rule.valid_for", + "payment_sessions", + "shipping_methods", + ], }) if (cart.discounts.some(({ rule }) => rule.type === "free_shipping")) { @@ -1165,6 +1175,8 @@ class CartService extends BaseService { relations: [ "items", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "gift_cards", "billing_address", "shipping_address", @@ -1317,6 +1329,8 @@ class CartService extends BaseService { relations: [ "shipping_methods", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "shipping_methods.shipping_option", "items", "items.variant", @@ -1353,7 +1367,12 @@ class CartService extends BaseService { } const result = await this.retrieve(cartId, { - relations: ["discounts", "shipping_methods"], + relations: [ + "discounts", + "discounts.rule", + "discounts.rule.valid_for", + "shipping_methods", + ], }) // if cart has freeshipping, adjust price @@ -1507,7 +1526,13 @@ class CartService extends BaseService { async delete(cartId) { return this.atomicPhase_(async manager => { const cart = await this.retrieve(cartId, { - relations: ["items", "discounts", "payment_sessions"], + relations: [ + "items", + "discounts", + "discounts.rule", + "discounts.rule.valid_for", + "payment_sessions", + ], }) if (cart.completed_at) { diff --git a/packages/medusa/src/services/discount.js b/packages/medusa/src/services/discount.js index ef987e617d..70f404f378 100644 --- a/packages/medusa/src/services/discount.js +++ b/packages/medusa/src/services/discount.js @@ -180,12 +180,16 @@ class DiscountService extends BaseService { const discountRepo = manager.getCustomRepository(this.discountRepository_) const ruleRepo = manager.getCustomRepository(this.discountRuleRepository_) + if (discount.rule?.valid_for) { + discount.rule.valid_for = discount.rule.valid_for.map(id => ({ id })) + } + const validatedRule = this.validateDiscountRule_(discount.rule) if (discount.regions) { discount.regions = await Promise.all( discount.regions.map(regionId => - this.regionService_.retrieve(regionId) + this.regionService_.withTransaction(manager).retrieve(regionId) ) ) } @@ -293,6 +297,9 @@ class DiscountService extends BaseService { if (rule) { discount.rule = this.validateDiscountRule_(rule) + if (rule.valid_for) { + discount.rule.valid_for = discount.rule.valid_for.map(id => ({ id })) + } } for (const [key, value] of Object.entries(rest)) { diff --git a/packages/medusa/src/services/draft-order.js b/packages/medusa/src/services/draft-order.js index fe2ceb51aa..96d089b7bf 100644 --- a/packages/medusa/src/services/draft-order.js +++ b/packages/medusa/src/services/draft-order.js @@ -250,10 +250,10 @@ class DraftOrderService extends BaseService { } const { - items, shipping_methods, discounts, no_notification_order, + items, ...rest } = data diff --git a/packages/medusa/src/services/order.js b/packages/medusa/src/services/order.js index 64684ac6d6..c63e3d2cdb 100644 --- a/packages/medusa/src/services/order.js +++ b/packages/medusa/src/services/order.js @@ -296,6 +296,8 @@ class OrderService extends BaseService { relationSet.add("swaps") relationSet.add("swaps.additional_items") relationSet.add("discounts") + relationSet.add("discounts.rule") + relationSet.add("discounts.rule.valid_for") relationSet.add("gift_cards") relationSet.add("gift_card_transactions") relationSet.add("refunds") @@ -453,6 +455,8 @@ class OrderService extends BaseService { "payment", "items", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "gift_cards", "shipping_methods", ], @@ -1119,6 +1123,8 @@ class OrderService extends BaseService { ], relations: [ "discounts", + "discounts.rule", + "discounts.rule.valid_for", "region", "fulfillments", "shipping_address", diff --git a/packages/medusa/src/services/return.js b/packages/medusa/src/services/return.js index 0092e0e5c7..06f92aff45 100644 --- a/packages/medusa/src/services/return.js +++ b/packages/medusa/src/services/return.js @@ -518,6 +518,8 @@ class ReturnService extends BaseService { "returns", "payments", "discounts", + "discounts.rule", + "discounts.rule.valid_for", "refunds", "shipping_methods", "region", diff --git a/packages/medusa/src/services/swap.js b/packages/medusa/src/services/swap.js index 886a6f70c0..eca04c59b3 100644 --- a/packages/medusa/src/services/swap.js +++ b/packages/medusa/src/services/swap.js @@ -533,6 +533,7 @@ class SwapService extends BaseService { "order.swaps", "order.swaps.additional_items", "order.discounts", + "order.discounts.rule", "additional_items", "return_order", "return_order.items", diff --git a/packages/medusa/src/subscribers/order.js b/packages/medusa/src/subscribers/order.js index 01ac3c9cca..ec49737a47 100644 --- a/packages/medusa/src/subscribers/order.js +++ b/packages/medusa/src/subscribers/order.js @@ -32,7 +32,13 @@ class OrderSubscriber { handleOrderPlaced = async data => { const order = await this.orderService_.retrieve(data.id, { select: ["subtotal"], - relations: ["discounts", "items", "gift_cards"], + relations: [ + "discounts", + "discounts.rule", + "discounts.rule.valid_for", + "items", + "gift_cards", + ], }) await Promise.all( diff --git a/packages/medusa/yarn.lock b/packages/medusa/yarn.lock index 82e2b85eb7..001dc1387c 100644 --- a/packages/medusa/yarn.lock +++ b/packages/medusa/yarn.lock @@ -4608,6 +4608,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +iso8601-duration@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iso8601-duration/-/iso8601-duration-1.3.0.tgz#29d7b69e0574e4acdee50c5e5e09adab4137ba5a" + integrity sha512-K4CiUBzo3YeWk76FuET/dQPH03WE04R94feo5TSKQCXpoXQt9E4yx2CnY737QZnSAI3PI4WlKo/zfqizGx52QQ== + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"