From cdeca5375e0c0f7566d34c8c75e8eeb8a96dfe03 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Sun, 9 Mar 2025 16:19:26 +0330 Subject: [PATCH] fix: bug in update sub plan --- .../providers/subscriptions.service.ts | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/modules/subscriptions/providers/subscriptions.service.ts b/src/modules/subscriptions/providers/subscriptions.service.ts index 0cf8729..392345f 100755 --- a/src/modules/subscriptions/providers/subscriptions.service.ts +++ b/src/modules/subscriptions/providers/subscriptions.service.ts @@ -1,6 +1,7 @@ import { BadRequestException, Injectable } from "@nestjs/common"; import dayjs from "dayjs"; -import { DataSource, In } from "typeorm"; +import Decimal from "decimal.js"; +import { DataSource, In, Not } from "typeorm"; import { ServiceMessage, SubscriptionMessage } from "../../../common/enums/message.enum"; import { DanakServicesService } from "../../danak-services/providers/danak-services.service"; @@ -99,25 +100,33 @@ export class SubscriptionsService { } //************************************ */ async updateSubscriptionPlan(id: string, updateDto: UpdateSubscriptionPlanDto) { + // Find the existing subscription plan + const subscription = await this.subscriptionsPlanRepository.findOne({ where: { id }, relations: { service: true } }); + if (!subscription) throw new BadRequestException(SubscriptionMessage.NOT_FOUND); + + // Check if service exists when trying to update it if (updateDto.serviceId) { const danakService = await this.danakServices.findServiceById(updateDto.serviceId); if (!danakService) throw new BadRequestException(ServiceMessage.SERVICE_NOT_FOUND_BY_ID); + subscription.service = danakService; } - const subscription = await this.subscriptionsPlanRepository.findOneBy({ id }); - if (!subscription) throw new BadRequestException(SubscriptionMessage.NOT_FOUND); - + // Check for name uniqueness if updating name if (updateDto.name) { - const existSubscription = await this.subscriptionsPlanRepository.findOneByName(updateDto.name, id); + const existSubscription = await this.subscriptionsPlanRepository.findOneBy({ + name: updateDto.name, + id: Not(id), + service: { id: subscription.service.id }, + }); if (existSubscription) throw new BadRequestException(SubscriptionMessage.NAME_EXIST); + subscription.name = updateDto.name; } - await this.subscriptionsPlanRepository.update(id, updateDto); - await this.subscriptionsPlanRepository.save({ - ...subscription, - ...updateDto, - service: updateDto.serviceId ? { id: updateDto.serviceId } : subscription.service, - }); + if (updateDto.duration) subscription.duration = updateDto.duration; + if (updateDto.price) subscription.price = new Decimal(updateDto.price); + + await this.subscriptionsPlanRepository.save(subscription); + return { message: SubscriptionMessage.UPDATED, subscription,