feat(medusa): Update shipping option price type (#5895)
**What** - allow updates to shipping option price type - Clean up the use of strings in the api validation Fixes #5824
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
import { IdMap } from "medusa-test-utils"
|
||||
import { request } from "../../../../../helpers/test-request"
|
||||
import { ShippingOptionServiceMock } from "../../../../../services/__mocks__/shipping-option"
|
||||
import { request } from "../../../../../helpers/test-request"
|
||||
|
||||
describe("POST /admin/shipping-options", () => {
|
||||
describe("successful creation", () => {
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
import {
|
||||
IsArray,
|
||||
IsBoolean,
|
||||
IsEnum,
|
||||
IsNumber,
|
||||
IsObject,
|
||||
IsOptional,
|
||||
IsString,
|
||||
ValidateNested,
|
||||
} from "class-validator"
|
||||
import { RequirementType, ShippingOptionPriceType } from "../../../../models"
|
||||
import { defaultFields, defaultRelations } from "."
|
||||
|
||||
import { Type } from "class-transformer"
|
||||
import { EntityManager } from "typeorm"
|
||||
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
|
||||
import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"
|
||||
import { ShippingOptionService } from "../../../../services"
|
||||
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
|
||||
import { Type } from "class-transformer"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { CreateShippingOptionInput } from "../../../../types/shipping-options"
|
||||
|
||||
/**
|
||||
* @oas [post] /admin/shipping-options
|
||||
@@ -88,7 +92,9 @@ import { validator } from "../../../../utils/validator"
|
||||
export default async (req, res) => {
|
||||
const validated = await validator(AdminPostShippingOptionsReq, req.body)
|
||||
|
||||
const optionService = req.scope.resolve("shippingOptionService")
|
||||
const optionService: ShippingOptionService = req.scope.resolve(
|
||||
"shippingOptionService"
|
||||
)
|
||||
const shippingProfileService = req.scope.resolve("shippingProfileService")
|
||||
|
||||
// Add to default shipping profile
|
||||
@@ -101,7 +107,7 @@ export default async (req, res) => {
|
||||
const result = await manager.transaction(async (transactionManager) => {
|
||||
return await optionService
|
||||
.withTransaction(transactionManager)
|
||||
.create(validated)
|
||||
.create(validated as CreateShippingOptionInput)
|
||||
})
|
||||
|
||||
const data = await optionService.retrieve(result.id, {
|
||||
@@ -113,8 +119,11 @@ export default async (req, res) => {
|
||||
}
|
||||
|
||||
class OptionRequirement {
|
||||
@IsString()
|
||||
type: string
|
||||
@IsEnum(RequirementType, {
|
||||
message: `Invalid option type, must be one of "min_subtotal" or "max_subtotal"`,
|
||||
})
|
||||
type: RequirementType
|
||||
|
||||
@IsNumber()
|
||||
amount: number
|
||||
}
|
||||
@@ -203,15 +212,17 @@ export class AdminPostShippingOptionsReq {
|
||||
@IsString()
|
||||
provider_id: string
|
||||
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
profile_id?: string
|
||||
|
||||
@IsObject()
|
||||
data: object
|
||||
data: Record<string, unknown>
|
||||
|
||||
@IsString()
|
||||
price_type: string
|
||||
@IsEnum(ShippingOptionPriceType, {
|
||||
message: `Invalid price type, must be one of "flat_rate" or "calculated"`,
|
||||
})
|
||||
price_type: ShippingOptionPriceType
|
||||
|
||||
@IsOptional()
|
||||
@IsNumber()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
IsArray,
|
||||
IsBoolean,
|
||||
IsEnum,
|
||||
IsNumber,
|
||||
IsObject,
|
||||
IsOptional,
|
||||
@@ -9,13 +10,14 @@ import {
|
||||
} from "class-validator"
|
||||
import { defaultFields, defaultRelations } from "."
|
||||
|
||||
import { Type } from "class-transformer"
|
||||
import { EntityManager } from "typeorm"
|
||||
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
|
||||
import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
import { ShippingOptionPriceType } from "../../../../models"
|
||||
import { ShippingOptionService } from "../../../../services"
|
||||
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
|
||||
import { Type } from "class-transformer"
|
||||
import { UpdateShippingOptionInput } from "../../../../types/shipping-options"
|
||||
import { validator } from "../../../../utils/validator"
|
||||
|
||||
/**
|
||||
* @oas [post] /admin/shipping-options/{id}
|
||||
@@ -123,8 +125,10 @@ class OptionRequirement {
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
id: string
|
||||
|
||||
@IsString()
|
||||
type: string
|
||||
|
||||
@IsNumber()
|
||||
amount: number
|
||||
}
|
||||
@@ -187,6 +191,12 @@ export class AdminPostShippingOptionsOptionReq {
|
||||
@IsOptional()
|
||||
amount?: number
|
||||
|
||||
@IsEnum(ShippingOptionPriceType, {
|
||||
message: `Invalid price type, must be one of "flat_rate" or "calculated"`,
|
||||
})
|
||||
@IsOptional()
|
||||
price_type?: ShippingOptionPriceType
|
||||
|
||||
@IsArray()
|
||||
@ValidateNested({ each: true })
|
||||
@Type(() => OptionRequirement)
|
||||
|
||||
Reference in New Issue
Block a user