Skip to main content

Strategy

In this document, you’ll learn what a Strategy is in Medusa.

Introduction

A strategy is an isolated piece of business logic that can be overridden and customized. It’s a TypeScript or JavaScript class that doesn’t have to follow a specific definition, but performs only a single functionality.

For example, in the core @medusajs/medusa package, strategies are used to implement functionalities like cart completion and product import.

These strategy classes are then resolved in endpoints, services, or wherever needed using dependency injection and used to perform their designated functionality.

For example, the CartCompletionStrategy is resolved in the Complete Cart endpoint that is defined in the core @medusajs/medusa package. It’s then used to complete the cart and place the order:

export default async (req, res) => {
// ...
const completionStrat: AbstractCartCompletionStrategy =
req.scope.resolve(
"cartCompletionStrategy"
)

const {
response_code,
response_body,
} = await completionStrat.complete(
id,
idempotencyKey,
req.request_context
)

res.status(response_code).json(response_body)
}

When a strategy is overriden, dependency injection then resolves the strategy (in the code example above, CartCompletionStrategy) to the custom strategy that the developer created. Then, the method (in the code example above, complete) of the custom strategy will be executed instead of the one defined in the core package.

Custom Development

Developers can override strategies defined in the core to customize their functionality within their Medusa backend codebase or within a plugin.

Was this page helpful?