fix(medusa): add q param to listAndCount product types and product tags (#1531)

This commit is contained in:
Kasper Fabricius Kristensen
2022-05-18 11:31:02 +02:00
committed by GitHub
parent 847508af02
commit 46d9e6c44c
10 changed files with 264 additions and 20 deletions
@@ -1,7 +1,7 @@
import { Type } from "class-transformer"
import { IsNumber, IsOptional, IsString } from "class-validator"
import { identity, omit, pickBy } from "lodash"
import { MedusaError } from "medusa-core-utils"
import { IsNumber, IsString, IsOptional, ValidateNested } from "class-validator"
import { omit, pickBy, identity } from "lodash"
import {
allowedAdminProductTagsFields,
defaultAdminProductTagsFields,
@@ -10,9 +10,9 @@ import {
import { ProductTag } from "../../../../models/product-tag"
import ProductTagService from "../../../../services/product-tag"
import {
StringComparisonOperator,
DateComparisonOperator,
FindConfig,
StringComparisonOperator,
} from "../../../../types/common"
import { validator } from "../../../../utils/validator"
import { IsType } from "../../../../utils/validators/is-type"
@@ -100,12 +100,14 @@ export class AdminGetProductTagsPaginationParams {
}
export class AdminGetProductTagsParams extends AdminGetProductTagsPaginationParams {
@ValidateNested()
@IsType([String, [String], StringComparisonOperator])
@IsOptional()
id?: string | string[] | StringComparisonOperator
@ValidateNested()
@IsString()
@IsOptional()
q?: string
@IsType([String, [String], StringComparisonOperator])
@IsOptional()
value?: string | string[] | StringComparisonOperator
@@ -1,7 +1,7 @@
import { Type } from "class-transformer"
import { IsNumber, IsOptional, IsString } from "class-validator"
import { identity, omit, pickBy } from "lodash"
import { MedusaError } from "medusa-core-utils"
import { IsNumber, IsString, IsOptional, ValidateNested } from "class-validator"
import { omit, pickBy, identity } from "lodash"
import {
allowedAdminProductTypeFields,
defaultAdminProductTypeFields,
@@ -10,9 +10,9 @@ import {
import { ProductType } from "../../../../models/product-type"
import ProductTypeService from "../../../../services/product-type"
import {
StringComparisonOperator,
DateComparisonOperator,
FindConfig,
StringComparisonOperator,
} from "../../../../types/common"
import { validator } from "../../../../utils/validator"
import { IsType } from "../../../../utils/validators/is-type"
@@ -101,12 +101,14 @@ export class AdminGetProductTypesPaginationParams {
}
export class AdminGetProductTypesParams extends AdminGetProductTypesPaginationParams {
@ValidateNested()
@IsType([String, [String], StringComparisonOperator])
@IsOptional()
id?: string | string[] | StringComparisonOperator
@ValidateNested()
@IsString()
@IsOptional()
q?: string
@IsType([String, [String], StringComparisonOperator])
@IsOptional()
value?: string | string[] | StringComparisonOperator
+20 -3
View File
@@ -1,8 +1,8 @@
import { EntityManager } from "typeorm"
import { BaseService } from "medusa-interfaces"
import { MedusaError } from "medusa-core-utils"
import { ProductTagRepository } from "../repositories/product-tag"
import { BaseService } from "medusa-interfaces"
import { EntityManager, ILike, SelectQueryBuilder } from "typeorm"
import { ProductTag } from "../models/product-tag"
import { ProductTagRepository } from "../repositories/product-tag"
import { FindConfig } from "../types/common"
import { FilterableProductTagProps } from "../types/product"
@@ -107,7 +107,24 @@ class ProductTagService extends BaseService {
): Promise<[ProductTag[], number]> {
const tagRepo = this.manager_.getCustomRepository(this.tagRepo_)
let q: string | undefined = undefined
if ("q" in selector) {
q = selector.q
delete selector.q
}
const query = this.buildQuery_(selector, config)
if (q) {
const where = query.where
delete where.value
query.where = (qb: SelectQueryBuilder<ProductTag>): void => {
qb.where(where).andWhere([{ value: ILike(`%${q}%`) }])
}
}
return await tagRepo.findAndCount(query)
}
}
+20 -3
View File
@@ -1,10 +1,10 @@
import { MedusaError } from "medusa-core-utils"
import { BaseService } from "medusa-interfaces"
import { EntityManager } from "typeorm"
import { FindConfig } from "../types/common"
import { FilterableProductTypeProps } from "../types/product"
import { EntityManager, ILike, SelectQueryBuilder } from "typeorm"
import { ProductType } from "../models/product-type"
import { ProductTypeRepository } from "../repositories/product-type"
import { FindConfig } from "../types/common"
import { FilterableProductTypeProps } from "../types/product"
/**
* Provides layer to manipulate products.
@@ -91,7 +91,24 @@ class ProductTypeService extends BaseService {
): Promise<[ProductType[], number]> {
const typeRepo = this.manager_.getCustomRepository(this.typeRepository_)
let q: string | undefined = undefined
if ("q" in selector) {
q = selector.q
delete selector.q
}
const query = this.buildQuery_(selector, config)
if (q) {
const where = query.where
delete where.value
query.where = (qb: SelectQueryBuilder<ProductType>): void => {
qb.where(where).andWhere([{ value: ILike(`%${q}%`) }])
}
}
return await typeRepo.findAndCount(query)
}
}
+16 -4
View File
@@ -81,33 +81,45 @@ export class FilterableProductProps {
}
export class FilterableProductTagProps {
@ValidateNested()
@IsOptional()
@IsType([String, [String], StringComparisonOperator])
id?: string | string[] | StringComparisonOperator
@ValidateNested()
@IsOptional()
@IsType([String, [String], StringComparisonOperator])
value?: string | string[] | StringComparisonOperator
@IsOptional()
@IsType([DateComparisonOperator])
created_at?: DateComparisonOperator
@IsOptional()
@IsType([DateComparisonOperator])
updated_at?: DateComparisonOperator
@IsString()
@IsOptional()
q?: string
}
export class FilterableProductTypeProps {
@ValidateNested()
@IsOptional()
@IsType([String, [String], StringComparisonOperator])
id?: string | string[] | StringComparisonOperator
@ValidateNested()
@IsOptional()
@IsType([String, [String], StringComparisonOperator])
value?: string | string[] | StringComparisonOperator
@IsOptional()
@IsType([DateComparisonOperator])
created_at?: DateComparisonOperator
@IsOptional()
@IsType([DateComparisonOperator])
updated_at?: DateComparisonOperator
@IsString()
@IsOptional()
q?: string
}