From e8ab196e7f89e57019616247c6e18c1a8e2f16e3 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Tue, 13 Feb 2024 13:37:58 +0100 Subject: [PATCH 01/11] wi --- .../{create-cart.ts => create-cart.spec.ts} | 43 +++++++++++++- .../cart/steps/find-one-or-any-region.ts | 27 +++++++++ .../definition/cart/steps/link-cart-region.ts | 36 ++++++++++++ .../definition/cart/workflows/create-carts.ts | 20 +++++-- .../src/definitions/cart-region.ts | 58 +++++++++++++++++++ .../link-modules/src/definitions/index.ts | 10 ++-- .../src/initialize/module-definition.ts | 2 +- packages/link-modules/src/links.ts | 6 ++ .../link-modules/src/loaders/container.ts | 4 +- .../src/services/dynamic-service-class.ts | 2 +- .../src/services/link-module-service.ts | 2 +- .../src/api-v2/store/carts/query-config.ts | 4 ++ .../medusa/src/api-v2/store/carts/route.ts | 29 ++++++---- packages/region/src/module-definition.ts | 2 +- 14 files changed, 219 insertions(+), 26 deletions(-) rename integration-tests/plugins/__tests__/cart/store/{create-cart.ts => create-cart.spec.ts} (59%) create mode 100644 packages/core-flows/src/definition/cart/steps/find-one-or-any-region.ts create mode 100644 packages/core-flows/src/definition/cart/steps/link-cart-region.ts create mode 100644 packages/link-modules/src/definitions/cart-region.ts diff --git a/integration-tests/plugins/__tests__/cart/store/create-cart.ts b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts similarity index 59% rename from integration-tests/plugins/__tests__/cart/store/create-cart.ts rename to integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts index b41e3c8a9cd44..4e7b44a90e79f 100644 --- a/integration-tests/plugins/__tests__/cart/store/create-cart.ts +++ b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts @@ -1,5 +1,5 @@ import { ModuleRegistrationName } from "@medusajs/modules-sdk" -import { ICartModuleService } from "@medusajs/types" +import { ICartModuleService, IRegionModuleService } from "@medusajs/types" import path from "path" import { startBootstrapApp } from "../../../../environment-helpers/bootstrap-app" import { useApi } from "../../../../environment-helpers/use-api" @@ -16,6 +16,7 @@ describe("POST /store/carts", () => { let appContainer let shutdownServer let cartModuleService: ICartModuleService + let regionModuleService: IRegionModuleService beforeAll(async () => { const cwd = path.resolve(path.join(__dirname, "..", "..", "..")) @@ -23,6 +24,7 @@ describe("POST /store/carts", () => { shutdownServer = await startBootstrapApp({ cwd, env }) appContainer = getContainer() cartModuleService = appContainer.resolve(ModuleRegistrationName.CART) + regionModuleService = appContainer.resolve(ModuleRegistrationName.REGION) }) afterAll(async () => { @@ -41,12 +43,40 @@ describe("POST /store/carts", () => { }) it("should create a cart", async () => { + const region = await regionModuleService.create({ + name: "US", + currency_code: "usd", + }) + const api = useApi() as any const response = await api.post(`/store/carts`, { email: "tony@stark.com", currency_code: "usd", + region_id: region.id, + }) + + expect(response.status).toEqual(200) + expect(response.data.cart).toEqual( + expect.objectContaining({ + id: response.data.cart.id, + currency_code: "usd", + email: "tony@stark.com", + }) + ) + }) + + it("should use any region", async () => { + await regionModuleService.create({ + name: "US", + currency_code: "usd", }) + const api = useApi() as any + const response = await api.post(`/store/carts`, { + email: "tony@stark.com", + currency_code: "usd", + }) + expect(response.status).toEqual(200) expect(response.data.cart).toEqual( expect.objectContaining({ @@ -56,4 +86,15 @@ describe("POST /store/carts", () => { }) ) }) + + it("should throw when no regions exist", async () => { + const api = useApi() as any + + await expect( + api.post(`/store/carts`, { + email: "tony@stark.com", + currency_code: "usd", + }) + ).rejects.toThrow() + }) }) diff --git a/packages/core-flows/src/definition/cart/steps/find-one-or-any-region.ts b/packages/core-flows/src/definition/cart/steps/find-one-or-any-region.ts new file mode 100644 index 0000000000000..0398236b0c5b6 --- /dev/null +++ b/packages/core-flows/src/definition/cart/steps/find-one-or-any-region.ts @@ -0,0 +1,27 @@ +import { ModuleRegistrationName } from "@medusajs/modules-sdk" +import { IRegionModuleService } from "@medusajs/types" +import { StepResponse, createStep } from "@medusajs/workflows-sdk" + +export const findOneOrAnyRegionStepId = "find-one-or-any-region" +export const findOneOrAnyRegionStep = createStep( + findOneOrAnyRegionStepId, + async (data: { regionId?: string }, { container }) => { + const service = container.resolve( + ModuleRegistrationName.REGION + ) + + if (!data.regionId) { + const regions = await service.list({}) + + if (!regions?.length) { + throw Error("No regions found") + } + + return new StepResponse(regions[0]) + } + + const region = await service.retrieve(data.regionId) + + return new StepResponse(region) + } +) diff --git a/packages/core-flows/src/definition/cart/steps/link-cart-region.ts b/packages/core-flows/src/definition/cart/steps/link-cart-region.ts new file mode 100644 index 0000000000000..259103e5cd3f7 --- /dev/null +++ b/packages/core-flows/src/definition/cart/steps/link-cart-region.ts @@ -0,0 +1,36 @@ +import { Modules } from "@medusajs/modules-sdk" +import { StepResponse, createStep } from "@medusajs/workflows-sdk" + +export const linkCartRegionStepId = "link-cart-region" +export const linkCartRegionStep = createStep( + linkCartRegionStepId, + async (data: { regionId: string; cartId: string }, { container }) => { + const remoteLink = container.resolve("remoteLink") + + await remoteLink.create({ + [Modules.CART]: { + cart_id: data.cartId, + }, + [Modules.REGION]: { + region_id: data.regionId, + }, + }) + + return new StepResponse(void 0, { + cartId: data.cartId, + regionId: data.regionId, + }) + }, + async (data, { container }) => { + const remoteLink = container.resolve("remoteLink") + + await remoteLink.dismiss({ + [Modules.CART]: { + cart_id: data!.cartId, + }, + [Modules.REGION]: { + region_id: data!.regionId, + }, + }) + } +) diff --git a/packages/core-flows/src/definition/cart/workflows/create-carts.ts b/packages/core-flows/src/definition/cart/workflows/create-carts.ts index ce991eead80f0..d8968b14aa474 100644 --- a/packages/core-flows/src/definition/cart/workflows/create-carts.ts +++ b/packages/core-flows/src/definition/cart/workflows/create-carts.ts @@ -1,13 +1,23 @@ import { CartDTO, CreateCartDTO } from "@medusajs/types" import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" import { createCartsStep } from "../steps" +import { findOneOrAnyRegionStep } from "../steps/find-one-or-any-region" +import { linkCartRegionStep } from "../steps/link-cart-region" -type WorkflowInput = { cartData: CreateCartDTO[] } +type WorkflowInput = { cartData: CreateCartDTO } -export const createCartsWorkflowId = "create-carts" -export const createCartsWorkflow = createWorkflow( - createCartsWorkflowId, +export const createCartWorkflowId = "create-cart" +export const createCartWorkflow = createWorkflow( + createCartWorkflowId, (input: WorkflowData): WorkflowData => { - return createCartsStep(input.cartData) + const region = findOneOrAnyRegionStep({ + regionId: input.cartData.region_id, + }) + + const cart = createCartsStep([input.cartData]) + + linkCartRegionStep({ cartId: cart[0].id, regionId: region.id }) + + return cart } ) diff --git a/packages/link-modules/src/definitions/cart-region.ts b/packages/link-modules/src/definitions/cart-region.ts new file mode 100644 index 0000000000000..c3cac7786eefb --- /dev/null +++ b/packages/link-modules/src/definitions/cart-region.ts @@ -0,0 +1,58 @@ +import { Modules } from "@medusajs/modules-sdk" +import { ModuleJoinerConfig } from "@medusajs/types" +import { LINKS } from "../links" + +export const CartRegion: ModuleJoinerConfig = { + serviceName: LINKS.CartRegion, + isLink: true, + databaseConfig: { + tableName: "cart_region", + idPrefix: "cart_reg", + }, + alias: [ + { + name: "cart_region", + }, + { + name: "cart_regions", + }, + ], + primaryKeys: ["id", "cart_id", "region_id"], + relationships: [ + { + serviceName: Modules.CART, + primaryKey: "id", + foreignKey: "cart_id", + alias: "cart", + }, + { + serviceName: Modules.REGION, + primaryKey: "id", + foreignKey: "region_id", + alias: "region", + }, + ], + extends: [ + { + serviceName: Modules.CART, + fieldAlias: { + region: "region_link.region", + }, + relationship: { + serviceName: LINKS.CartRegion, + primaryKey: "cart_id", + foreignKey: "id", + alias: "region_link", + }, + }, + { + serviceName: Modules.REGION, + relationship: { + serviceName: LINKS.CartRegion, + primaryKey: "region_id", + foreignKey: "id", + alias: "cart_link", + }, + }, + ], +} diff --git a/packages/link-modules/src/definitions/index.ts b/packages/link-modules/src/definitions/index.ts index 4c75b587b227b..8bf0ea9e94a5b 100644 --- a/packages/link-modules/src/definitions/index.ts +++ b/packages/link-modules/src/definitions/index.ts @@ -1,8 +1,10 @@ +export * from "./cart-region" +export * from "./cart-sales-channel" export * from "./inventory-level-stock-location" +export * from "./order-sales-channel" +export * from "./product-sales-channel" +export * from "./product-shipping-profile" export * from "./product-variant-inventory-item" export * from "./product-variant-price-set" -export * from "./product-shipping-profile" -export * from "./product-sales-channel" -export * from "./cart-sales-channel" -export * from "./order-sales-channel" export * from "./publishable-api-key-sales-channel" + diff --git a/packages/link-modules/src/initialize/module-definition.ts b/packages/link-modules/src/initialize/module-definition.ts index a4a2b06300931..f2641d4a3ddb2 100644 --- a/packages/link-modules/src/initialize/module-definition.ts +++ b/packages/link-modules/src/initialize/module-definition.ts @@ -3,8 +3,8 @@ import { ModuleExports, ModuleJoinerConfig, } from "@medusajs/types" -import { getModuleService, getReadOnlyModuleService } from "@services" import { getLoaders } from "../loaders" +import { getModuleService, getReadOnlyModuleService } from "../services" export function getLinkModuleDefinition( joinerConfig: ModuleJoinerConfig, diff --git a/packages/link-modules/src/links.ts b/packages/link-modules/src/links.ts index 9d2a479ef202e..f6f1275355e9d 100644 --- a/packages/link-modules/src/links.ts +++ b/packages/link-modules/src/links.ts @@ -14,6 +14,12 @@ export const LINKS = { Modules.PRICING, "price_set_id" ), + CartRegion: composeLinkName( + Modules.CART, + "cart_id", + Modules.REGION, + "region_id" + ), // Internal services ProductShippingProfile: composeLinkName( diff --git a/packages/link-modules/src/loaders/container.ts b/packages/link-modules/src/loaders/container.ts index dd3391bbe8c60..ede4e1a36731d 100644 --- a/packages/link-modules/src/loaders/container.ts +++ b/packages/link-modules/src/loaders/container.ts @@ -1,5 +1,5 @@ -import { BaseRepository, getLinkRepository } from "@repositories" -import { LinkService, getModuleService } from "@services" +import { BaseRepository, getLinkRepository } from "../repositories" +import { LinkService, getModuleService } from "../services" import { LoaderOptions } from "@medusajs/modules-sdk" import { diff --git a/packages/link-modules/src/services/dynamic-service-class.ts b/packages/link-modules/src/services/dynamic-service-class.ts index a06db9e8a364a..d0baa06ad3a16 100644 --- a/packages/link-modules/src/services/dynamic-service-class.ts +++ b/packages/link-modules/src/services/dynamic-service-class.ts @@ -1,5 +1,5 @@ import { Constructor, ILinkModule, ModuleJoinerConfig } from "@medusajs/types" -import { LinkModuleService } from "@services" +import { LinkModuleService } from "../services" export function getModuleService( joinerConfig: ModuleJoinerConfig diff --git a/packages/link-modules/src/services/link-module-service.ts b/packages/link-modules/src/services/link-module-service.ts index 454c3ce921b13..ce99a122655c1 100644 --- a/packages/link-modules/src/services/link-module-service.ts +++ b/packages/link-modules/src/services/link-module-service.ts @@ -20,7 +20,7 @@ import { isDefined, mapObjectTo, } from "@medusajs/utils" -import { LinkService } from "@services" +import { LinkService } from "../services" import { shouldForceTransaction } from "../utils" type InjectedDependencies = { diff --git a/packages/medusa/src/api-v2/store/carts/query-config.ts b/packages/medusa/src/api-v2/store/carts/query-config.ts index dbe313b6812cc..ffc8fb5f8be6d 100644 --- a/packages/medusa/src/api-v2/store/carts/query-config.ts +++ b/packages/medusa/src/api-v2/store/carts/query-config.ts @@ -9,6 +9,7 @@ export const defaultStoreCartFields = [ export const defaultStoreCartRelations = [ "items", + "region", "shipping_address", "billing_address", "shipping_methods", @@ -61,4 +62,7 @@ export const defaultStoreCartRemoteQueryObject = { "phone", ], }, + region: { + fields: ["id", "name", "currency_code"], + }, } diff --git a/packages/medusa/src/api-v2/store/carts/route.ts b/packages/medusa/src/api-v2/store/carts/route.ts index ff46b02506bd1..f3644d47a3be6 100644 --- a/packages/medusa/src/api-v2/store/carts/route.ts +++ b/packages/medusa/src/api-v2/store/carts/route.ts @@ -1,17 +1,13 @@ -import { createCartsWorkflow } from "@medusajs/core-flows" +import { createCartWorkflow } from "@medusajs/core-flows" import { CreateCartDTO } from "@medusajs/types" import { MedusaRequest, MedusaResponse } from "../../../types/routing" +import { defaultStoreCartRemoteQueryObject } from "../carts/query-config" export const POST = async (req: MedusaRequest, res: MedusaResponse) => { - const createCartWorkflow = createCartsWorkflow(req.scope) - const cartData = [ - { - ...(req.validatedBody as CreateCartDTO), - }, - ] + const workflow = createCartWorkflow(req.scope) - const { result, errors } = await createCartWorkflow.run({ - input: { cartData }, + const { result, errors } = await workflow.run({ + input: { cartData: req.validatedBody as CreateCartDTO }, throwOnError: false, }) @@ -19,5 +15,18 @@ export const POST = async (req: MedusaRequest, res: MedusaResponse) => { throw errors[0].error } - res.status(200).json({ cart: result[0] }) + const remoteQuery = req.scope.resolve("remoteQuery") + + const variables = { id: result[0].id } + + const query = { + cart: { + __args: variables, + ...defaultStoreCartRemoteQueryObject, + }, + } + + const [cart] = await remoteQuery(query) + + res.status(200).json({ cart }) } diff --git a/packages/region/src/module-definition.ts b/packages/region/src/module-definition.ts index cc36daff1d97a..8fc1cafe54e47 100644 --- a/packages/region/src/module-definition.ts +++ b/packages/region/src/module-definition.ts @@ -1,5 +1,5 @@ import { ModuleExports } from "@medusajs/types" -import { RegionModuleService } from "@services" +import { RegionModuleService } from "./services" import { Modules } from "@medusajs/modules-sdk" import { ModulesSdkUtils } from "@medusajs/utils" From a3c2a79b26564841c3dd3c6cc7381344ebc67950 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Tue, 13 Feb 2024 13:40:38 +0100 Subject: [PATCH 02/11] add region to test --- .../plugins/__tests__/cart/store/create-cart.spec.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts index 4e7b44a90e79f..b4b9993b3849f 100644 --- a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts +++ b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts @@ -61,11 +61,16 @@ describe("POST /store/carts", () => { id: response.data.cart.id, currency_code: "usd", email: "tony@stark.com", + region: expect.objectContaining({ + id: region.id, + currency_code: "usd", + }), }) ) }) - it("should use any region", async () => { + // TODO: Figure out why currencies are not created for the second test + it.skip("should use any region", async () => { await regionModuleService.create({ name: "US", currency_code: "usd", @@ -76,7 +81,7 @@ describe("POST /store/carts", () => { email: "tony@stark.com", currency_code: "usd", }) - + expect(response.status).toEqual(200) expect(response.data.cart).toEqual( expect.objectContaining({ From 844d142b37e8825ec1663803f52a6d8dd4e1d748 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Wed, 14 Feb 2024 13:47:01 +0100 Subject: [PATCH 03/11] address feedback --- .../plugins/__tests__/cart/store/create-cart.spec.ts | 6 ++++-- packages/link-modules/src/definitions/cart-region.ts | 5 +---- packages/medusa/src/api-v2/store/carts/route.ts | 3 +-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts index b4b9993b3849f..fe44dedfd822e 100644 --- a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts +++ b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts @@ -35,6 +35,9 @@ describe("POST /store/carts", () => { beforeEach(async () => { await adminSeeder(dbConnection) + + // @ts-ignore + await regionModuleService.createDefaultCountriesAndCurrencies() }) afterEach(async () => { @@ -69,8 +72,7 @@ describe("POST /store/carts", () => { ) }) - // TODO: Figure out why currencies are not created for the second test - it.skip("should use any region", async () => { + it("should use any region", async () => { await regionModuleService.create({ name: "US", currency_code: "usd", diff --git a/packages/link-modules/src/definitions/cart-region.ts b/packages/link-modules/src/definitions/cart-region.ts index c3cac7786eefb..8fd495f41a3e7 100644 --- a/packages/link-modules/src/definitions/cart-region.ts +++ b/packages/link-modules/src/definitions/cart-region.ts @@ -11,10 +11,7 @@ export const CartRegion: ModuleJoinerConfig = { }, alias: [ { - name: "cart_region", - }, - { - name: "cart_regions", + name: ["cart_region", "cart_regions"], }, ], primaryKeys: ["id", "cart_id", "region_id"], diff --git a/packages/medusa/src/api-v2/store/carts/route.ts b/packages/medusa/src/api-v2/store/carts/route.ts index f3644d47a3be6..94b2a420f427d 100644 --- a/packages/medusa/src/api-v2/store/carts/route.ts +++ b/packages/medusa/src/api-v2/store/carts/route.ts @@ -21,12 +21,11 @@ export const POST = async (req: MedusaRequest, res: MedusaResponse) => { const query = { cart: { - __args: variables, ...defaultStoreCartRemoteQueryObject, }, } - const [cart] = await remoteQuery(query) + const [cart] = await remoteQuery(query, { cart: variables }) res.status(200).json({ cart }) } From 5e4febdb2b1c017c87c84ee707ea42dbc3743d2a Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Wed, 14 Feb 2024 13:51:22 +0100 Subject: [PATCH 04/11] fix imports --- packages/link-modules/src/initialize/module-definition.ts | 2 +- packages/link-modules/src/loaders/container.ts | 4 ++-- packages/link-modules/src/services/dynamic-service-class.ts | 2 +- packages/link-modules/src/services/link-module-service.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/link-modules/src/initialize/module-definition.ts b/packages/link-modules/src/initialize/module-definition.ts index f2641d4a3ddb2..a4a2b06300931 100644 --- a/packages/link-modules/src/initialize/module-definition.ts +++ b/packages/link-modules/src/initialize/module-definition.ts @@ -3,8 +3,8 @@ import { ModuleExports, ModuleJoinerConfig, } from "@medusajs/types" +import { getModuleService, getReadOnlyModuleService } from "@services" import { getLoaders } from "../loaders" -import { getModuleService, getReadOnlyModuleService } from "../services" export function getLinkModuleDefinition( joinerConfig: ModuleJoinerConfig, diff --git a/packages/link-modules/src/loaders/container.ts b/packages/link-modules/src/loaders/container.ts index ede4e1a36731d..dd3391bbe8c60 100644 --- a/packages/link-modules/src/loaders/container.ts +++ b/packages/link-modules/src/loaders/container.ts @@ -1,5 +1,5 @@ -import { BaseRepository, getLinkRepository } from "../repositories" -import { LinkService, getModuleService } from "../services" +import { BaseRepository, getLinkRepository } from "@repositories" +import { LinkService, getModuleService } from "@services" import { LoaderOptions } from "@medusajs/modules-sdk" import { diff --git a/packages/link-modules/src/services/dynamic-service-class.ts b/packages/link-modules/src/services/dynamic-service-class.ts index d0baa06ad3a16..a06db9e8a364a 100644 --- a/packages/link-modules/src/services/dynamic-service-class.ts +++ b/packages/link-modules/src/services/dynamic-service-class.ts @@ -1,5 +1,5 @@ import { Constructor, ILinkModule, ModuleJoinerConfig } from "@medusajs/types" -import { LinkModuleService } from "../services" +import { LinkModuleService } from "@services" export function getModuleService( joinerConfig: ModuleJoinerConfig diff --git a/packages/link-modules/src/services/link-module-service.ts b/packages/link-modules/src/services/link-module-service.ts index ce99a122655c1..454c3ce921b13 100644 --- a/packages/link-modules/src/services/link-module-service.ts +++ b/packages/link-modules/src/services/link-module-service.ts @@ -20,7 +20,7 @@ import { isDefined, mapObjectTo, } from "@medusajs/utils" -import { LinkService } from "../services" +import { LinkService } from "@services" import { shouldForceTransaction } from "../utils" type InjectedDependencies = { From b7d1f3a32a36c624cffcfed3cc624aad534b2040 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Thu, 15 Feb 2024 13:59:20 +0100 Subject: [PATCH 05/11] convert to readOnly link --- .../__tests__/cart/store/create-cart.spec.ts | 32 +++++++++++++ .../src/definition/cart/steps/index.ts | 4 +- .../definition/cart/steps/link-cart-region.ts | 36 -------------- .../definition/cart/workflows/create-carts.ts | 8 +--- .../src/definitions/cart-region.ts | 47 ++++--------------- packages/types/src/cart/mutations.ts | 6 +-- 6 files changed, 49 insertions(+), 84 deletions(-) delete mode 100644 packages/core-flows/src/definition/cart/steps/link-cart-region.ts diff --git a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts index fe44dedfd822e..ef852bab149b2 100644 --- a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts +++ b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts @@ -104,4 +104,36 @@ describe("POST /store/carts", () => { }) ).rejects.toThrow() }) + + it("should create a cart", async () => { + const region = await regionModuleService.create({ + name: "US", + currency_code: "usd", + }) + + await regionModuleService.create({ + name: "Europe", + currency_code: "eur", + }) + + const api = useApi() as any + const response = await api.post(`/store/carts`, { + email: "tony@stark.com", + currency_code: "usd", + region_id: region.id, + }) + + expect(response.status).toEqual(200) + expect(response.data.cart).toEqual( + expect.objectContaining({ + id: response.data.cart.id, + currency_code: "usd", + email: "tony@stark.com", + region: expect.objectContaining({ + id: region.id, + currency_code: "usd", + }), + }) + ) + }) }) diff --git a/packages/core-flows/src/definition/cart/steps/index.ts b/packages/core-flows/src/definition/cart/steps/index.ts index 3d037035be361..ac2a42f03b742 100644 --- a/packages/core-flows/src/definition/cart/steps/index.ts +++ b/packages/core-flows/src/definition/cart/steps/index.ts @@ -1,2 +1,2 @@ -export * from "./create-carts"; - +export * from "./create-carts" +export * from "./find-one-or-any-region" diff --git a/packages/core-flows/src/definition/cart/steps/link-cart-region.ts b/packages/core-flows/src/definition/cart/steps/link-cart-region.ts deleted file mode 100644 index 259103e5cd3f7..0000000000000 --- a/packages/core-flows/src/definition/cart/steps/link-cart-region.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Modules } from "@medusajs/modules-sdk" -import { StepResponse, createStep } from "@medusajs/workflows-sdk" - -export const linkCartRegionStepId = "link-cart-region" -export const linkCartRegionStep = createStep( - linkCartRegionStepId, - async (data: { regionId: string; cartId: string }, { container }) => { - const remoteLink = container.resolve("remoteLink") - - await remoteLink.create({ - [Modules.CART]: { - cart_id: data.cartId, - }, - [Modules.REGION]: { - region_id: data.regionId, - }, - }) - - return new StepResponse(void 0, { - cartId: data.cartId, - regionId: data.regionId, - }) - }, - async (data, { container }) => { - const remoteLink = container.resolve("remoteLink") - - await remoteLink.dismiss({ - [Modules.CART]: { - cart_id: data!.cartId, - }, - [Modules.REGION]: { - region_id: data!.regionId, - }, - }) - } -) diff --git a/packages/core-flows/src/definition/cart/workflows/create-carts.ts b/packages/core-flows/src/definition/cart/workflows/create-carts.ts index d8968b14aa474..9c942c2152e80 100644 --- a/packages/core-flows/src/definition/cart/workflows/create-carts.ts +++ b/packages/core-flows/src/definition/cart/workflows/create-carts.ts @@ -1,8 +1,6 @@ import { CartDTO, CreateCartDTO } from "@medusajs/types" import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" -import { createCartsStep } from "../steps" -import { findOneOrAnyRegionStep } from "../steps/find-one-or-any-region" -import { linkCartRegionStep } from "../steps/link-cart-region" +import { createCartsStep, findOneOrAnyRegionStep } from "../steps" type WorkflowInput = { cartData: CreateCartDTO } @@ -14,9 +12,7 @@ export const createCartWorkflow = createWorkflow( regionId: input.cartData.region_id, }) - const cart = createCartsStep([input.cartData]) - - linkCartRegionStep({ cartId: cart[0].id, regionId: region.id }) + const cart = createCartsStep([{ ...input.cartData, region_id: region.id }]) return cart } diff --git a/packages/link-modules/src/definitions/cart-region.ts b/packages/link-modules/src/definitions/cart-region.ts index 8fd495f41a3e7..2039212fc1315 100644 --- a/packages/link-modules/src/definitions/cart-region.ts +++ b/packages/link-modules/src/definitions/cart-region.ts @@ -1,54 +1,27 @@ import { Modules } from "@medusajs/modules-sdk" import { ModuleJoinerConfig } from "@medusajs/types" -import { LINKS } from "../links" export const CartRegion: ModuleJoinerConfig = { - serviceName: LINKS.CartRegion, isLink: true, - databaseConfig: { - tableName: "cart_region", - idPrefix: "cart_reg", - }, - alias: [ - { - name: ["cart_region", "cart_regions"], - }, - ], - primaryKeys: ["id", "cart_id", "region_id"], - relationships: [ - { - serviceName: Modules.CART, - primaryKey: "id", - foreignKey: "cart_id", - alias: "cart", - }, - { - serviceName: Modules.REGION, - primaryKey: "id", - foreignKey: "region_id", - alias: "region", - }, - ], + isReadOnlyLink: true, extends: [ { serviceName: Modules.CART, - fieldAlias: { - region: "region_link.region", - }, relationship: { - serviceName: LINKS.CartRegion, - primaryKey: "cart_id", - foreignKey: "id", - alias: "region_link", + serviceName: Modules.REGION, + primaryKey: "id", + foreignKey: "region_id", + alias: "region", }, }, { serviceName: Modules.REGION, relationship: { - serviceName: LINKS.CartRegion, - primaryKey: "region_id", - foreignKey: "id", - alias: "cart_link", + serviceName: Modules.CART, + primaryKey: "id", + foreignKey: "cart_id", + alias: "carts", + isList: true, }, }, ], diff --git a/packages/types/src/cart/mutations.ts b/packages/types/src/cart/mutations.ts index dc4ea41016531..ec8a12f3b13c6 100644 --- a/packages/types/src/cart/mutations.ts +++ b/packages/types/src/cart/mutations.ts @@ -42,9 +42,9 @@ export interface CreateCartDTO { export interface UpdateCartDTO { id: string - region_id?: string - customer_id?: string - sales_channel_id?: string + region_id?: string | null + customer_id?: string | null + sales_channel_id?: string | null email?: string currency_code?: string From d6b8693d389bc974aa4c4d80c0ae7758e51c5d3c Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Thu, 15 Feb 2024 15:33:24 +0100 Subject: [PATCH 06/11] fix --- .../__tests__/cart/store/create-cart.spec.ts | 3 +++ .../definition/cart/workflows/create-carts.ts | 18 ++++++++++++++++-- .../src/api-v2/store/carts/[id]/route.ts | 3 +-- packages/modules-sdk/src/medusa-app.ts | 17 +++++++---------- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts index ef852bab149b2..75edc54b1ddc8 100644 --- a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts +++ b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts @@ -90,6 +90,9 @@ describe("POST /store/carts", () => { id: response.data.cart.id, currency_code: "usd", email: "tony@stark.com", + region: expect.objectContaining({ + id: expect.any(String), + }), }) ) }) diff --git a/packages/core-flows/src/definition/cart/workflows/create-carts.ts b/packages/core-flows/src/definition/cart/workflows/create-carts.ts index 9c942c2152e80..dbaa61472b50b 100644 --- a/packages/core-flows/src/definition/cart/workflows/create-carts.ts +++ b/packages/core-flows/src/definition/cart/workflows/create-carts.ts @@ -1,5 +1,9 @@ import { CartDTO, CreateCartDTO } from "@medusajs/types" -import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" +import { + WorkflowData, + createWorkflow, + transform, +} from "@medusajs/workflows-sdk" import { createCartsStep, findOneOrAnyRegionStep } from "../steps" type WorkflowInput = { cartData: CreateCartDTO } @@ -12,7 +16,17 @@ export const createCartWorkflow = createWorkflow( regionId: input.cartData.region_id, }) - const cart = createCartsStep([{ ...input.cartData, region_id: region.id }]) + const cartInput = transform( + { cartData: input.cartData, region }, + (input) => { + return { + ...input.cartData, + region_id: input.region.id, + } + } + ) + + const cart = createCartsStep([cartInput]) return cart } diff --git a/packages/medusa/src/api-v2/store/carts/[id]/route.ts b/packages/medusa/src/api-v2/store/carts/[id]/route.ts index c4c6071c08de2..4aa7fb722b687 100644 --- a/packages/medusa/src/api-v2/store/carts/[id]/route.ts +++ b/packages/medusa/src/api-v2/store/carts/[id]/route.ts @@ -8,12 +8,11 @@ export const GET = async (req: MedusaRequest, res: MedusaResponse) => { const query = { cart: { - __args: variables, ...defaultStoreCartRemoteQueryObject, }, } - const [cart] = await remoteQuery(query) + const [cart] = await remoteQuery(query, { cart: variables }) res.json({ cart }) } diff --git a/packages/modules-sdk/src/medusa-app.ts b/packages/modules-sdk/src/medusa-app.ts index ce372e6c49800..124b899078d8c 100644 --- a/packages/modules-sdk/src/medusa-app.ts +++ b/packages/modules-sdk/src/medusa-app.ts @@ -293,16 +293,13 @@ async function MedusaApp_({ allowUnregistered: true, }) - const { - remoteLink, - linkResolution, - runMigrations: linkModuleMigration, - } = await initializeLinks({ - config: linkModuleOptions, - linkModules, - injectedDependencies, - moduleExports: isMedusaModule(linkModule) ? linkModule : undefined, - }) + const { remoteLink, runMigrations: linkModuleMigration } = + await initializeLinks({ + config: linkModuleOptions, + linkModules, + injectedDependencies, + moduleExports: isMedusaModule(linkModule) ? linkModule : undefined, + }) const loadedSchema = getLoadedSchema() const { schema, notFound } = cleanAndMergeSchema(loadedSchema) From ce94390bbbbf8037cfff786eed49c098cfc7005a Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Thu, 15 Feb 2024 19:06:36 +0100 Subject: [PATCH 07/11] remove redundant link name --- packages/link-modules/src/links.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/link-modules/src/links.ts b/packages/link-modules/src/links.ts index f6f1275355e9d..9d2a479ef202e 100644 --- a/packages/link-modules/src/links.ts +++ b/packages/link-modules/src/links.ts @@ -14,12 +14,6 @@ export const LINKS = { Modules.PRICING, "price_set_id" ), - CartRegion: composeLinkName( - Modules.CART, - "cart_id", - Modules.REGION, - "region_id" - ), // Internal services ProductShippingProfile: composeLinkName( From 1597853c3023962d0ae7834237e6cda779285e4b Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Fri, 16 Feb 2024 09:14:53 +0100 Subject: [PATCH 08/11] add test + remove legacy create-cart workflow --- .../__tests__/cart/store/create-cart.spec.ts | 24 +++ .../definition/cart/workflows/create-carts.ts | 20 +- .../medusa/src/api-v2/store/carts/route.ts | 2 +- .../src/api/routes/store/carts/create-cart.ts | 191 +++++++----------- packages/types/src/cart/index.ts | 2 +- packages/types/src/cart/workflows.ts | 20 ++ 6 files changed, 131 insertions(+), 128 deletions(-) create mode 100644 packages/types/src/cart/workflows.ts diff --git a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts index 75edc54b1ddc8..4a1ef297a2ff0 100644 --- a/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts +++ b/integration-tests/plugins/__tests__/cart/store/create-cart.spec.ts @@ -97,6 +97,30 @@ describe("POST /store/carts", () => { ) }) + it("should use region currency code", async () => { + await regionModuleService.create({ + name: "US", + currency_code: "usd", + }) + + const api = useApi() as any + const response = await api.post(`/store/carts`, { + email: "tony@stark.com", + }) + + expect(response.status).toEqual(200) + expect(response.data.cart).toEqual( + expect.objectContaining({ + id: response.data.cart.id, + currency_code: "usd", + email: "tony@stark.com", + region: expect.objectContaining({ + id: expect.any(String), + }), + }) + ) + }) + it("should throw when no regions exist", async () => { const api = useApi() as any diff --git a/packages/core-flows/src/definition/cart/workflows/create-carts.ts b/packages/core-flows/src/definition/cart/workflows/create-carts.ts index dbaa61472b50b..8c6c3dfd01a5c 100644 --- a/packages/core-flows/src/definition/cart/workflows/create-carts.ts +++ b/packages/core-flows/src/definition/cart/workflows/create-carts.ts @@ -1,4 +1,4 @@ -import { CartDTO, CreateCartDTO } from "@medusajs/types" +import { CartDTO, CreateCartWorkflowInputDTO } from "@medusajs/types" import { WorkflowData, createWorkflow, @@ -6,25 +6,23 @@ import { } from "@medusajs/workflows-sdk" import { createCartsStep, findOneOrAnyRegionStep } from "../steps" -type WorkflowInput = { cartData: CreateCartDTO } +type WorkflowInput = CreateCartWorkflowInputDTO export const createCartWorkflowId = "create-cart" export const createCartWorkflow = createWorkflow( createCartWorkflowId, (input: WorkflowData): WorkflowData => { const region = findOneOrAnyRegionStep({ - regionId: input.cartData.region_id, + regionId: input.region_id, }) - const cartInput = transform( - { cartData: input.cartData, region }, - (input) => { - return { - ...input.cartData, - region_id: input.region.id, - } + const cartInput = transform({ input, region }, (data) => { + return { + ...data.input, + currency_code: data?.input.currency_code || data.region.currency_code, + region_id: data.region.id, } - ) + }) const cart = createCartsStep([cartInput]) diff --git a/packages/medusa/src/api-v2/store/carts/route.ts b/packages/medusa/src/api-v2/store/carts/route.ts index 94b2a420f427d..b32824702e231 100644 --- a/packages/medusa/src/api-v2/store/carts/route.ts +++ b/packages/medusa/src/api-v2/store/carts/route.ts @@ -7,7 +7,7 @@ export const POST = async (req: MedusaRequest, res: MedusaResponse) => { const workflow = createCartWorkflow(req.scope) const { result, errors } = await workflow.run({ - input: { cartData: req.validatedBody as CreateCartDTO }, + input: req.validatedBody as CreateCartDTO, throwOnError: false, }) diff --git a/packages/medusa/src/api/routes/store/carts/create-cart.ts b/packages/medusa/src/api/routes/store/carts/create-cart.ts index 32e471fbb8ced..8b97b3eac11d4 100644 --- a/packages/medusa/src/api/routes/store/carts/create-cart.ts +++ b/packages/medusa/src/api/routes/store/carts/create-cart.ts @@ -1,7 +1,3 @@ -import { - createCart as createCartWorkflow, - Workflows, -} from "@medusajs/core-flows" import { IsArray, IsInt, @@ -10,7 +6,7 @@ import { IsString, ValidateNested, } from "class-validator" -import { isDefined, MedusaError } from "medusa-core-utils" +import { MedusaError, isDefined } from "medusa-core-utils" import { defaultStoreCartFields, defaultStoreCartRelations } from "." import { CartService, @@ -19,7 +15,6 @@ import { RegionService, } from "../../../../services" -import { MedusaContainer } from "@medusajs/modules-sdk" import { FlagRouter } from "@medusajs/utils" import { Type } from "class-transformer" import reqIp from "request-ip" @@ -122,129 +117,95 @@ export default async (req, res) => { user_agent: req.get("user-agent"), } - const isWorkflowEnabled = featureFlagRouter.isFeatureEnabled({ - workflows: Workflows.CreateCart, - }) - - let cart + const lineItemService: LineItemService = req.scope.resolve("lineItemService") + const regionService: RegionService = req.scope.resolve("regionService") - if (isWorkflowEnabled) { - const cartWorkflow = createCartWorkflow(req.scope as MedusaContainer) - const input = { - ...validated, - publishableApiKeyScopes: req.publishableApiKeyScopes, - context: { - ...reqContext, - ...validated.context, - }, - } - const { result, errors } = await cartWorkflow.run({ - input, - context: { - manager: entityManager, - }, - throwOnError: false, - }) - - if (Array.isArray(errors)) { - if (isDefined(errors[0])) { - throw errors[0].error - } - } - - cart = result + let regionId!: string + if (isDefined(validated.region_id)) { + regionId = validated.region_id as string } else { - const lineItemService: LineItemService = - req.scope.resolve("lineItemService") - const regionService: RegionService = req.scope.resolve("regionService") + const regions = await regionService.list({}) - let regionId!: string - if (isDefined(validated.region_id)) { - regionId = validated.region_id as string - } else { - const regions = await regionService.list({}) + if (!regions?.length) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `A region is required to create a cart` + ) + } - if (!regions?.length) { - throw new MedusaError( - MedusaError.Types.INVALID_DATA, - `A region is required to create a cart` - ) - } + regionId = regions[0].id + } - regionId = regions[0].id - } + const toCreate: Partial = { + region_id: regionId, + sales_channel_id: validated.sales_channel_id, + context: { + ...reqContext, + ...validated.context, + }, + } - const toCreate: Partial = { - region_id: regionId, - sales_channel_id: validated.sales_channel_id, - context: { - ...reqContext, - ...validated.context, - }, - } + if (req.user && req.user.customer_id) { + const customerService = req.scope.resolve("customerService") + const customer = await customerService.retrieve(req.user.customer_id) + toCreate["customer_id"] = customer.id + toCreate["email"] = customer.email + } - if (req.user && req.user.customer_id) { - const customerService = req.scope.resolve("customerService") - const customer = await customerService.retrieve(req.user.customer_id) - toCreate["customer_id"] = customer.id - toCreate["email"] = customer.email + if (validated.country_code) { + toCreate["shipping_address"] = { + country_code: validated.country_code.toLowerCase(), } + } - if (validated.country_code) { - toCreate["shipping_address"] = { - country_code: validated.country_code.toLowerCase(), - } + if ( + !toCreate.sales_channel_id && + req.publishableApiKeyScopes?.sales_channel_ids.length + ) { + if (req.publishableApiKeyScopes.sales_channel_ids.length > 1) { + throw new MedusaError( + MedusaError.Types.UNEXPECTED_STATE, + "The PublishableApiKey provided in the request header has multiple associated sales channels." + ) } - if ( - !toCreate.sales_channel_id && - req.publishableApiKeyScopes?.sales_channel_ids.length - ) { - if (req.publishableApiKeyScopes.sales_channel_ids.length > 1) { - throw new MedusaError( - MedusaError.Types.UNEXPECTED_STATE, - "The PublishableApiKey provided in the request header has multiple associated sales channels." - ) - } + toCreate.sales_channel_id = req.publishableApiKeyScopes.sales_channel_ids[0] + } - toCreate.sales_channel_id = - req.publishableApiKeyScopes.sales_channel_ids[0] + let cart = await entityManager.transaction(async (manager) => { + const cartServiceTx = cartService.withTransaction(manager) + const lineItemServiceTx = lineItemService.withTransaction(manager) + + const createdCart = await cartServiceTx.create(toCreate) + + if (validated.items?.length) { + const generateInputData = validated.items.map((item) => { + return { + variantId: item.variant_id, + quantity: item.quantity, + } + }) + const generatedLineItems: LineItem[] = await lineItemServiceTx.generate( + generateInputData, + { + region_id: regionId, + customer_id: req.user?.customer_id, + } + ) + + await cartServiceTx.addOrUpdateLineItems( + createdCart.id, + generatedLineItems, + { + validateSalesChannels: + featureFlagRouter.isFeatureEnabled("sales_channels"), + } + ) } - cart = await entityManager.transaction(async (manager) => { - const cartServiceTx = cartService.withTransaction(manager) - const lineItemServiceTx = lineItemService.withTransaction(manager) - - const createdCart = await cartServiceTx.create(toCreate) - - if (validated.items?.length) { - const generateInputData = validated.items.map((item) => { - return { - variantId: item.variant_id, - quantity: item.quantity, - } - }) - const generatedLineItems: LineItem[] = await lineItemServiceTx.generate( - generateInputData, - { - region_id: regionId, - customer_id: req.user?.customer_id, - } - ) - - await cartServiceTx.addOrUpdateLineItems( - createdCart.id, - generatedLineItems, - { - validateSalesChannels: - featureFlagRouter.isFeatureEnabled("sales_channels"), - } - ) - } - - return createdCart - }) - } + return createdCart + }) + // } cart = await cartService.retrieveWithTotals(cart!.id, { select: defaultStoreCartFields, diff --git a/packages/types/src/cart/index.ts b/packages/types/src/cart/index.ts index a83c8a61ef6d7..dfae9af8a2f1f 100644 --- a/packages/types/src/cart/index.ts +++ b/packages/types/src/cart/index.ts @@ -1,4 +1,4 @@ export * from "./common" export * from "./mutations" export * from "./service" - +export * from "./workflows" diff --git a/packages/types/src/cart/workflows.ts b/packages/types/src/cart/workflows.ts new file mode 100644 index 0000000000000..41df8d2d62d06 --- /dev/null +++ b/packages/types/src/cart/workflows.ts @@ -0,0 +1,20 @@ +import { + CreateAddressDTO, + CreateLineItemDTO, + UpdateAddressDTO, +} from "./mutations" + +export interface CreateCartWorkflowInputDTO { + region_id?: string + customer_id?: string + sales_channel_id?: string + email?: string + currency_code: string + shipping_address_id?: string + billing_address_id?: string + shipping_address?: CreateAddressDTO | UpdateAddressDTO + billing_address?: CreateAddressDTO | UpdateAddressDTO + metadata?: Record + + items?: CreateLineItemDTO[] +} From 2225f157fe49fdd428128dc778779d38164d15d9 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Fri, 16 Feb 2024 14:00:44 +0100 Subject: [PATCH 09/11] fix link + add test --- .../link-modules/cart-region.spec.ts | 99 +++++++++++++++++++ .../src/definitions/cart-region.ts | 4 +- 2 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts diff --git a/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts b/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts new file mode 100644 index 0000000000000..e192300859673 --- /dev/null +++ b/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts @@ -0,0 +1,99 @@ +import { ModuleRegistrationName } from "@medusajs/modules-sdk" +import { ICartModuleService, IRegionModuleService } from "@medusajs/types" +import path from "path" +import { startBootstrapApp } from "../../../environment-helpers/bootstrap-app" +import { getContainer } from "../../../environment-helpers/use-container" +import { initDb, useDb } from "../../../environment-helpers/use-db" +import adminSeeder from "../../../helpers/admin-seeder" + +jest.setTimeout(50000) + +const env = { MEDUSA_FF_MEDUSA_V2: true } + +describe("Link: Cart Region", () => { + let dbConnection + let appContainer + let shutdownServer + let cartModuleService: ICartModuleService + let regionModule: IRegionModuleService + let remoteQuery + + beforeAll(async () => { + const cwd = path.resolve(path.join(__dirname, "..", "..")) + dbConnection = await initDb({ cwd, env } as any) + shutdownServer = await startBootstrapApp({ cwd, env }) + appContainer = getContainer() + cartModuleService = appContainer.resolve(ModuleRegistrationName.CART) + regionModule = appContainer.resolve(ModuleRegistrationName.REGION) + remoteQuery = appContainer.resolve("remoteQuery") + }) + + afterAll(async () => { + const db = useDb() + await db.shutdown() + await shutdownServer() + }) + + beforeEach(async () => { + await adminSeeder(dbConnection) + + // @ts-ignore + await regionModule.createDefaultCountriesAndCurrencies() + }) + + afterEach(async () => { + const db = useDb() + await db.teardown() + }) + + it("should query carts and regions with remote query", async () => { + const region = await regionModule.create({ + name: "Region", + currency_code: "usd", + }) + + const cart = await cartModuleService.create({ + email: "tony@stark.com", + currency_code: "usd", + region_id: region.id, + }) + + const carts = await remoteQuery({ + cart: { + fields: ["id"], + region: { + fields: ["id"], + }, + }, + }) + + const regions = await remoteQuery({ + region: { + fields: ["id"], + carts: { + fields: ["id"], + }, + }, + }) + + expect(carts).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: cart.id, + region: expect.objectContaining({ id: region.id }), + }), + ]) + ) + + expect(regions).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: region.id, + carts: expect.arrayContaining([ + expect.objectContaining({ id: cart.id }), + ]), + }), + ]) + ) + }) +}) diff --git a/packages/link-modules/src/definitions/cart-region.ts b/packages/link-modules/src/definitions/cart-region.ts index 2039212fc1315..7cf54ca1258ff 100644 --- a/packages/link-modules/src/definitions/cart-region.ts +++ b/packages/link-modules/src/definitions/cart-region.ts @@ -18,8 +18,8 @@ export const CartRegion: ModuleJoinerConfig = { serviceName: Modules.REGION, relationship: { serviceName: Modules.CART, - primaryKey: "id", - foreignKey: "cart_id", + primaryKey: "region_id", + foreignKey: "id", alias: "carts", isList: true, }, From cb3c05acdf78974605750328006267298d210e16 Mon Sep 17 00:00:00 2001 From: olivermrbl Date: Fri, 16 Feb 2024 14:06:04 +0100 Subject: [PATCH 10/11] remove admin seeding --- .../plugins/__tests__/link-modules/cart-region.spec.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts b/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts index e192300859673..ae25bc10a745d 100644 --- a/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts +++ b/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts @@ -4,7 +4,6 @@ import path from "path" import { startBootstrapApp } from "../../../environment-helpers/bootstrap-app" import { getContainer } from "../../../environment-helpers/use-container" import { initDb, useDb } from "../../../environment-helpers/use-db" -import adminSeeder from "../../../helpers/admin-seeder" jest.setTimeout(50000) @@ -35,8 +34,6 @@ describe("Link: Cart Region", () => { }) beforeEach(async () => { - await adminSeeder(dbConnection) - // @ts-ignore await regionModule.createDefaultCountriesAndCurrencies() }) From 8aaab8146e301ecdcfbe64b1482668af6b9e68a2 Mon Sep 17 00:00:00 2001 From: Oli Juhl <59018053+olivermrbl@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:38:24 +0100 Subject: [PATCH 11/11] Create violet-masks-do.md --- .changeset/violet-masks-do.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/violet-masks-do.md diff --git a/.changeset/violet-masks-do.md b/.changeset/violet-masks-do.md new file mode 100644 index 0000000000000..2ee85a5c83f35 --- /dev/null +++ b/.changeset/violet-masks-do.md @@ -0,0 +1,9 @@ +--- +"@medusajs/medusa": patch +"@medusajs/core-flows": patch +"@medusajs/link-modules": patch +"@medusajs/modules-sdk": patch +"@medusajs/types": patch +--- + +feat: CartRegion link, definition + workflow