docs: update query usage across docs (#9120)

WIP
This commit is contained in:
Shahed Nasser
2024-09-16 15:46:26 +03:00
committed by GitHub
parent 35ffaf73d7
commit 0bcdcccbe2
7 changed files with 123 additions and 144 deletions

View File

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

View File

@@ -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).

View File

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

View File

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

View File

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

View File

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