Feat: admin collections filtering (#977)

* collections filtering

* filtering collection tests

* oas for list collections
This commit is contained in:
Philip Korsholm
2022-02-01 17:24:47 +01:00
committed by GitHub
parent fdc493df7f
commit f4f9653efc
3 changed files with 147 additions and 5 deletions

View File

@@ -14,6 +14,77 @@ Object {
}
`;
exports[`/admin/collections /admin/collections filters collections by title 1`] = `
Object {
"collections": Array [
Object {
"handle": "test-collection",
"id": "test-collection",
"products": Array [
Object {
"collection_id": "test-collection",
"created_at": Any<String>,
"deleted_at": null,
"description": "test-product-description",
"discountable": true,
"external_id": null,
"handle": "test-product",
"height": null,
"hs_code": null,
"id": "test-product",
"is_giftcard": false,
"length": null,
"material": null,
"metadata": null,
"mid_code": null,
"origin_country": null,
"profile_id": StringMatching /\\^sp_\\*/,
"status": "draft",
"subtitle": null,
"thumbnail": null,
"title": "Test product",
"type_id": "test-type",
"updated_at": Any<String>,
"weight": null,
"width": null,
},
Object {
"collection_id": "test-collection",
"created_at": Any<String>,
"deleted_at": null,
"description": "test-product-description1",
"discountable": true,
"external_id": null,
"handle": "test-product1",
"height": null,
"hs_code": null,
"id": "test-product1",
"is_giftcard": false,
"length": null,
"material": null,
"metadata": null,
"mid_code": null,
"origin_country": null,
"profile_id": StringMatching /\\^sp_\\*/,
"status": "draft",
"subtitle": null,
"thumbnail": null,
"title": "Test product1",
"type_id": "test-type",
"updated_at": Any<String>,
"weight": null,
"width": null,
},
],
"title": "Test collection",
},
],
"count": 1,
"limit": 10,
"offset": 0,
}
`;
exports[`/admin/collections /admin/collections lists collections 1`] = `
Object {
"collections": Array [

View File

@@ -216,5 +216,42 @@ describe("/admin/collections", () => {
count: 3,
})
})
it("filters collections by title", async () => {
const api = useApi()
const response = await api
.get("/admin/collections?title=Test%20collection", {
headers: { Authorization: "Bearer test_token" },
})
.catch((err) => console.log(err))
expect(response.data).toMatchSnapshot({
collections: [
{
id: "test-collection",
handle: "test-collection",
title: "Test collection",
products: [
{
collection_id: "test-collection",
created_at: expect.any(String),
updated_at: expect.any(String),
profile_id: expect.stringMatching(/^sp_*/),
},
{
collection_id: "test-collection",
created_at: expect.any(String),
updated_at: expect.any(String),
profile_id: expect.stringMatching(/^sp_*/),
},
],
},
],
count: 1,
limit: 10,
offset: 0,
})
})
})
})

View File

@@ -1,10 +1,12 @@
import { Type } from "class-transformer"
import { IsNumber, IsOptional } from "class-validator"
import { IsNumber, IsOptional, IsString, ValidateNested } from "class-validator"
import _, { identity } from "lodash"
import {
defaultAdminCollectionsFields,
defaultAdminCollectionsRelations,
} from "."
import ProductCollectionService from "../../../../services/product-collection"
import { DateComparisonOperator } from "../../../../types/common"
import { validator } from "../../../../utils/validator"
/**
* @oas [get] /collections
@@ -13,8 +15,13 @@ import { validator } from "../../../../utils/validator"
* description: "Retrieve a list of Product Collection."
* x-authenticated: true
* parameters:
* - (path) limit {string} The number of collections to return.
* - (path) offset {string} The offset of collections to return.
* - (query) limit {string} The number of collections to return.
* - (query) offset {string} The offset of collections to return.
* - (query) title {string} The title of collections to return.
* - (query) handle {string} The handle of collections to return.
* - (query) deleted_at {DateComparisonOperator} Date comparison for when resulting collections was deleted, i.e. less than, greater than etc.
* - (query) created_at {DateComparisonOperator} Date comparison for when resulting collections was created, i.e. less than, greater than etc.
* - (query) updated_at {DateComparisonOperator} Date comparison for when resulting collections was updated, i.e. less than, greater than etc.
* tags:
* - Collection
* responses:
@@ -41,8 +48,10 @@ export default async (req, res) => {
take: validated.limit,
}
const filterableFields = _.omit(validated, ["limit", "offset"])
const [collections, count] = await productCollectionService.listAndCount(
{},
_.pickBy(filterableFields, identity),
listConfig
)
@@ -54,7 +63,7 @@ export default async (req, res) => {
})
}
export class AdminGetCollectionsParams {
export class AdminGetCollectionsPaginationParams {
@IsNumber()
@IsOptional()
@Type(() => Number)
@@ -65,3 +74,28 @@ export class AdminGetCollectionsParams {
@Type(() => Number)
offset = 0
}
export class AdminGetCollectionsParams extends AdminGetCollectionsPaginationParams {
@IsOptional()
@IsString()
title?: string
@IsOptional()
@IsString()
handle?: string
@IsOptional()
@ValidateNested()
@Type(() => DateComparisonOperator)
created_at?: DateComparisonOperator
@IsOptional()
@ValidateNested()
@Type(() => DateComparisonOperator)
updated_at?: DateComparisonOperator
@ValidateNested()
@IsOptional()
@Type(() => DateComparisonOperator)
deleted_at?: DateComparisonOperator
}