feat(core-flows,medusa,types): remove rules from promotion endpoints + workflows (#6696)

This commit is contained in:
Riqwan Thamir
2024-03-14 09:19:05 +01:00
committed by GitHub
parent 640eccd5dd
commit 04a532e5ef
16 changed files with 485 additions and 53 deletions
@@ -1318,9 +1318,9 @@ describe("Promotion Service", () => {
})
it("should successfully remove rules for a promotion", async () => {
const [ruleId] = promotion.rules.map((rule) => rule.id)
const ruleIds = promotion.rules.map((rule) => rule.id)
await service.removePromotionRules(promotion.id, [{ id: ruleId }])
await service.removePromotionRules(promotion.id, ruleIds)
const updatedPromotion = await service.retrieve(promotion.id, {
relations: ["rules", "rules.values"],
@@ -1391,11 +1391,11 @@ describe("Promotion Service", () => {
})
it("should successfully create rules for a promotion", async () => {
const [ruleId] = promotion.application_method.target_rules.map(
const ruleIds = promotion.application_method.target_rules.map(
(rule) => rule.id
)
await service.removePromotionTargetRules(promotion.id, [{ id: ruleId }])
await service.removePromotionTargetRules(promotion.id, ruleIds)
const updatedPromotion = await service.retrieve(promotion.id, {
relations: ["application_method.target_rules.values"],
@@ -1477,11 +1477,11 @@ describe("Promotion Service", () => {
})
it("should successfully remove rules for a promotion", async () => {
const [ruleId] = promotion.application_method.buy_rules.map(
const ruleIds = promotion.application_method.buy_rules.map(
(rule) => rule.id
)
await service.removePromotionBuyRules(promotion.id, [{ id: ruleId }])
await service.removePromotionBuyRules(promotion.id, ruleIds)
const updatedPromotion = await service.retrieve(promotion.id, {
relations: ["application_method.buy_rules.values"],
@@ -897,32 +897,26 @@ export default class PromotionModuleService<
@InjectManager("baseRepository_")
async removePromotionRules(
promotionId: string,
rulesData: PromotionTypes.RemovePromotionRuleDTO[],
ruleIds: string[],
@MedusaContext() sharedContext: Context = {}
): Promise<void> {
await this.removePromotionRules_(promotionId, rulesData, sharedContext)
await this.removePromotionRules_(promotionId, ruleIds, sharedContext)
}
@InjectTransactionManager("baseRepository_")
protected async removePromotionRules_(
promotionId: string,
rulesData: PromotionTypes.RemovePromotionRuleDTO[],
ruleIds: string[],
@MedusaContext() sharedContext: Context = {}
): Promise<void> {
const promotionRuleIdsToRemove = rulesData.map((ruleData) => ruleData.id)
const promotion = await this.promotionService_.retrieve(
promotionId,
{ relations: ["rules"] },
sharedContext
)
const existingPromotionRuleIds = promotion.rules
.toArray()
.map((rule) => rule.id)
const idsToRemove = promotionRuleIdsToRemove.filter((ruleId) =>
existingPromotionRuleIds.includes(ruleId)
)
const existingRuleIds = promotion.rules.map((rule) => rule.id)
const idsToRemove = ruleIds.filter((id) => existingRuleIds.includes(id))
await this.promotionRuleService_.delete(idsToRemove, sharedContext)
}
@@ -930,12 +924,12 @@ export default class PromotionModuleService<
@InjectManager("baseRepository_")
async removePromotionTargetRules(
promotionId: string,
rulesData: PromotionTypes.RemovePromotionRuleDTO[],
ruleIds: string[],
@MedusaContext() sharedContext: Context = {}
): Promise<void> {
await this.removeApplicationMethodRules_(
promotionId,
rulesData,
ruleIds,
ApplicationMethodRuleTypes.TARGET_RULES,
sharedContext
)
@@ -944,12 +938,12 @@ export default class PromotionModuleService<
@InjectManager("baseRepository_")
async removePromotionBuyRules(
promotionId: string,
rulesData: PromotionTypes.RemovePromotionRuleDTO[],
ruleIds: string[],
@MedusaContext() sharedContext: Context = {}
): Promise<void> {
await this.removeApplicationMethodRules_(
promotionId,
rulesData,
ruleIds,
ApplicationMethodRuleTypes.BUY_RULES,
sharedContext
)
@@ -958,13 +952,12 @@ export default class PromotionModuleService<
@InjectTransactionManager("baseRepository_")
protected async removeApplicationMethodRules_(
promotionId: string,
rulesData: PromotionTypes.RemovePromotionRuleDTO[],
ruleIds: string[],
relation:
| ApplicationMethodRuleTypes.TARGET_RULES
| ApplicationMethodRuleTypes.BUY_RULES,
@MedusaContext() sharedContext: Context = {}
): Promise<void> {
const promotionRuleIds = rulesData.map((ruleData) => ruleData.id)
const promotion = await this.promotionService_.retrieve(
promotionId,
{ relations: [`application_method.${relation}`] },
@@ -981,8 +974,7 @@ export default class PromotionModuleService<
}
const targetRuleIdsToRemove = applicationMethod[relation]
.toArray()
.filter((rule) => promotionRuleIds.includes(rule.id))
.filter((rule) => ruleIds.includes(rule.id))
.map((rule) => rule.id)
await this.promotionRuleService_.delete(