@@ -38,23 +38,27 @@ const taxModuleService = container.resolve(
|
||||
After resolving the resources, use Query to retrieve the products with the variants' prices for a context:
|
||||
|
||||
```ts
|
||||
import { QueryContext } from "@medusajs/utils"
|
||||
|
||||
// ...
|
||||
|
||||
const { data: products } = await query.graph({
|
||||
entryPoint: "product",
|
||||
entity: "product",
|
||||
fields: [
|
||||
"*",
|
||||
"variants.*",
|
||||
"variants.calculated_price.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: "prod_123",
|
||||
},
|
||||
"variants.calculated_price": {
|
||||
context: {
|
||||
filters: {
|
||||
id: "prod_123",
|
||||
},
|
||||
context: {
|
||||
variants: {
|
||||
calculated_price: QueryContext({
|
||||
region_id: "region_123",
|
||||
currency_code: "usd",
|
||||
},
|
||||
},
|
||||
}),
|
||||
}
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
@@ -26,18 +26,16 @@ For example:
|
||||
|
||||
```ts highlights={[["6"]]}
|
||||
const { data: products } = await query.graph({
|
||||
entryPoint: "product",
|
||||
entity: "product",
|
||||
fields: [
|
||||
"*",
|
||||
"variants.*",
|
||||
"variants.prices.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: [
|
||||
"prod_123",
|
||||
],
|
||||
},
|
||||
filters: {
|
||||
id: [
|
||||
"prod_123",
|
||||
],
|
||||
},
|
||||
})
|
||||
```
|
||||
@@ -59,32 +57,38 @@ Learn more about prices calculation in [this Pricing Module documentation](../..
|
||||
To retrieve calculated prices of variants based on a context, retrieve the products using Query and:
|
||||
|
||||
- Pass `variants.calculated_price.*` in the `fields` property.
|
||||
- Pass in the `variables` property a `variants.calculated_price` property whose value is the [calculation context object](../../../pricing/price-calculation/page.mdx#calculation-context).
|
||||
- Pass a `context` property in the object parameter. Its value is an object of objects to sets the context for the retrieved fields.
|
||||
|
||||
For example:
|
||||
|
||||
```ts highlights={[["6"], ["12"], ["13"], ["14"], ["15"], ["16"], ["17"]]}
|
||||
import { QueryContext } from "@medusajs/utils"
|
||||
|
||||
// ...
|
||||
|
||||
const { data: products } = await query.graph({
|
||||
entryPoint: "product",
|
||||
entity: "product",
|
||||
fields: [
|
||||
"*",
|
||||
"variants.*",
|
||||
"variants.calculated_price.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: "prod_123",
|
||||
},
|
||||
"variants.calculated_price": {
|
||||
context: {
|
||||
filters: {
|
||||
id: "prod_123",
|
||||
},
|
||||
context: {
|
||||
variants: {
|
||||
calculated_price: QueryContext({
|
||||
region_id: "reg_01J3MRPDNXXXDSCC76Y6YCZARS",
|
||||
currency_code: "eur",
|
||||
},
|
||||
}),
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
The `variants.calculated_price` property of `variables` is an object that has a `context` property. `context`'s value is an object whose keys are price rules, such as `region_id`, and value is the rule's value in this context, such as the customer's region's ID.
|
||||
For the context of the product variant's calculated price, you pass an object to `context` with the property `variants`, whose value is another object with the property `calculated_price`.
|
||||
|
||||
`calculated_price`'s value is created using the `QueryContext` utility function, passing it a [calculation context object](../../../pricing/price-calculation/page.mdx#calculation-context).
|
||||
|
||||
Each variant in the retrieved products has a `calculated_price` object. Learn more about its properties in [this Pricing Module guide](../../../pricing/price-calculation/page.mdx#returned-price-object).
|
||||
|
||||
@@ -305,14 +305,14 @@ export const GET = async (
|
||||
data: digitalProducts,
|
||||
metadata: { count, take, skip },
|
||||
} = await query.graph({
|
||||
entryPoint: "digital_product",
|
||||
entity: "digital_product",
|
||||
fields: [
|
||||
"*",
|
||||
"medias.*",
|
||||
"product_variant.*",
|
||||
...(fields || []),
|
||||
],
|
||||
variables: {
|
||||
pagination: {
|
||||
skip: offset,
|
||||
take: limit,
|
||||
},
|
||||
@@ -1858,17 +1858,15 @@ async function digitalProductOrderCreatedHandler({
|
||||
)
|
||||
|
||||
const { data: [digitalProductOrder] } = await query.graph({
|
||||
entryPoint: "digital_product_order",
|
||||
entity: "digital_product_order",
|
||||
fields: [
|
||||
"*",
|
||||
"products.*",
|
||||
"products.medias.*",
|
||||
"order.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: data.id,
|
||||
},
|
||||
filters: {
|
||||
id: data.id,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -2046,15 +2044,13 @@ export const GET = async (
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: [customer] } = await query.graph({
|
||||
entryPoint: "customer",
|
||||
entity: "customer",
|
||||
fields: [
|
||||
"orders.digital_product_order.products.*",
|
||||
"orders.digital_product_order.products.medias.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: req.auth_context.actor_id,
|
||||
},
|
||||
filters: {
|
||||
id: req.auth_context.actor_id,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -2109,14 +2105,12 @@ export const POST = async (
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: [customer] } = await query.graph({
|
||||
entryPoint: "customer",
|
||||
entity: "customer",
|
||||
fields: [
|
||||
"orders.digital_product_order.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: req.auth_context.actor_id,
|
||||
},
|
||||
filters: {
|
||||
id: req.auth_context.actor_id,
|
||||
},
|
||||
})
|
||||
|
||||
@@ -2125,14 +2119,12 @@ export const POST = async (
|
||||
.map((order) => order.digital_product_order.id)
|
||||
|
||||
const { data: dpoResult } = await query.graph({
|
||||
entryPoint: "digital_product_order",
|
||||
entity: "digital_product_order",
|
||||
fields: [
|
||||
"products.medias.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: customerDigitalOrderIds,
|
||||
},
|
||||
filters: {
|
||||
id: customerDigitalOrderIds,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -627,7 +627,10 @@ In the file `src/api/restaurants/route.ts` add the following API route:
|
||||
```ts title="src/api/restaurants/route.ts"
|
||||
// other imports...
|
||||
import { MedusaRequest, MedusaResponse } from "@medusajs/medusa"
|
||||
import { ContainerRegistrationKeys } from "@medusajs/utils"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
QueryContext
|
||||
} from "@medusajs/utils"
|
||||
|
||||
// ...
|
||||
|
||||
@@ -637,7 +640,7 @@ export async function GET(req: MedusaRequest, res: MedusaResponse) {
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: restaurants } = await query.graph({
|
||||
entryPoint: "restaurants",
|
||||
entity: "restaurants",
|
||||
fields: [
|
||||
"id",
|
||||
"handle",
|
||||
@@ -652,11 +655,13 @@ export async function GET(req: MedusaRequest, res: MedusaResponse) {
|
||||
"products.variants.*",
|
||||
"products.variants.calculated_price.*",
|
||||
],
|
||||
variables: {
|
||||
filters: queryFilters,
|
||||
"products.variants.calculated_price": {
|
||||
context: {
|
||||
currency_code,
|
||||
filters: queryFilters,
|
||||
context: {
|
||||
products: {
|
||||
variants: {
|
||||
calculated_price: QueryContext({
|
||||
currency_code,
|
||||
})
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1690,11 +1695,9 @@ export const notifyRestaurantStep = createStep(
|
||||
const query = container.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: [delivery] } = await query.graph({
|
||||
entryPoint: "deliveries",
|
||||
variables: {
|
||||
filters: {
|
||||
id: deliveryId,
|
||||
},
|
||||
entity: "deliveries",
|
||||
filters: {
|
||||
id: deliveryId,
|
||||
},
|
||||
fields: ["id", "restaurant.id"],
|
||||
})
|
||||
@@ -1772,12 +1775,7 @@ export const createOrderStep = createStep(
|
||||
const query = container.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: [delivery] } = await query.graph({
|
||||
entryPoint: "deliveries",
|
||||
variables: {
|
||||
filters: {
|
||||
id: deliveryId,
|
||||
},
|
||||
},
|
||||
entity: "deliveries",
|
||||
fields: [
|
||||
"id",
|
||||
"cart.*",
|
||||
@@ -1786,6 +1784,9 @@ export const createOrderStep = createStep(
|
||||
"cart.items.*",
|
||||
"cart.shipping_methods.*",
|
||||
],
|
||||
filters: {
|
||||
id: deliveryId,
|
||||
},
|
||||
})
|
||||
|
||||
// TODO create order
|
||||
@@ -2601,14 +2602,12 @@ export const isDeliveryRestaurant = async (
|
||||
)
|
||||
|
||||
const { data: [delivery] } = await query.graph({
|
||||
entryPoint: "delivery",
|
||||
entity: "delivery",
|
||||
fields: [
|
||||
"restaurant.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: req.params.id,
|
||||
},
|
||||
filters: {
|
||||
id: req.params.id,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -590,12 +590,10 @@ export const GET = async (
|
||||
)
|
||||
|
||||
const { data: [vendor] } = await query.graph({
|
||||
entryPoint: "vendor",
|
||||
entity: "vendor",
|
||||
fields: ["products.*"],
|
||||
variables: {
|
||||
filters: {
|
||||
id: [vendorAdmin.vendor.id],
|
||||
},
|
||||
filters: {
|
||||
id: [vendorAdmin.vendor.id],
|
||||
},
|
||||
})
|
||||
|
||||
@@ -830,12 +828,10 @@ const groupVendorItemsStep = createStep(
|
||||
|
||||
await Promise.all(cart.items?.map(async (item) => {
|
||||
const { data: [product] } = await query.graph({
|
||||
entryPoint: "product",
|
||||
entity: "product",
|
||||
fields: ["vendor.*"],
|
||||
variables: {
|
||||
filters: {
|
||||
id: [item.product_id],
|
||||
},
|
||||
filters: {
|
||||
id: [item.product_id],
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1274,12 +1270,10 @@ export const GET = async (
|
||||
)
|
||||
|
||||
const { data: [vendor] } = await query.graph({
|
||||
entryPoint: "vendor",
|
||||
entity: "vendor",
|
||||
fields: ["orders.*"],
|
||||
variables: {
|
||||
filters: {
|
||||
id: [vendorAdmin.vendor.id],
|
||||
},
|
||||
filters: {
|
||||
id: [vendorAdmin.vendor.id],
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -677,14 +677,12 @@ export const POST = async (
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: [cart] } = await query.graph({
|
||||
entryPoint: "cart",
|
||||
entity: "cart",
|
||||
fields: [
|
||||
"metadata",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: [req.params.id],
|
||||
},
|
||||
filters: {
|
||||
id: [req.params.id],
|
||||
},
|
||||
})
|
||||
|
||||
@@ -998,14 +996,14 @@ export const GET = async (
|
||||
data: subscriptions,
|
||||
metadata: { count, take, skip },
|
||||
} = await query.graph({
|
||||
entryPoint: "subscription",
|
||||
entity: "subscription",
|
||||
fields: [
|
||||
"*",
|
||||
"orders.*",
|
||||
"customer.*",
|
||||
...(req.validatedQuery?.fields.split(",") || []),
|
||||
],
|
||||
variables: {
|
||||
pagination: {
|
||||
skip: offset,
|
||||
take: limit,
|
||||
order: {
|
||||
@@ -1051,17 +1049,15 @@ export const GET = async (
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: [subscription] } = await query.graph({
|
||||
entryPoint: "subscription",
|
||||
entity: "subscription",
|
||||
fields: [
|
||||
"*",
|
||||
"orders.*",
|
||||
"customer.*",
|
||||
...(req.validatedQuery?.fields.split(",") || []),
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: [req.params.id],
|
||||
},
|
||||
filters: {
|
||||
id: [req.params.id],
|
||||
},
|
||||
})
|
||||
|
||||
@@ -2134,14 +2130,12 @@ export const GET = async (
|
||||
const query = req.scope.resolve(ContainerRegistrationKeys.QUERY)
|
||||
|
||||
const { data: [customer] } = await query.graph({
|
||||
entryPoint: "customer",
|
||||
entity: "customer",
|
||||
fields: [
|
||||
"subscriptions.*",
|
||||
],
|
||||
variables: {
|
||||
filters: {
|
||||
id: [req.auth_context.actor_id],
|
||||
},
|
||||
filters: {
|
||||
id: [req.auth_context.actor_id],
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user