refactor(medusa): Migrate ProductService to TS (#1625)
* refactor: product service * fix: type errors in consumers * fix: use Status enum instead of ProductStatus * fix: remove ProductStatus * fix: rename ProductStatus * fix: product model nullable fields * fix: explicit typecasting in listVariants * fix: use atomicPhase in public methods * fix: use transactionManager in protected methods * fix: remove disable eslint rule comment * fix: retrieveVariants relations * fix: retrieveVariants * fix: FilterableProductProps validation * fix: nullable thumbnail * fix: tests by making model column types more explicit * move upsert method to repo layer * fix: unit tests * fix: integration tests * fix: product tags query + integration test * fix: rename FindWithRelationsOptions to FindWithoutRelationsOptions * fix (productRepository): use string[] for relations * refactor: extract price relation filtering logic into util * fix: failing unit test * rename DTO suffix to Input suffix * fix: missing awaits * fix: check for images and tags length * fix: remove unneeded function * extract types used in product service to types folder * fix: use text instead of varchar * remove: reorderOptions from ProductService * fix: product model * fix: add private retrieve method * fix: conflicts * fix: failing unit test * fix: integration test * fix: remove ProductSelector type * fix: remove validateId * fix: use spread operator * fix: repo method typings * fix: remove comment
This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
||||
IsString,
|
||||
ValidateNested,
|
||||
} from "class-validator"
|
||||
import { ProductStatus } from "../../../../models"
|
||||
import { DateComparisonOperator } from "../../../../types/common"
|
||||
import { FilterableProductProps } from "../../../../types/product"
|
||||
import { AdminGetProductsPaginationParams } from "../products"
|
||||
@@ -88,13 +89,6 @@ export default async (req: Request, res) => {
|
||||
})
|
||||
}
|
||||
|
||||
enum ProductStatus {
|
||||
DRAFT = "draft",
|
||||
PROPOSED = "proposed",
|
||||
PUBLISHED = "published",
|
||||
REJECTED = "rejected",
|
||||
}
|
||||
|
||||
export class AdminGetPriceListsPriceListProductsParams extends AdminGetProductsPaginationParams {
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
ProductVariantService,
|
||||
ShippingProfileService,
|
||||
} from "../../../../services"
|
||||
import { ProductStatus } from "../../../../types/product"
|
||||
import { ProductStatus } from "../../../../models"
|
||||
import { ProductVariantPricesCreateReq } from "../../../../types/product-variant"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
|
||||
@@ -376,7 +376,7 @@ class ProductVariantReq {
|
||||
|
||||
@IsObject()
|
||||
@IsOptional()
|
||||
metadata?: object
|
||||
metadata?: Record<string, unknown>
|
||||
|
||||
@IsArray()
|
||||
@ValidateNested({ each: true })
|
||||
@@ -485,5 +485,5 @@ export class AdminPostProductsReq {
|
||||
|
||||
@IsObject()
|
||||
@IsOptional()
|
||||
metadata?: object
|
||||
metadata?: Record<string, unknown>
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ export const defaultAdminProductRelations = [
|
||||
"collection",
|
||||
]
|
||||
|
||||
export const defaultAdminProductFields = [
|
||||
export const defaultAdminProductFields: (keyof Product)[] = [
|
||||
"id",
|
||||
"title",
|
||||
"subtitle",
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
ValidateNested,
|
||||
} from "class-validator"
|
||||
import { omit } from "lodash"
|
||||
import { Product } from "../../../../models/product"
|
||||
import { Product, ProductStatus } from "../../../../models/product"
|
||||
import { DateComparisonOperator } from "../../../../types/common"
|
||||
import {
|
||||
allowedAdminProductFields,
|
||||
@@ -97,13 +97,6 @@ export default async (req, res) => {
|
||||
res.json(result)
|
||||
}
|
||||
|
||||
export enum ProductStatus {
|
||||
DRAFT = "draft",
|
||||
PROPOSED = "proposed",
|
||||
PUBLISHED = "published",
|
||||
REJECTED = "rejected",
|
||||
}
|
||||
|
||||
export class AdminGetProductsPaginationParams {
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
|
||||
@@ -12,11 +12,8 @@ import {
|
||||
ValidateIf,
|
||||
ValidateNested,
|
||||
} from "class-validator"
|
||||
import {
|
||||
defaultAdminProductFields,
|
||||
defaultAdminProductRelations,
|
||||
ProductStatus,
|
||||
} from "."
|
||||
import { defaultAdminProductFields, defaultAdminProductRelations } from "."
|
||||
import { ProductStatus } from "../../../../models"
|
||||
import { ProductService, PricingService } from "../../../../services"
|
||||
import { ProductVariantPricesUpdateReq } from "../../../../types/product-variant"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
@@ -320,7 +317,7 @@ class ProductVariantReq {
|
||||
|
||||
@IsObject()
|
||||
@IsOptional()
|
||||
metadata?: object
|
||||
metadata?: Record<string, unknown>
|
||||
|
||||
@IsArray()
|
||||
@IsOptional()
|
||||
@@ -424,5 +421,5 @@ export class AdminPostProductsProductReq {
|
||||
|
||||
@IsObject()
|
||||
@IsOptional()
|
||||
metadata?: object
|
||||
metadata?: Record<string, unknown>
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import { PriceSelectionParams } from "../../../../types/price-selection"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { IsType } from "../../../../utils/validators/is-type"
|
||||
import { optionalBooleanMapper } from "../../../../utils/validators/is-boolean"
|
||||
import { Product } from "../../../../models"
|
||||
|
||||
/**
|
||||
* @oas [get] /products
|
||||
@@ -85,9 +86,9 @@ export default async (req, res) => {
|
||||
// get only published products for store endpoint
|
||||
filterableFields["status"] = ["published"]
|
||||
|
||||
let includeFields: string[] = []
|
||||
let includeFields: (keyof Product)[] = []
|
||||
if (validated.fields) {
|
||||
const set = new Set(validated.fields.split(","))
|
||||
const set = new Set(validated.fields.split(",")) as Set<keyof Product>
|
||||
set.add("id")
|
||||
includeFields = [...set]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user