Files
medusa-store/www/apps/docs/content/experimental/pricing/examples.mdx
Shahed Nasser bb87db8342 docs: prep for v2 documentation (#6710)
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.
2024-03-18 07:47:35 +00:00

617 lines
14 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Examples of Pricing Module
In this document, youll find common examples of how you can use the Pricing Module in your application.
## Create a Price Set
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
export async function POST(request: Request) {
const pricingService = await initializePricingModule()
const body = await request.json()
// A rule type with `rule_attribute=region_id` should
// already be present in the database
const priceSet = await pricingService.create([
{
rules: [{ rule_attribute: "region_id" }],
prices: [
{
currency_code: body.currency_code,
amount: body.amount,
rules: {
region_id: body.region_id,
},
},
],
},
])
return NextResponse.json({ price_set: priceSet })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function POST(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
// A rule type with `rule_attribute=region_id` should
// already be present in the database
const priceSet = await pricingModuleService.create([
{
rules: [{ rule_attribute: "region_id" }],
prices: [
{
currency_code: request.body.currency_code,
amount: request.body.amount,
rules: {
region_id: request.body.region_id,
},
},
],
},
])
response.json({ price_set: priceSet })
}
```
</TabItem>
</Tabs>
## List Price Sets
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
export async function GET(request: Request) {
const pricingService = await initializePricingModule()
const priceSets = await pricingService.list()
return NextResponse.json({ price_sets: priceSets })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function GET(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const priceSets = await pricingModuleService.list()
response.json({ price_sets: priceSets })
}
```
</TabItem>
</Tabs>
## Retrieve a Price Set by its ID
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
type ContextType = {
params: {
id: string
}
}
export async function GET(
request: Request,
{ params }: ContextType
) {
const pricingService = await initializePricingModule()
const priceSet = await pricingService.retrieve(params.id)
return NextResponse.json({ price_set: priceSet })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function GET(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const priceSet = await pricingModuleService.retrieve(request.params.id)
response.json({ price_set: priceSet })
}
```
</TabItem>
</Tabs>
## Create a Rule Type
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
type ContextType = {
params: {
id: string
}
}
export async function GET(
request: Request,
{ params }: ContextType
) {
const pricingService = await initializePricingModule()
const priceSet = await pricingService.retrieve(params.id)
return NextResponse.json({ price_set: priceSet })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function POST(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const priceSet = await pricingModuleService.retrieve(request.params.id)
response.json({ price_set: priceSet })
}
```
</TabItem>
</Tabs>
## Add Prices with Rules
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
export async function POST(request: Request) {
const pricingService = await initializePricingModule()
const body = await request.json()
const priceSet = await pricingService.addPrices({
priceSetId: body.price_set_id,
prices: [
{
amount: 500,
currency_code: "USD",
rules: {
region_id: body.region_id,
},
},
],
})
return NextResponse.json({ price_set: priceSet })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function POST(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const priceSet = await pricingModuleService.addPrices({
priceSetId: request.body.price_set_id,
prices: [
{
amount: 500,
currency_code: "USD",
rules: {
region_id: request.body.region_id,
},
},
],
})
response.json({ price_set: priceSet })
}
```
</TabItem>
</Tabs>
## Create a Currency
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
export async function POST(request: Request) {
const pricingService = await initializePricingModule()
const body = await request.json()
const currencies = await pricingService.createCurrencies([{
code: "EUR",
symbol: "€",
symbol_native: "€",
name: "Euro",
}])
return NextResponse.json({ currencies })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function POST(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const currencies = await pricingModuleService.createCurrencies([{
code: "EUR",
symbol: "€",
symbol_native: "€",
name: "Euro",
}])
response.json({ currencies })
}
```
</TabItem>
</Tabs>
## List Currencies
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
export async function GET(request: Request) {
const pricingService = await initializePricingModule()
const currencies = await pricingService.listCurrencies()
return NextResponse.json({ currencies })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function GET(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const currencies = await pricingModuleService.listCurrencies()
response.json({ currencies })
}
```
</TabItem>
</Tabs>
## Create Price List
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import { PriceListType } from "@medusajs/medusa";
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
export async function POST(request: Request) {
const pricingService = await initializePricingModule()
const priceLists = await pricingService.createPriceLists([
{
title: "My Sale",
description: "This is my sale",
type: PriceListType.SALE,
starts_at: Date.parse("01/10/2023").toString(),
ends_at: Date.parse("31/10/2023").toString(),
rules: {
region_id: ["DE", "DK"],
},
prices: [
{
amount: 400,
currency_code: "EUR",
price_set_id: "pset_124",
},
],
}
])
return NextResponse.json({ price_lists: priceLists })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse,
PriceListType
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function POST(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const priceLists = await pricingModuleService.createPriceLists([
{
title: "My Sale",
description: "This is my sale",
type: PriceListType.SALE,
starts_at: Date.parse("01/10/2023").toString(),
ends_at: Date.parse("31/10/2023").toString(),
rules: {
region_id: ["DE", "DK"],
},
prices: [
{
amount: 400,
currency_code: "EUR",
price_set_id: "pset_124",
},
],
}
])
response.json({ price_lists: priceLists })
}
```
</TabItem>
</Tabs>
## Calculate Prices For a Currency
<Tabs groupId="app-type" isCodeTabs={true}>
<TabItem value="nextjs" label="Next.js App Router" default>
```ts
import { NextResponse } from "next/server"
import {
initialize as initializePricingModule,
} from "@medusajs/pricing"
type ContextType = {
params: {
id: string
currency_code: string
}
}
export async function GET(
request: Request,
{ params }: ContextType
) {
const pricingService = await initializePricingModule()
const price = await pricingService.calculatePrices({
id: [params.id],
}, {
context: {
currency_code: params.currency_code,
},
})
return NextResponse.json({ price })
}
```
</TabItem>
<TabItem value="medusa" label="Medusa API Router">
```ts
import {
MedusaRequest,
MedusaResponse,
PriceListType
} from "@medusajs/medusa";
import {
PricingModuleService
} from "@medusajs/pricing"
export async function POST(
request: MedusaRequest,
response: MedusaResponse
): Promise<void> {
const pricingModuleService: PricingModuleService =
request.scope.resolve(
"pricingModuleService"
)
const price = await pricingModuleService.calculatePrices({
id: [request.params.id],
}, {
context: {
currency_code: request.params.currency_code,
},
})
response.json({ price })
}
```
</TabItem>
</Tabs>
---
## More Examples
The [module interface reference](../../references/pricing/interfaces/pricing.IPricingModuleService.mdx) provides a reference to all the methods available for use with examples for each.