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:
Kasper Fabricius Kristensen
2022-02-04 16:24:42 +01:00
committed by GitHub
parent 59bb413245
commit d2a7534615
9 changed files with 171 additions and 44 deletions
@@ -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)
}
}