chore: add discount logic to apply to the plan price and ...

This commit is contained in:
mahyargdz
2025-04-19 12:36:33 +03:30
parent f9e44fc29a
commit bf3402cc7a
8 changed files with 144 additions and 20 deletions
@@ -2,9 +2,11 @@ import { randomBytes } from "node:crypto";
import { BadRequestException, Injectable } from "@nestjs/common";
import dayjs from "dayjs";
import { Decimal } from "decimal.js";
import { DataSource, QueryRunner } from "typeorm";
import { DiscountMessage } from "../../../common/enums/message.enum";
import { SubscriptionPlan } from "../../subscriptions/entities/subscription.entity";
import { SubscriptionsService } from "../../subscriptions/providers/subscriptions.service";
import { CreateDiscountDto } from "../DTO/create-discount.dto";
import { SearchDiscountQueryDto } from "../DTO/search-discount-query.dto";
@@ -142,6 +144,7 @@ export class DiscountsService {
for (const subscriptionPlan of subscriptionPlans) {
subscriptionPlan.directDiscount = discount;
await this.updatePlanPrice(subscriptionPlan, discount);
await queryRunner.manager.save(subscriptionPlan);
}
@@ -232,9 +235,22 @@ export class DiscountsService {
for (const subscriptionPlan of subscriptionPlans) {
subscriptionPlan.directDiscount = discount;
await this.updatePlanPrice(subscriptionPlan, discount);
await queryRunner.manager.save(subscriptionPlan);
}
await queryRunner.manager.save(discount);
}
//************************************ */
private async updatePlanPrice(subscriptionPlan: SubscriptionPlan, discount: Discount) {
if (!subscriptionPlan.originalPrice) subscriptionPlan.originalPrice = new Decimal(subscriptionPlan.price);
let discountAmount: Decimal;
if (discount.type === DiscountType.PERCENTAGE) {
discountAmount = subscriptionPlan.originalPrice.mul(discount.value).div(100);
} else {
discountAmount = new Decimal(discount.value);
}
subscriptionPlan.price = subscriptionPlan.originalPrice.sub(discountAmount);
}
}