Files
medusa-store/www/apps/docs/content/experimental/pricing/examples.md
Shahed Nasser cdc1da5df7 docs: added documentation pages for experimental features (#5671)
* docs: added documentation pages for experimental features

* fix content lint issues

* fixed lint errors

* added migration step

* added workflows introduction

* add installation guides

* added installation guides for modules + generated workflows reference

* added missing workflows reference link

* Added warning message for experimental features

* fix note
2023-11-27 16:49:12 +00:00

4.9 KiB
Raw Blame History

Examples of Pricing Module

In this document, youll find common examples of how you can use the Pricing module in your application.

:::note

Examples in this section are in the context of a Next.js App Router.

:::

Create a Price Set

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.create([
    {
      prices: [
        {
          currency_code: body.currency_code,
          amount: body.amount,
        },
      ],
    },
  ])

  return NextResponse.json({ price_set: priceSet })
}

List Price Sets

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 })
}

Retrieve a Price Set by its ID

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 })
}

Create a Rule Type

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 ruleTypes = await pricingService.createRuleTypes([
    {
      name: body.name,
      rule_attribute: body.rule_attribute,
    },
  ])

  return NextResponse.json({ rule_types: ruleTypes })
}

Add Prices with Rules

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 })
}

Create a Currency

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 })
}

List Currencies

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 })
}

Create Price List

import { NextResponse } from "next/server"

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",
    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,
      },
    ],
  })

  return NextResponse.json({ price_lists: priceLists })
}

Calculate Prices For a Currency

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 })
}

More Examples

The module interface reference provides a reference to all the methods available for use with examples for each.