fix: admin collections default relations (#1023)
* added default relations to retrieve collection endpoint * push snapshot * added created at and updated at to collection list endpoint * updated integration tests * added q param to list collections * updated snapshots
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { IdMap } from "medusa-test-utils"
|
||||
import { defaultAdminCollectionsRelations } from ".."
|
||||
import { request } from "../../../../../helpers/test-request"
|
||||
import { ProductCollectionServiceMock } from "../../../../../services/__mocks__/product-collection"
|
||||
|
||||
@@ -26,7 +27,8 @@ describe("GET /admin/categories/:id", () => {
|
||||
it("calls retrieve from product collection service", () => {
|
||||
expect(ProductCollectionServiceMock.retrieve).toHaveBeenCalledTimes(1)
|
||||
expect(ProductCollectionServiceMock.retrieve).toHaveBeenCalledWith(
|
||||
IdMap.getId("col")
|
||||
IdMap.getId("col"),
|
||||
{relations: defaultAdminCollectionsRelations}
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { defaultAdminCollectionsRelations } from "."
|
||||
import ProductCollectionService from "../../../../services/product-collection"
|
||||
/**
|
||||
* @oas [get] /collections/{id}
|
||||
@@ -22,10 +23,14 @@ import ProductCollectionService from "../../../../services/product-collection"
|
||||
export default async (req, res) => {
|
||||
const { id } = req.params
|
||||
|
||||
const retrieveConfig = {
|
||||
relations: defaultAdminCollectionsRelations,
|
||||
}
|
||||
|
||||
const productCollectionService: ProductCollectionService = req.scope.resolve(
|
||||
"productCollectionService"
|
||||
)
|
||||
|
||||
const collection = await productCollectionService.retrieve(id)
|
||||
const collection = await productCollectionService.retrieve(id, retrieveConfig)
|
||||
res.status(200).json({ collection })
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { Router } from "express"
|
||||
import "reflect-metadata"
|
||||
import { ProductCollection } from "../../../.."
|
||||
import { DeleteResponse, PaginatedResponse } from "../../../../types/common"
|
||||
import middlewares from "../../../middlewares"
|
||||
import "reflect-metadata"
|
||||
|
||||
const route = Router()
|
||||
|
||||
@@ -20,7 +20,7 @@ export default (app) => {
|
||||
return app
|
||||
}
|
||||
|
||||
export const defaultAdminCollectionsFields = ["id", "title", "handle"]
|
||||
export const defaultAdminCollectionsFields = ["id", "title", "handle", "created_at", "updated_at"]
|
||||
export const defaultAdminCollectionsRelations = ["products"]
|
||||
|
||||
export type AdminCollectionsListRes = PaginatedResponse & {
|
||||
@@ -38,3 +38,4 @@ export * from "./delete-collection"
|
||||
export * from "./get-collection"
|
||||
export * from "./list-collections"
|
||||
export * from "./update-collection"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { IsNumber, IsOptional, IsString, ValidateNested } from "class-validator"
|
||||
import _, { identity } from "lodash"
|
||||
import {
|
||||
defaultAdminCollectionsFields,
|
||||
defaultAdminCollectionsRelations,
|
||||
defaultAdminCollectionsRelations
|
||||
} from "."
|
||||
import ProductCollectionService from "../../../../services/product-collection"
|
||||
import { DateComparisonOperator } from "../../../../types/common"
|
||||
@@ -98,4 +98,8 @@ export class AdminGetCollectionsParams extends AdminGetCollectionsPaginationPara
|
||||
@IsOptional()
|
||||
@Type(() => DateComparisonOperator)
|
||||
deleted_at?: DateComparisonOperator
|
||||
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
q?: string
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { BaseService } from "medusa-interfaces"
|
||||
import { MedusaError } from "medusa-core-utils"
|
||||
import { BaseService } from "medusa-interfaces"
|
||||
import { Brackets, ILike } from "typeorm"
|
||||
|
||||
/**
|
||||
* Provides layer to manipulate product collections.
|
||||
@@ -187,7 +188,35 @@ class ProductCollectionService extends BaseService {
|
||||
this.productCollectionRepository_
|
||||
)
|
||||
|
||||
let q
|
||||
if ("q" in selector) {
|
||||
q = selector.q
|
||||
delete selector.q
|
||||
}
|
||||
|
||||
const query = this.buildQuery_(selector, config)
|
||||
|
||||
if (q) {
|
||||
const where = query.where
|
||||
|
||||
delete where.title
|
||||
delete where.handle
|
||||
delete where.created_at
|
||||
delete where.updated_at
|
||||
|
||||
query.where = (qb) => {
|
||||
qb.where(where)
|
||||
|
||||
qb.andWhere(
|
||||
new Brackets((qb) => {
|
||||
qb.where({ title: ILike(`%${q}%`) }).orWhere({
|
||||
handle: ILike(`%${q}%`),
|
||||
})
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return await productCollectionRepo.findAndCount(query)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user