From d27b86ab8e04bc3f551cee3090a3ac01c0067cea Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Tue, 28 Nov 2023 11:14:00 +0000 Subject: [PATCH] docs: added examples for modules usage in Medusa (#5753) * Add data migration script after running migrations * Update install-medusa.mdx * Update examples.md (#5751) * fix lint errors * fix comment in example * added examples for modules usage in Medusa --------- Co-authored-by: Riqwan Thamir --- .../content/experimental/pricing/examples.md | 257 -------- .../content/experimental/pricing/examples.mdx | 616 ++++++++++++++++++ .../experimental/pricing/install-medusa.mdx | 42 +- .../experimental/pricing/install-nodejs.md | 2 +- .../content/experimental/product/examples.md | 160 ----- .../content/experimental/product/examples.mdx | 386 +++++++++++ .../experimental/product/install-medusa.mdx | 35 +- .../experimental/product/install-nodejs.md | 2 +- www/apps/docs/sidebars.js | 5 + 9 files changed, 1039 insertions(+), 466 deletions(-) delete mode 100644 www/apps/docs/content/experimental/pricing/examples.md create mode 100644 www/apps/docs/content/experimental/pricing/examples.mdx delete mode 100644 www/apps/docs/content/experimental/product/examples.md create mode 100644 www/apps/docs/content/experimental/product/examples.mdx diff --git a/www/apps/docs/content/experimental/pricing/examples.md b/www/apps/docs/content/experimental/pricing/examples.md deleted file mode 100644 index cde465cddb..0000000000 --- a/www/apps/docs/content/experimental/pricing/examples.md +++ /dev/null @@ -1,257 +0,0 @@ -# Examples of Pricing Module - -In this document, you’ll 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 - -```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 }) -} -``` - -## List Price Sets - -```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 }) -} -``` - -## Retrieve a Price Set by its ID - -```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 }) -} -``` - -## Create a Rule Type - -```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 ruleTypes = await pricingService.createRuleTypes([ - { - name: body.name, - rule_attribute: body.rule_attribute, - }, - ]) - - return NextResponse.json({ rule_types: ruleTypes }) -} -``` - -## Add Prices with Rules - -```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 }) -} -``` - -## Create a Currency - -```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 }) -} -``` - -## List Currencies - -```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 }) -} -``` - -## Create Price List - -```ts -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 - -```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 }) -} -``` - ---- - -## More Examples - -The [module interface reference](../../references/pricing/interfaces/IPricingModuleService.mdx) provides a reference to all the methods available for use with examples for each. diff --git a/www/apps/docs/content/experimental/pricing/examples.mdx b/www/apps/docs/content/experimental/pricing/examples.mdx new file mode 100644 index 0000000000..91f974d86b --- /dev/null +++ b/www/apps/docs/content/experimental/pricing/examples.mdx @@ -0,0 +1,616 @@ + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Examples of Pricing Module + +In this document, you’ll find common examples of how you can use the Pricing module in your application. + +## Create a Price Set + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + 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 }) + } + ``` + + + + +## List Price Sets + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function GET( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const pricingModuleService: PricingModuleService = + request.scope.resolve( + "pricingModuleService" + ) + + const priceSets = await pricingModuleService.list() + + response.json({ price_sets: priceSets }) + } + ``` + + + + +## Retrieve a Price Set by its ID + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function GET( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const pricingModuleService: PricingModuleService = + request.scope.resolve( + "pricingModuleService" + ) + + const priceSet = await pricingModuleService.retrieve(request.params.id) + + response.json({ price_set: priceSet }) + } + ``` + + + + +## Create a Rule Type + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const pricingModuleService: PricingModuleService = + request.scope.resolve( + "pricingModuleService" + ) + + const priceSet = await pricingModuleService.retrieve(request.params.id) + + response.json({ price_set: priceSet }) + } + ``` + + + + +## Add Prices with Rules + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + 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 }) + } + ``` + + + + +## Create a Currency + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const pricingModuleService: PricingModuleService = + request.scope.resolve( + "pricingModuleService" + ) + + const currencies = await pricingModuleService.createCurrencies([{ + code: "EUR", + symbol: "€", + symbol_native: "€", + name: "Euro", + }]) + + response.json({ currencies }) + } + ``` + + + + +## List Currencies + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function GET( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const pricingModuleService: PricingModuleService = + request.scope.resolve( + "pricingModuleService" + ) + + const currencies = await pricingModuleService.listCurrencies() + + response.json({ currencies }) + } + ``` + + + + +## Create Price List + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + 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 }) + } + ``` + + + + +## Calculate Prices For a Currency + + + + + ```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 }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + PricingModuleService + } from "@medusajs/pricing" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + 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 }) + } + ``` + + + + +--- + +## More Examples + +The [module interface reference](../../references/pricing/interfaces/IPricingModuleService.mdx) provides a reference to all the methods available for use with examples for each. diff --git a/www/apps/docs/content/experimental/pricing/install-medusa.mdx b/www/apps/docs/content/experimental/pricing/install-medusa.mdx index 152286ed90..8703338038 100644 --- a/www/apps/docs/content/experimental/pricing/install-medusa.mdx +++ b/www/apps/docs/content/experimental/pricing/install-medusa.mdx @@ -24,6 +24,10 @@ In `medusa-config.js`, add the pricing module to the exported object under the ` ```js title=medusa-config.js module.exports = { // ... + featureFlags: { + // ... + medusa_v2: true, + }, modules: { // ... pricingService: { @@ -37,10 +41,11 @@ module.exports = { ## Step 3: Run Migrations -Run the following command to reflect schema changes into your database: +Run the following commands to reflect schema changes into your database: ```bash npx medusa migrations run +node node_modules/@medusajs/medusa/dist/scripts/migrate-to-pricing-module.js ``` --- @@ -69,9 +74,10 @@ For example: req: MedusaRequest, res: MedusaResponse ) { - const pricingModuleService = req.scope.resolve( - "pricingModuleService" - ) + const pricingModuleService: PricingModuleService = + req.scope.resolve( + "pricingModuleService" + ) return res.json({ pricings: pricingModuleService.list() @@ -97,9 +103,10 @@ For example: export default async function handleListPriceSets({ data, eventName, container, pluginOptions }: SubscriberArgs) { - const pricingModuleService = container.resolve( - "pricingModuleService" - ) + const pricingModuleService: PricingModuleService = + container.resolve( + "pricingModuleService" + ) console.log(await pricingModuleService.list()) } @@ -142,23 +149,10 @@ For example: -:::tip - -In the Examples or API Reference guides, you may see an initialization of the pricing module. This is only necessary if you're using the module outside the Medusa backend. - -::: - --- -## Up Next +## Start Development - \ No newline at end of file +You can refer to the [Example Usages documentation page](./examples.mdx) for examples of using the Pricing module. + +You can also refer to the [Module Interface Reference](../../references/pricing/interfaces/IPricingModuleService.mdx) for a detailed reference on all available methods. diff --git a/www/apps/docs/content/experimental/pricing/install-nodejs.md b/www/apps/docs/content/experimental/pricing/install-nodejs.md index c3a519fe03..de5d8735c1 100644 --- a/www/apps/docs/content/experimental/pricing/install-nodejs.md +++ b/www/apps/docs/content/experimental/pricing/install-nodejs.md @@ -183,6 +183,6 @@ module.exports = nextConfig ## Start Development -You can refer to the [Example Usages documentation page](./examples.md) for examples of using the Pricing module. +You can refer to the [Example Usages documentation page](./examples.mdx) for examples of using the Pricing module. You can also refer to the [Module Interface Reference](../../references/pricing/interfaces/IPricingModuleService.mdx) for a detailed reference on all available methods. \ No newline at end of file diff --git a/www/apps/docs/content/experimental/product/examples.md b/www/apps/docs/content/experimental/product/examples.md deleted file mode 100644 index d62935c12d..0000000000 --- a/www/apps/docs/content/experimental/product/examples.md +++ /dev/null @@ -1,160 +0,0 @@ -# Examples of Product Module - -In this document, you’ll find common examples of how you can use the Product module in your application. - -:::note - -Examples in this section are in the context of a Next.js App Router. - -::: - -## Create Product - -```ts -import { NextResponse } from "next/server" - -import { - initialize as initializeProductModule, -} from "@medusajs/product" - -export async function POST(request: Request) { - const productService = await initializeProductModule() - - const products = await productService.create([ - { - title: "Medusa Shirt", - options: [ - { - title: "Color", - }, - ], - variants: [ - { - title: "Black Shirt", - options: [ - { - value: "Black", - }, - ], - }, - ], - }, - ]) - - return NextResponse.json({ products }) -} -``` - -## List Products - -```ts -import { NextResponse } from "next/server" - -import { - initialize as initializeProductModule, -} from "@medusajs/product" - -export async function GET(request: Request) { - const productService = await initializeProductModule() - - const data = await productService.list() - - return NextResponse.json({ products: data }) -} -``` - -## Retrieve a Product by its ID - -```ts -import { NextResponse } from "next/server" - -import { - initialize as initializeProductModule, -} from "@medusajs/product" - -export async function GET( - request: Request, - { params }: { params: Record }) { - - const { id } = params - const productService = await initializeProductModule() - - const data = await productService.list({ - id, - }) - - return NextResponse.json({ product: data[0] }) -} -``` - -## Retrieve a Product by its Handle - -```ts -import { NextResponse } from "next/server" - -import { - initialize as initializeProductModule, -} from "@medusajs/product" - -export async function GET( - request: Request, - { params }: { params: Record }) { - - const { handle } = params - const productService = await initializeProductModule() - - const data = await productService.list({ - handle, - }) - - return NextResponse.json({ product: data[0] }) -} -``` - -## Retrieve Categories - -```ts -import { NextResponse } from "next/server" - -import { - initialize as initializeProductModule, -} from "@medusajs/product" - -export async function GET(request: Request) { - const productService = await initializeProductModule() - - const data = await productService.listCategories() - - return NextResponse.json({ categories: data }) -} -``` - -## Retrieve Category by Handle - -```ts -import { NextResponse } from "next/server" - -import { - initialize as initializeProductModule, -} from "@medusajs/product" - -export async function GET( - request: Request, - { params }: { params: Record }) { - - const { handle } = params - const productService = await initializeProductModule() - - const data = await productService.listCategories({ - handle, - }) - - return NextResponse.json({ category: data[0] }) -} -``` - ---- - -## More Examples - -The [module interface reference](../../references/product/interfaces/IProductModuleService.mdx) provides a reference to all the methods available for use with examples for each. diff --git a/www/apps/docs/content/experimental/product/examples.mdx b/www/apps/docs/content/experimental/product/examples.mdx new file mode 100644 index 0000000000..bc9446c5a0 --- /dev/null +++ b/www/apps/docs/content/experimental/product/examples.mdx @@ -0,0 +1,386 @@ +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# Examples of Product Module + +In this document, you’ll find common examples of how you can use the Product module in your application. + +## Create Product + + + + + ```ts + import { NextResponse } from "next/server" + + import { + initialize as initializeProductModule, + } from "@medusajs/product" + + export async function POST(request: Request) { + const productService = await initializeProductModule() + + const products = await productService.create([ + { + title: "Medusa Shirt", + options: [ + { + title: "Color", + }, + ], + variants: [ + { + title: "Black Shirt", + options: [ + { + value: "Black", + }, + ], + }, + ], + }, + ]) + + return NextResponse.json({ products }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + ProductModuleService + } from "@medusajs/product" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const productModuleService: ProductModuleService = + request.scope.resolve( + "productModuleService" + ) + + const products = await productModuleService.create([ + { + title: "Medusa Shirt", + options: [ + { + title: "Color", + }, + ], + variants: [ + { + title: "Black Shirt", + options: [ + { + value: "Black", + }, + ], + }, + ], + }, + ]) + + response.json({ products }) + } + ``` + + + + +## List Products + + + + + ```ts + import { NextResponse } from "next/server" + + import { + initialize as initializeProductModule, + } from "@medusajs/product" + + export async function GET(request: Request) { + const productService = await initializeProductModule() + + const data = await productService.list() + + return NextResponse.json({ products: data }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + ProductModuleService + } from "@medusajs/product" + + export async function GET( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const productModuleService: ProductModuleService = + request.scope.resolve( + "productModuleService" + ) + + const data = await productModuleService.list() + + response.json({ products: data }) + } + ``` + + + + +## Retrieve a Product by its ID + + + + + ```ts + import { NextResponse } from "next/server" + + import { + initialize as initializeProductModule, + } from "@medusajs/product" + + export async function GET( + request: Request, + { params }: { params: Record }) { + + const { id } = params + const productService = await initializeProductModule() + + const data = await productService.list({ + id, + }) + + return NextResponse.json({ product: data[0] }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + ProductModuleService + } from "@medusajs/product" + + export async function GET( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const productModuleService: ProductModuleService = + request.scope.resolve( + "productModuleService" + ) + + const data = await productModuleService.list({ + id: request.params.id, + }) + + response.json({ product: data[0] }) + } + ``` + + + + +## Retrieve a Product by its Handle + + + + + ```ts + import { NextResponse } from "next/server" + + import { + initialize as initializeProductModule, + } from "@medusajs/product" + + export async function GET( + request: Request, + { params }: { params: Record }) { + + const { handle } = params + const productService = await initializeProductModule() + + const data = await productService.list({ + handle, + }) + + return NextResponse.json({ product: data[0] }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + ProductModuleService + } from "@medusajs/product" + + export async function GET( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const productModuleService: ProductModuleService = + request.scope.resolve( + "productModuleService" + ) + + const data = await productModuleService.list({ + handle: request.params.handle, + }) + + response.json({ product: data[0] }) + } + ``` + + + + +## Retrieve Categories + + + + + ```ts + import { NextResponse } from "next/server" + + import { + initialize as initializeProductModule, + } from "@medusajs/product" + + export async function GET(request: Request) { + const productService = await initializeProductModule() + + const data = await productService.listCategories() + + return NextResponse.json({ categories: data }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + ProductModuleService + } from "@medusajs/product" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const productModuleService: ProductModuleService = + request.scope.resolve( + "productModuleService" + ) + + const data = await productModuleService.listCategories() + + response.json({ categories: data }) + } + ``` + + + + +## Retrieve Category by Handle + + + + + ```ts + import { NextResponse } from "next/server" + + import { + initialize as initializeProductModule, + } from "@medusajs/product" + + export async function GET( + request: Request, + { params }: { params: Record }) { + + const { handle } = params + const productService = await initializeProductModule() + + const data = await productService.listCategories({ + handle, + }) + + return NextResponse.json({ category: data[0] }) + } + ``` + + + + + ```ts + import { + MedusaRequest, + MedusaResponse, + PriceListType + } from "@medusajs/medusa"; + import { + ProductModuleService + } from "@medusajs/product" + + export async function POST( + request: MedusaRequest, + response: MedusaResponse + ): Promise { + const productModuleService: ProductModuleService = + request.scope.resolve( + "productModuleService" + ) + + const data = await productModuleService.listCategories({ + handle: request.params.handle, + }) + + response.json({ category: data[0] }) + } + ``` + + + + +--- + +## More Examples + +The [module interface reference](../../references/product/interfaces/IProductModuleService.mdx) provides a reference to all the methods available for use with examples for each. diff --git a/www/apps/docs/content/experimental/product/install-medusa.mdx b/www/apps/docs/content/experimental/product/install-medusa.mdx index aa8e1b068c..c3fc21fbe4 100644 --- a/www/apps/docs/content/experimental/product/install-medusa.mdx +++ b/www/apps/docs/content/experimental/product/install-medusa.mdx @@ -69,9 +69,10 @@ For example: req: MedusaRequest, res: MedusaResponse ) { - const productModuleService = req.scope.resolve( - "productModuleService" - ) + const productModuleService: ProductModuleService = + req.scope.resolve( + "productModuleService" + ) return res.json({ products: productModuleService.list() @@ -97,9 +98,10 @@ For example: export default async function handleListProducts({ data, eventName, container, pluginOptions }: SubscriberArgs) { - const productModuleService = container.resolve( - "productModuleService" - ) + const productModuleService: ProductModuleService = + container.resolve( + "productModuleService" + ) console.log(await productModuleService.list()) } @@ -142,23 +144,10 @@ For example: -:::tip - -In the Examples or API Reference guides, you may see an initialization of the product module. This is only necessary if you're using the module outside the Medusa backend. - -::: - --- -## Up Next +## Start Development - \ No newline at end of file +You can refer to the [Example Usages documentation page](./examples.mdx) for examples of using the Product module. + +You can also refer to the [Module Interface Reference](../../references/product/interfaces/IProductModuleService.mdx) for a detailed reference on all available methods. \ No newline at end of file diff --git a/www/apps/docs/content/experimental/product/install-nodejs.md b/www/apps/docs/content/experimental/product/install-nodejs.md index d219d106ea..f4c6e08c5f 100644 --- a/www/apps/docs/content/experimental/product/install-nodejs.md +++ b/www/apps/docs/content/experimental/product/install-nodejs.md @@ -193,6 +193,6 @@ module.exports = nextConfig ## Start Development -You can refer to the [Example Usages documentation page](./examples.md) for examples of using the Product module. +You can refer to the [Example Usages documentation page](./examples.mdx) for examples of using the Product module. You can also refer to the [Module Interface Reference](../../references/product/interfaces/IProductModuleService.mdx) for a detailed reference on all available methods. diff --git a/www/apps/docs/sidebars.js b/www/apps/docs/sidebars.js index be842e0add..faf5bce8ca 100644 --- a/www/apps/docs/sidebars.js +++ b/www/apps/docs/sidebars.js @@ -2751,6 +2751,11 @@ module.exports = { label: "Install in Node.js", id: "experimental/product/install-nodejs", }, + { + type: "doc", + label: "Examples", + id: "experimental/product/examples", + }, { type: "html", value: "References",