fix(medusa): Normalize discount code before querying DB (#2224)

**What**
Normalize discount code before querying DB

Fixes CORE-567
This commit is contained in:
Oliver Windall Juhl
2022-09-16 12:01:36 +00:00
committed by GitHub
parent f7177c9033
commit 3f73170288
7 changed files with 143 additions and 20 deletions
+4 -4
View File
@@ -6,14 +6,14 @@ import {
JoinColumn,
JoinTable,
ManyToMany,
ManyToOne,
ManyToOne
} from "typeorm"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { DiscountRule } from "./discount-rule"
import { Region } from "./region"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
import { DiscountRule } from "./discount-rule"
import { Region } from "./region"
@Entity()
export class Discount extends SoftDeletableEntity {
@@ -79,10 +79,10 @@ export class Discount extends SoftDeletableEntity {
@BeforeInsert()
private upperCaseCode(): void {
this.code = this.code.toUpperCase()
if (this.id) return
this.id = generateEntityId(this.id, "disc")
this.code = this.code.toUpperCase()
}
}
+13 -11
View File
@@ -6,19 +6,21 @@ import {
DeepPartial,
EntityManager,
ILike,
SelectQueryBuilder,
SelectQueryBuilder
} from "typeorm"
import {
EventBusService,
ProductService,
RegionService,
TotalsService,
TotalsService
} from "."
import { TransactionBaseService } from "../interfaces"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { Cart, Discount, LineItem, Region } from "../models"
import {
AllocationType as DiscountAllocation,
DiscountRule,
DiscountRuleType,
DiscountRuleType
} from "../models/discount-rule"
import { DiscountRepository } from "../repositories/discount"
import { DiscountConditionRepository } from "../repositories/discount-condition"
@@ -31,16 +33,14 @@ import {
CreateDynamicDiscountInput,
FilterableDiscountProps,
UpdateDiscountInput,
UpdateDiscountRuleInput,
UpdateDiscountRuleInput
} from "../types/discount"
import { buildQuery, setMetadata } from "../utils"
import { isFuture, isPast } from "../utils/date-helpers"
import { formatException } from "../utils/exception-formatter"
import DiscountConditionService from "./discount-condition"
import CustomerService from "./customer"
import { TransactionBaseService } from "../interfaces"
import { buildQuery, setMetadata } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import CustomerService from "./customer"
import DiscountConditionService from "./discount-condition"
/**
* Provides layer to manipulate discounts.
@@ -276,11 +276,13 @@ class DiscountService extends TransactionBaseService {
const manager = this.manager_
const discountRepo = manager.getCustomRepository(this.discountRepository_)
let query = buildQuery({ code: discountCode, is_dynamic: false }, config)
const normalizedCode = discountCode.toUpperCase()
let query = buildQuery({ code: normalizedCode, is_dynamic: false }, config)
let discount = await discountRepo.findOne(query)
if (!discount) {
query = buildQuery({ code: discountCode, is_dynamic: true }, config)
query = buildQuery({ code: normalizedCode, is_dynamic: true }, config)
discount = await discountRepo.findOne(query)
if (!discount) {