Skip to content

Commit

Permalink
fix: Support findParams in get-product
Browse files Browse the repository at this point in the history
  • Loading branch information
olivermrbl committed Oct 26, 2023
1 parent 33862e2 commit 93573af
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 6 deletions.
81 changes: 81 additions & 0 deletions integration-tests/api/__tests__/admin/product.js
Original file line number Diff line number Diff line change
Expand Up @@ -909,6 +909,87 @@ describe("/admin/products", () => {
})
})

describe("GET /admin/products/:id", () => {
const productId = "testing-get-product"

beforeEach(async () => {
await simpleProductFactory(dbConnection, {
id: productId,
variants: [
{
prices: [
{
currency: "usd",
amount: 100,
},
],
},
],
})

await adminSeeder(dbConnection)
})

afterEach(async () => {
const db = useDb()
await db.teardown()
})

it("should get a product", async () => {
const api = useApi()

const res = await api
.get(`/admin/products/${productId}`, adminHeaders)
.catch((err) => {
console.log(err)
})

expect(res.status).toEqual(200)
expect(res.data.product.id).toEqual(productId)
})

it("should get a product with prices", async () => {
const api = useApi()

const res = await api
.get(
`/admin/products/${productId}?expand=variants,variants.prices`,
adminHeaders
)
.catch((err) => {
console.log(err)
})

const { id, variants } = res.data.product

expect(id).toEqual(productId)
expect(variants[0].prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
amount: 100,
currency_code: "usd",
}),
])
)
})

it("should get a product only with variants expanded", async () => {
const api = useApi()

const res = await api
.get(`/admin/products/${productId}?expand=variants`, adminHeaders)
.catch((err) => {
console.log(err)
})

const { id, variants } = res.data.product

expect(id).toEqual(productId)
// prices is one of many properties that should not be expanded
expect(variants[0].prices).toBeUndefined()
})
})

describe("POST /admin/products", () => {
beforeEach(async () => {
await productSeeder(dbConnection)
Expand Down
6 changes: 5 additions & 1 deletion packages/admin-ui/ui/src/domain/products/edit/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ const Edit = () => {

const { getWidgets } = useWidgets()

const { product, status, error } = useAdminProduct(id || "")
const { product, status, error } = useAdminProduct(id || "", {
expand:
// default relations
"variants,variants.prices,variants.options,profiles,images,options,tags,type,collection",
})

if (error) {
const errorStatus = getErrorStatus(error)
Expand Down
4 changes: 3 additions & 1 deletion packages/medusa-react/src/hooks/admin/products/queries.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
AdminGetProductParams,
AdminGetProductsParams,
AdminProductsListRes,
AdminProductsListTagsRes,
Expand Down Expand Up @@ -35,6 +36,7 @@ export const useAdminProducts = (

export const useAdminProduct = (
id: string,
query?: AdminGetProductParams,
options?: UseQueryOptionsWrapper<
Response<AdminProductsRes>,
Error,
Expand All @@ -44,7 +46,7 @@ export const useAdminProduct = (
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminProductKeys.detail(id),
() => client.admin.products.retrieve(id),
() => client.admin.products.retrieve(id, query),
options
)
return { ...data, ...rest } as const
Expand Down
7 changes: 5 additions & 2 deletions packages/medusa/src/api/routes/admin/products/get-product.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { PricingService, ProductService } from "../../../../services"
import { MedusaError } from "@medusajs/utils"
import IsolateProductDomainFeatureFlag from "../../../../loaders/feature-flags/isolate-product-domain"
import { PricingService, ProductService } from "../../../../services"
import { FindParams } from "../../../../types/common"
import { defaultAdminProductRemoteQueryObject } from "./index"
import { MedusaError } from "@medusajs/utils"

/**
* @oas [get] /admin/products/{id}
Expand Down Expand Up @@ -113,3 +114,5 @@ async function getProductWithIsolatedProductModule(req, id, retrieveConfig) {

return product
}

export class AdminGetProductParams extends FindParams {}
6 changes: 4 additions & 2 deletions packages/medusa/src/api/routes/admin/products/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import "reflect-metadata"

import { Product, ProductTag, ProductType, ProductVariant } from "../../../.."
import { FindParams, PaginatedResponse } from "../../../../types/common"
import { PaginatedResponse } from "../../../../types/common"
import middlewares, { transformQuery } from "../../../middlewares"

import { FlagRouter } from "@medusajs/utils"
import { Router } from "express"
import { PricedProduct } from "../../../../types/pricing"
import { validateSalesChannelsExist } from "../../../middlewares/validators/sales-channel-existence"
import { AdminGetProductParams } from "./get-product"
import { AdminGetProductsParams } from "./list-products"

const route = Router()
Expand Down Expand Up @@ -76,7 +77,7 @@ export default (app, featureFlagRouter: FlagRouter) => {
)
route.get(
"/:id",
transformQuery(FindParams, {
transformQuery(AdminGetProductParams, {
defaultRelations: defaultAdminProductRelations,
defaultFields: defaultAdminProductFields,
isList: false,
Expand Down Expand Up @@ -496,3 +497,4 @@ export * from "./set-metadata"
export * from "./update-option"
export * from "./update-product"
export * from "./update-variant"

0 comments on commit 93573af

Please sign in to comment.