feat: Fulfillment module basic structure (#6319)

**What**
Scafold the fulfillment module basic structure

**Bonus**
Simplified module scaffolding with new factories and less directories to manage
- mikro orm connection loader factory
- initialize factory

FIXES CORE-1709
FIXES CORE-1710
This commit is contained in:
Adrien de Peretti
2024-02-06 14:29:36 +01:00
committed by GitHub
parent 2104843826
commit 12054f5c01
42 changed files with 694 additions and 1 deletions

View File

@@ -19,6 +19,7 @@ export enum Modules {
PRODUCT = "productService",
PROMOTION = "promotion",
SALES_CHANNEL = "salesChannel",
FULFILLMENT = "fulfillment",
STOCK_LOCATION = "stockLocationService",
USER = "user",
WORKFLOW_ENGINE = "workflows",
@@ -37,6 +38,7 @@ export enum ModuleRegistrationName {
PRODUCT = "productModuleService",
PROMOTION = "promotionModuleService",
SALES_CHANNEL = "salesChannelModuleService",
FULFILLMENT = "fulfillmentModuleService",
STOCK_LOCATION = "stockLocationService",
USER = "userModuleService",
WORKFLOW_ENGINE = "workflowsModuleService",
@@ -56,6 +58,7 @@ export const MODULE_PACKAGE_NAMES = {
[Modules.PRODUCT]: "@medusajs/product",
[Modules.PROMOTION]: "@medusajs/promotion",
[Modules.SALES_CHANNEL]: "@medusajs/sales-channel",
[Modules.FULFILLMENT]: "@medusajs/fulfillment",
[Modules.STOCK_LOCATION]: "@medusajs/stock-location",
[Modules.USER]: "@medusajs/user",
[Modules.WORKFLOW_ENGINE]: "@medusajs/workflow-engine-inmemory",
@@ -195,6 +198,19 @@ export const ModulesDefinition: { [key: string | Modules]: ModuleDefinition } =
resources: MODULE_RESOURCE_TYPE.SHARED,
},
},
[Modules.FULFILLMENT]: {
key: Modules.FULFILLMENT,
registrationName: ModuleRegistrationName.FULFILLMENT,
defaultPackage: false,
label: upperCaseFirst(ModuleRegistrationName.FULFILLMENT),
isRequired: false,
isQueryable: true,
dependencies: ["logger", "eventBusService"],
defaultModuleDeclaration: {
scope: MODULE_SCOPE.INTERNAL,
resources: MODULE_RESOURCE_TYPE.SHARED,
},
},
[Modules.CART]: {
key: Modules.CART,
registrationName: ModuleRegistrationName.CART,

View File

@@ -5,4 +5,4 @@ export * from "./medusa-app"
export * from "./medusa-module"
export * from "./remote-link"
export * from "./remote-query"
export * from "./utils/initialize-factory"

View File

@@ -1,2 +1,3 @@
export * from "./clean-graphql-schema"
export * from "./graphql-schema-to-fields"
export * from "./initialize-factory"

View File

@@ -0,0 +1,44 @@
import {
ExternalModuleDeclaration,
InternalModuleDeclaration,
ModuleExports,
ModuleServiceInitializeCustomDataLayerOptions,
ModuleServiceInitializeOptions,
} from "@medusajs/types"
import { MODULE_PACKAGE_NAMES } from "../definitions"
import { MedusaModule } from "../medusa-module"
/**
* Generate a initialize module factory that is exported by the module to be initialized manually
*
* @param moduleName
* @param moduleDefinition
*/
export function initializeFactory<T>({
moduleName,
moduleDefinition,
}: {
moduleName: string
moduleDefinition: ModuleExports
}) {
return async (
options?:
| ModuleServiceInitializeOptions
| ModuleServiceInitializeCustomDataLayerOptions
| ExternalModuleDeclaration
| InternalModuleDeclaration,
injectedDependencies?: any
) => {
const loaded = await MedusaModule.bootstrap<T>({
moduleKey: moduleName,
defaultPath: MODULE_PACKAGE_NAMES[moduleName],
declaration: options as
| InternalModuleDeclaration
| ExternalModuleDeclaration,
injectedDependencies,
moduleExports: moduleDefinition,
})
return loaded[moduleName] as T
}
}