* docs: migrate ui docs to docs universe * created yarn workspace * added eslint and tsconfig configurations * fix eslint configurations * fixed eslint configurations * shared tailwind configurations * added shared ui package * added more shared components * migrating more components * made details components shared * move InlineCode component * moved InputText * moved Loading component * Moved Modal component * moved Select components * Moved Tooltip component * moved Search components * moved ColorMode provider * Moved Notification components and providers * used icons package * use UI colors in api-reference * moved Navbar component * used Navbar and Search in UI docs * added Feedback to UI docs * general enhancements * fix color mode * added copy colors file from ui-preset * added features and enhancements to UI docs * move Sidebar component and provider * general fixes and preparations for deployment * update docusaurus version * adjusted versions * fix output directory * remove rootDirectory property * fix yarn.lock * moved code component * added vale for all docs MD and MDX * fix tests * fix vale error * fix deployment errors * change ignore commands * add output directory * fix docs test * general fixes * content fixes * fix announcement script * added changeset * fix vale checks * added nofilter option * fix vale error
58 lines
2.1 KiB
Plaintext
58 lines
2.1 KiB
Plaintext
---
|
||
description: "Learn what a Strategy is in Medusa. A strategy is an isolated piece of business logic that can be overridden and customized."
|
||
---
|
||
|
||
import DocCard from '@theme/DocCard';
|
||
import Icons from '@theme/Icon';
|
||
|
||
# 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:
|
||
|
||
```ts
|
||
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 overridden, 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.
|
||
|
||
<DocCard item={{
|
||
type: 'link',
|
||
href: '/development/strategies/override-strategy',
|
||
label: 'Backend: Override a Strategy',
|
||
customProps: {
|
||
icon: Icons['academic-cap-solid'],
|
||
description: 'Learn how to override a strategy.',
|
||
}
|
||
}} />
|