This PR includes documentation that preps for v2 docs (but doesn't introduce new docs). _Note: The number of file changes in the PR is due to find-and-replace within the `references` which is unavoidable. Let me know if I should move it to another PR._ ## Changes - Change Medusa version in base OAS used for v2. - Fix to docblock generator related to not catching all path parameters. - Added typedoc plugin that generates ER Diagrams, which will be used specifically for data model references in commerce modules. - Changed OAS tool to output references in `www/apps/api-reference/specs-v2` directory when the `--v2` option is used. - Added a version switcher to the API reference to switch between V1 and V2. This switcher is enabled by an environment variable, so it won't be visible/usable at the moment. - Upgraded docusaurus to v3.0.1 - Added new Vale rules to ensure correct spelling of Medusa Admin and module names. - Added new components to the `docs-ui` package that will be used in future documentation changes.
123 lines
3.4 KiB
Plaintext
123 lines
3.4 KiB
Plaintext
import DocCard from '@theme/DocCard'
|
||
import Icons from '@theme/Icon'
|
||
|
||
# Pricing Module Overview
|
||
|
||
The Pricing Module is the `@medusajs/pricing` NPM package that provides advanced pricing features in your Medusa and Node.js applications. It can be used to add prices to any resource, such as products or shipping options.
|
||
|
||
## Features
|
||
|
||
### Price Management
|
||
|
||
With the Pricing Module, you can store the prices of a resource and manage them through the main interface method. Prices are grouped in a price set, allowing you to add more than one price for a resource based on different conditions, such as currency code.
|
||
|
||
```ts
|
||
const priceSet = await pricingService.create({
|
||
rules: [],
|
||
prices: [
|
||
{
|
||
amount: 500,
|
||
currency_code: "USD",
|
||
rules: {},
|
||
},
|
||
{
|
||
amount: 400,
|
||
currency_code: "EUR",
|
||
min_quantity: 0,
|
||
max_quantity: 4,
|
||
rules: {},
|
||
},
|
||
],
|
||
})
|
||
```
|
||
|
||
### Advanced Rule Engine
|
||
|
||
You can create custom rules and apply them to prices. This gives you more flexibility in how you condition prices, filter them, and ensure the best prices are retrieved for custom contexts.
|
||
|
||
```ts
|
||
const ruleTypes = await pricingService.createRuleTypes([
|
||
{
|
||
name: "Region",
|
||
rule_attribute: "region_id",
|
||
},
|
||
])
|
||
|
||
const priceSet = await pricingService.addPrices({
|
||
priceSetId,
|
||
prices: [
|
||
{
|
||
amount: 500,
|
||
currency_code: "EUR",
|
||
rules: {
|
||
region_id: "PL",
|
||
},
|
||
},
|
||
],
|
||
})
|
||
```
|
||
|
||
### Price Lists
|
||
|
||
Price lists allow you to group prices and apply them only in specific conditions. You can also use them to override existing prices for the specified conditions.
|
||
|
||
```ts
|
||
const priceList = await pricingService.createPriceLists({
|
||
title: "My Sale",
|
||
type: "sale",
|
||
starts_at: Date.parse("01/10/2023"),
|
||
ends_at: Date.parse("31/10/2023"),
|
||
rules: {
|
||
region_id: ["DE", "DK"],
|
||
},
|
||
prices: [
|
||
{
|
||
amount: 400,
|
||
currency_code: "EUR",
|
||
price_set_id: priceSet.id,
|
||
},
|
||
],
|
||
})
|
||
```
|
||
|
||
### Price Calculation Strategy
|
||
|
||
The module’s main interface provides a `calculatePrices` method to retrieve the best price for a given context. You can benefit from your custom rules here to find the best price for the specified rule values.
|
||
|
||
```ts
|
||
const price = await pricingService.calculatePrices(
|
||
{ id: [priceSetId] },
|
||
{
|
||
context: {
|
||
currency_code: "EUR",
|
||
region_id: "PL",
|
||
},
|
||
}
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## How to Use the Pricing Module
|
||
|
||
The Pricing Module can be used in many use cases, including:
|
||
|
||
- Medusa Backend: The Medusa backend uses the Pricing Module to implement some features. However, it's guarded by the [experimental feature flag](../index.md#enabling-experimental-features). If you want to use the Pricing Module in your backend's customizations, follow [this installation guide](./install-medusa.mdx).
|
||
- Serverless Application: Use the Pricing Module in a serverless application, such as a Next.js application, without having to manage a fully-fledged ecommerce system. You can use it by [installing it in your Node.js project as an NPM package](./install-nodejs.md).
|
||
- Node.js Application: Use the Pricing Module in any Node.js application. Follow [this guide](./install-nodejs.md) to learn how to install it.
|
||
|
||
---
|
||
|
||
## Up Next
|
||
|
||
<DocCard item={{
|
||
type: 'link',
|
||
href: '/experimental/pricing/concepts',
|
||
label: 'Pricing Concepts',
|
||
customProps: {
|
||
icon: Icons['academic-cap-solid'],
|
||
description: 'Learn about the main concepts in the Pricing Module.'
|
||
}
|
||
}}
|
||
/>
|