From f3d19f5394999280daaff33af5ef68d16e19acb8 Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Thu, 23 May 2024 08:26:16 -0300 Subject: [PATCH] fix(workflows-sdk): use loaded modules when container is empty (#7422) --- .../orchestration/src/joiner/remote-joiner.ts | 12 --- packages/core/types/src/joiner/index.ts | 5 - packages/core/types/src/modules-sdk/index.ts | 4 - .../src/helper/workflow-export.ts | 18 ++-- packages/medusa/src/loaders/medusa-app.ts | 5 - packages/medusa/src/utils/index.ts | 5 +- .../src/utils/remote-query-fetch-data.ts | 102 ------------------ .../src/definitions/customer-auth.ts | 1 - .../src/definitions/product-sales-channel.ts | 2 - .../definitions/product-variant-price-set.ts | 2 - .../link-modules/src/definitions/user-auth.ts | 1 - .../link-modules/src/initialize/index.ts | 6 +- .../link-modules/src/utils/generate-schema.ts | 6 +- 13 files changed, 15 insertions(+), 154 deletions(-) delete mode 100644 packages/medusa/src/utils/remote-query-fetch-data.ts diff --git a/packages/core/orchestration/src/joiner/remote-joiner.ts b/packages/core/orchestration/src/joiner/remote-joiner.ts index c0714a3228..234170f7fa 100644 --- a/packages/core/orchestration/src/joiner/remote-joiner.ts +++ b/packages/core/orchestration/src/joiner/remote-joiner.ts @@ -244,18 +244,6 @@ export class RemoteJoiner { { fieldAlias, relationships }, ] of expandedRelationships) { if (!this.serviceConfigCache.has(serviceName)) { - // If true, the relationship is an internal service from the medusa core - // If modules are being used ouside of the core, we should not be throwing - // errors when the core services are not found in cache. - // TODO: Remove when there are no more "internal" services - const isInternalServicePresent = relationships.some( - (rel) => rel.isInternalService === true - ) - - if (isInternalServicePresent) { - continue - } - throw new Error(`Service "${serviceName}" was not found`) } diff --git a/packages/core/types/src/joiner/index.ts b/packages/core/types/src/joiner/index.ts index 3ccf2af368..78e6afc9b5 100644 --- a/packages/core/types/src/joiner/index.ts +++ b/packages/core/types/src/joiner/index.ts @@ -3,11 +3,6 @@ export type JoinerRelationship = { foreignKey: string primaryKey: string serviceName: string - /** - * If true, the relationship is an internal service from the medusa core - * TODO: Remove when there are no more "internal" services - */ - isInternalService?: boolean /** * In an inverted relationship the foreign key is on the other service and the primary key is on the current service */ diff --git a/packages/core/types/src/modules-sdk/index.ts b/packages/core/types/src/modules-sdk/index.ts index 78072a3c4b..5cd7971e18 100644 --- a/packages/core/types/src/modules-sdk/index.ts +++ b/packages/core/types/src/modules-sdk/index.ts @@ -220,10 +220,6 @@ export type ModuleJoinerConfig = Omit< } export declare type ModuleJoinerRelationship = JoinerRelationship & { - /** - * If true, the relationship is an internal service from the medusa core TODO: Remove when there are no more "internal" services - */ - isInternalService?: boolean /** * If true, the link joiner will cascade deleting the relationship */ diff --git a/packages/core/workflows-sdk/src/helper/workflow-export.ts b/packages/core/workflows-sdk/src/helper/workflow-export.ts index ee48dee23c..1dfbb7af71 100644 --- a/packages/core/workflows-sdk/src/helper/workflow-export.ts +++ b/packages/core/workflows-sdk/src/helper/workflow-export.ts @@ -1,12 +1,11 @@ +import { MedusaModule } from "@medusajs/modules-sdk" import { LocalWorkflow, TransactionHandlerType, TransactionState, } from "@medusajs/orchestration" import { LoadedModule, MedusaContainer } from "@medusajs/types" - -import { MedusaModule } from "@medusajs/modules-sdk" -import { MedusaContextType } from "@medusajs/utils" +import { MedusaContextType, isPresent } from "@medusajs/utils" import { EOL } from "os" import { ulid } from "ulid" import { MedusaWorkflow } from "../medusa-workflow" @@ -62,13 +61,16 @@ function createContextualWorkflowRunner< }, ...args ) => { - if (!executionContainer && !flow.container) { - executionContainer = MedusaModule.getLoadedModules().map( - (mod) => Object.values(mod)[0] - ) + if (!executionContainer) { + const container_ = flow.container as MedusaContainer + if (!container_ || !isPresent(container_?.registrations)) { + executionContainer = MedusaModule.getLoadedModules().map( + (mod) => Object.values(mod)[0] + ) + } } - if (!flow.container) { + if (executionContainer) { flow.container = executionContainer } diff --git a/packages/medusa/src/loaders/medusa-app.ts b/packages/medusa/src/loaders/medusa-app.ts index 71695b9df6..a2bf7b9429 100644 --- a/packages/medusa/src/loaders/medusa-app.ts +++ b/packages/medusa/src/loaders/medusa-app.ts @@ -20,7 +20,6 @@ import { } from "@medusajs/utils" import { asValue } from "awilix" -import { remoteQueryFetchData } from "../utils/remote-query-fetch-data" export function mergeDefaultModules( modulesConfig: CommonTypes.ConfigModule["modules"] @@ -93,7 +92,6 @@ async function runMedusaAppMigrations({ if (revert) { await MedusaAppMigrateDown({ modulesConfig: configModules, - remoteFetchData: remoteQueryFetchData(container), sharedContainer: container, sharedResourcesConfig, injectedDependencies, @@ -101,7 +99,6 @@ async function runMedusaAppMigrations({ } else { await MedusaAppMigrateUp({ modulesConfig: configModules, - remoteFetchData: remoteQueryFetchData(container), sharedContainer: container, sharedResourcesConfig, injectedDependencies, @@ -179,7 +176,6 @@ export const loadMedusaApp = async ( const medusaApp = await MedusaApp({ workerMode: configModule.projectConfig.worker_mode, modulesConfig: configModules, - remoteFetchData: remoteQueryFetchData(container), sharedContainer: container, sharedResourcesConfig, injectedDependencies, @@ -254,7 +250,6 @@ export async function runModulesLoader({ await MedusaApp({ modulesConfig: configModules, - remoteFetchData: remoteQueryFetchData(container), sharedContainer: container, sharedResourcesConfig, injectedDependencies, diff --git a/packages/medusa/src/utils/index.ts b/packages/medusa/src/utils/index.ts index 1526616ba2..13545c3094 100644 --- a/packages/medusa/src/utils/index.ts +++ b/packages/medusa/src/utils/index.ts @@ -1,6 +1,5 @@ export * from "./clean-response-data" export * from "./exception-formatter" -export * from "./omit-deep" -export * from "./remote-query-fetch-data" -export * from "./remove-undefined-properties" export * from "./middlewares" +export * from "./omit-deep" +export * from "./remove-undefined-properties" diff --git a/packages/medusa/src/utils/remote-query-fetch-data.ts b/packages/medusa/src/utils/remote-query-fetch-data.ts deleted file mode 100644 index 0d0897e49f..0000000000 --- a/packages/medusa/src/utils/remote-query-fetch-data.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { MedusaModule, RemoteQuery } from "@medusajs/modules-sdk" -import { MedusaContainer } from "@medusajs/types" - -function hasPagination(options: { [attr: string]: unknown }): boolean { - if (!options) { - return false - } - - const attrs = ["skip"] - return Object.keys(options).some((key) => attrs.includes(key)) -} - -function buildPagination(options, count) { - return { - skip: options.skip, - take: options.take, - count, - } -} - -export function remoteQueryFetchData(container: MedusaContainer) { - return async (expand, keyField, ids, relationship) => { - const serviceConfig = expand.serviceConfig - const service = container.resolve(serviceConfig.serviceName, { - allowUnregistered: true, - }) - - if (MedusaModule.isInstalled(serviceConfig.serviceName)) { - return - } - - let filters = {} - const options = { - ...RemoteQuery.getAllFieldsAndRelations(expand), - } - - const availableOptions = [ - "skip", - "take", - "limit", - "offset", - "order", - "sort", - "withDeleted", - ] - const availableOptionsAlias = new Map([ - ["limit", "take"], - ["offset", "skip"], - ["sort", "order"], - ]) - for (const arg of expand.args || []) { - if (arg.name === "filters" && arg.value) { - filters = { ...arg.value } - } else if (availableOptions.includes(arg.name)) { - const argName = availableOptionsAlias.has(arg.name) - ? availableOptionsAlias.get(arg.name) - : arg.name - options[argName] = arg.value - } - } - const expandRelations = Object.keys(expand.expands ?? {}) - - options.relations = options.relations.filter( - (relation) => !expandRelations.some((ex) => relation.startsWith(ex)) - ) - - options.select = options.relations.filter( - (field) => !expandRelations.some((ex) => field.startsWith(ex)) - ) - - if (ids) { - filters[keyField] = ids - } - - const hasPagination_ = hasPagination(options) - - let methodName = hasPagination_ ? "listAndCount" : "list" - - if (relationship?.args?.methodSuffix) { - methodName += relationship.args.methodSuffix - } else if (serviceConfig?.args?.methodSuffix) { - methodName += serviceConfig.args.methodSuffix - } - - const result = await service[methodName](filters, options) - - if (hasPagination_) { - const [data, count] = result - return { - data: { - rows: data, - metadata: buildPagination(options, count), - }, - path: "rows", - } - } - - return { - data: result, - } as any - } -} diff --git a/packages/modules/link-modules/src/definitions/customer-auth.ts b/packages/modules/link-modules/src/definitions/customer-auth.ts index f2f12b4817..641086329c 100644 --- a/packages/modules/link-modules/src/definitions/customer-auth.ts +++ b/packages/modules/link-modules/src/definitions/customer-auth.ts @@ -27,7 +27,6 @@ export const CustomerAuth: ModuleJoinerConfig = { }, { serviceName: Modules.AUTH, - isInternalService: true, primaryKey: "id", foreignKey: "auth_identity_id", alias: "auth", diff --git a/packages/modules/link-modules/src/definitions/product-sales-channel.ts b/packages/modules/link-modules/src/definitions/product-sales-channel.ts index dde30c4bd3..ea36bd18a7 100644 --- a/packages/modules/link-modules/src/definitions/product-sales-channel.ts +++ b/packages/modules/link-modules/src/definitions/product-sales-channel.ts @@ -27,7 +27,6 @@ export const ProductSalesChannel: ModuleJoinerConfig = { }, { serviceName: Modules.SALES_CHANNEL, - isInternalService: true, primaryKey: "id", foreignKey: "sales_channel_id", alias: "sales_channel", @@ -51,7 +50,6 @@ export const ProductSalesChannel: ModuleJoinerConfig = { serviceName: Modules.SALES_CHANNEL, relationship: { serviceName: LINKS.ProductSalesChannel, - isInternalService: true, primaryKey: "sales_channel_id", foreignKey: "id", alias: "products_link", diff --git a/packages/modules/link-modules/src/definitions/product-variant-price-set.ts b/packages/modules/link-modules/src/definitions/product-variant-price-set.ts index c21d2e44f4..54c441cd18 100644 --- a/packages/modules/link-modules/src/definitions/product-variant-price-set.ts +++ b/packages/modules/link-modules/src/definitions/product-variant-price-set.ts @@ -21,8 +21,6 @@ export const ProductVariantPriceSet: ModuleJoinerConfig = { relationships: [ { serviceName: Modules.PRODUCT, - // TODO: Remove this when product module is the default product service - isInternalService: true, primaryKey: "id", foreignKey: "variant_id", alias: "variant", diff --git a/packages/modules/link-modules/src/definitions/user-auth.ts b/packages/modules/link-modules/src/definitions/user-auth.ts index 021e65b64c..3eed76c7f9 100644 --- a/packages/modules/link-modules/src/definitions/user-auth.ts +++ b/packages/modules/link-modules/src/definitions/user-auth.ts @@ -27,7 +27,6 @@ export const UserAuth: ModuleJoinerConfig = { }, { serviceName: Modules.AUTH, - isInternalService: true, primaryKey: "id", foreignKey: "auth_identity_id", alias: "auth", diff --git a/packages/modules/link-modules/src/initialize/index.ts b/packages/modules/link-modules/src/initialize/index.ts index ee27b86221..122a7f45b6 100644 --- a/packages/modules/link-modules/src/initialize/index.ts +++ b/packages/modules/link-modules/src/initialize/index.ts @@ -99,10 +99,8 @@ export const initialize = async ( continue } } else if ( - (!primary.isInternalService && - !modulesLoadedKeys.includes(primary.serviceName)) || - (!foreign.isInternalService && - !modulesLoadedKeys.includes(foreign.serviceName)) + !modulesLoadedKeys.includes(primary.serviceName) || + !modulesLoadedKeys.includes(foreign.serviceName) ) { continue } diff --git a/packages/modules/link-modules/src/utils/generate-schema.ts b/packages/modules/link-modules/src/utils/generate-schema.ts index d77aedcfdd..66bf9063fe 100644 --- a/packages/modules/link-modules/src/utils/generate-schema.ts +++ b/packages/modules/link-modules/src/utils/generate-schema.ts @@ -32,11 +32,7 @@ export function generateGraphQLSchema( for (const extend of joinerConfig.extends ?? []) { const extendedModule = MedusaModule.getModuleInstance(extend.serviceName) - if ( - !isReadOnlyLink && - !extendedModule && - !extend.relationship.isInternalService - ) { + if (!extendedModule) { throw new Error( `Module ${extend.serviceName} not found. Please verify that the module is configured and installed, also the module must be loaded before the link modules.` )