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:
Philip Korsholm
2023-12-15 10:12:43 +00:00
committed by GitHub
parent 761d2e7a69
commit 56b07ed0cf
7 changed files with 143 additions and 117 deletions
@@ -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)