feat(medusa): Allow to query product tags by condition id (#2340)
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
import { Router } from "express"
|
||||
import "reflect-metadata"
|
||||
import { Order } from "../../../.."
|
||||
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"
|
||||
import {
|
||||
DeleteResponse,
|
||||
FindParams,
|
||||
PaginatedResponse,
|
||||
} from "../../../../types/common"
|
||||
import { FlagRouter } from "../../../../utils/flag-router"
|
||||
import middlewares, { transformQuery } from "../../../middlewares"
|
||||
import { AdminGetOrdersParams } from "./list-orders"
|
||||
import { FlagRouter } from "../../../../utils/flag-router"
|
||||
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"
|
||||
|
||||
const route = Router()
|
||||
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
import { Router } from "express"
|
||||
import { ProductTag } from "../../../.."
|
||||
import { PaginatedResponse } from "../../../../types/common"
|
||||
import middlewares from "../../../middlewares"
|
||||
import middlewares, { transformQuery } from "../../../middlewares"
|
||||
import "reflect-metadata"
|
||||
import { AdminGetProductTagsParams } from "./list-product-tags"
|
||||
|
||||
const route = Router()
|
||||
|
||||
export default (app) => {
|
||||
app.use("/product-tags", route)
|
||||
|
||||
route.get("/", middlewares.wrap(require("./list-product-tags").default))
|
||||
route.get(
|
||||
"/",
|
||||
transformQuery(AdminGetProductTagsParams, {
|
||||
defaultFields: defaultAdminProductTagsFields,
|
||||
defaultRelations: defaultAdminProductTagsRelations,
|
||||
allowedFields: allowedAdminProductTagsFields,
|
||||
isList: true,
|
||||
}),
|
||||
middlewares.wrap(require("./list-product-tags").default)
|
||||
)
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
@@ -1,23 +1,13 @@
|
||||
import {
|
||||
DateComparisonOperator,
|
||||
FindConfig,
|
||||
StringComparisonOperator,
|
||||
} from "../../../../types/common"
|
||||
import { IsNumber, IsOptional, IsString } from "class-validator"
|
||||
import {
|
||||
allowedAdminProductTagsFields,
|
||||
defaultAdminProductTagsFields,
|
||||
defaultAdminProductTagsRelations,
|
||||
} from "."
|
||||
import { identity, omit, pickBy } from "lodash"
|
||||
|
||||
import { IsType } from "../../../../utils/validators/is-type"
|
||||
import { MedusaError } from "medusa-core-utils"
|
||||
import { ProductTag } from "../../../../models/product-tag"
|
||||
import ProductTagService from "../../../../services/product-tag"
|
||||
import { Type } from "class-transformer"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { isDefined } from "../../../../utils"
|
||||
import { Request, Response } from "express"
|
||||
|
||||
/**
|
||||
* @oas [get] /product-tags
|
||||
@@ -29,6 +19,7 @@ import { isDefined } from "../../../../utils"
|
||||
* - (query) limit=10 {integer} The number of tags to return.
|
||||
* - (query) offset=0 {integer} The number of items to skip before the results.
|
||||
* - (query) order {string} The field to sort items by.
|
||||
* - (query) discount_condition_id {string} The discount condition id on which to filter the tags.
|
||||
* - in: query
|
||||
* name: value
|
||||
* style: form
|
||||
@@ -144,48 +135,21 @@ import { isDefined } from "../../../../utils"
|
||||
* "500":
|
||||
* $ref: "#/components/responses/500_error"
|
||||
*/
|
||||
export default async (req, res) => {
|
||||
const validated = await validator(AdminGetProductTagsParams, req.query)
|
||||
|
||||
export default async (req: Request, res: Response) => {
|
||||
const tagService: ProductTagService = req.scope.resolve("productTagService")
|
||||
|
||||
const listConfig: FindConfig<ProductTag> = {
|
||||
select: defaultAdminProductTagsFields as (keyof ProductTag)[],
|
||||
relations: defaultAdminProductTagsRelations,
|
||||
skip: validated.offset,
|
||||
take: validated.limit,
|
||||
}
|
||||
|
||||
if (isDefined(validated.order)) {
|
||||
let orderField = validated.order
|
||||
if (validated.order.startsWith("-")) {
|
||||
const [, field] = validated.order.split("-")
|
||||
orderField = field
|
||||
listConfig.order = { [field]: "DESC" }
|
||||
} else {
|
||||
listConfig.order = { [validated.order]: "ASC" }
|
||||
}
|
||||
|
||||
if (!allowedAdminProductTagsFields.includes(orderField)) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.INVALID_DATA,
|
||||
"Order field must be a valid product tag field"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const filterableFields = omit(validated, ["limit", "offset"])
|
||||
const { listConfig, filterableFields } = req
|
||||
const { skip, take } = req.listConfig
|
||||
|
||||
const [tags, count] = await tagService.listAndCount(
|
||||
pickBy(filterableFields, identity),
|
||||
filterableFields,
|
||||
listConfig
|
||||
)
|
||||
|
||||
res.status(200).json({
|
||||
product_tags: tags,
|
||||
count,
|
||||
offset: validated.offset,
|
||||
limit: validated.limit,
|
||||
offset: skip,
|
||||
limit: take,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -201,18 +165,17 @@ export class AdminGetProductTagsPaginationParams {
|
||||
offset = 0
|
||||
}
|
||||
|
||||
// eslint-disable-next-line max-len
|
||||
export class AdminGetProductTagsParams extends AdminGetProductTagsPaginationParams {
|
||||
@IsType([String, [String], StringComparisonOperator])
|
||||
@IsOptional()
|
||||
@IsType([String, [String], StringComparisonOperator])
|
||||
id?: string | string[] | StringComparisonOperator
|
||||
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
q?: string
|
||||
|
||||
@IsType([String, [String], StringComparisonOperator])
|
||||
@IsOptional()
|
||||
@IsType([String, [String], StringComparisonOperator])
|
||||
value?: string | string[] | StringComparisonOperator
|
||||
|
||||
@IsType([DateComparisonOperator])
|
||||
@@ -226,4 +189,8 @@ export class AdminGetProductTagsParams extends AdminGetProductTagsPaginationPara
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
order?: string
|
||||
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
discount_condition_id?: string
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user