diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index 7d4b8fe..967f5ac 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -528,6 +528,7 @@ export const enum SubscriptionMessage { SERVICE_MISMATCH = "سرویس پلن فعلی با سرویس پلن جدید متفاوت است", UPGRADE_TO_LOWER_OR_EQUAL_PLAN_NOT_ALLOWED = "ارتقا به پلن با قیمت کمتر یا برابر مجاز نیست", SUBSCRIPTION_EXPIRED_CANNOT_UPGRADE = "اشتراک منقضی شده و قابل ارتقا نیست", + SUBSCRIPTION_DELETED="اشتراک با موفقیت حذف شد" } export const enum InvoiceMessage { diff --git a/src/modules/subscriptions/entities/user-subscription.entity.ts b/src/modules/subscriptions/entities/user-subscription.entity.ts index c0de1b4..275f6bb 100755 --- a/src/modules/subscriptions/entities/user-subscription.entity.ts +++ b/src/modules/subscriptions/entities/user-subscription.entity.ts @@ -1,4 +1,4 @@ -import { Column, Entity, JoinTable, ManyToMany, ManyToOne } from "typeorm"; +import { Column, DeleteDateColumn, Entity, JoinTable, ManyToMany, ManyToOne } from "typeorm"; import { SubscriptionPlan } from "./subscription.entity"; import { BaseEntity } from "../../../common/entities/base.entity"; @@ -37,4 +37,7 @@ export class UserSubscription extends BaseEntity { @ManyToMany(() => User) @JoinTable() staff: User[]; + + @DeleteDateColumn({ nullable: true }) + deletedAt?: Date; } diff --git a/src/modules/subscriptions/providers/subscriptions.service.ts b/src/modules/subscriptions/providers/subscriptions.service.ts index 85515aa..5009852 100755 --- a/src/modules/subscriptions/providers/subscriptions.service.ts +++ b/src/modules/subscriptions/providers/subscriptions.service.ts @@ -288,7 +288,7 @@ export class SubscriptionsService { slug = slugify(subscribeDto.businessName, { lower: true, strict: true }); } - const existingSlug = await queryRunner.manager.findOne(UserSubscription, { where: { slug } }); + const existingSlug = await queryRunner.manager.findOne(UserSubscription, { where: { slug, deletedAt: undefined } }); if (existingSlug) throw new BadRequestException(SubscriptionMessage.SLUG_EXISTS); let staff: User[] = []; @@ -309,7 +309,7 @@ export class SubscriptionsService { await queryRunner.manager.save(UserSubscription, userSubscription); const invoiceDueDate = dayjs(userSubscription.startDate).add(INVOICE.DUEDATE, "day").toDate(); - const invoice = await this.invoicesService.createInvoiceForSubscription(user, plan, userSubscription, invoiceDueDate, queryRunner,InvoicePurpose.NEW); + const invoice = await this.invoicesService.createInvoiceForSubscription(user, plan, userSubscription, invoiceDueDate, queryRunner, InvoicePurpose.NEW); userSubscription.status = SubscriptionStatus.INACTIVE; await queryRunner.manager.save(UserSubscription, userSubscription); @@ -367,7 +367,7 @@ export class SubscriptionsService { const invoiceDueDate = dayjs().add(INVOICE.DUEDATE, "day").toDate(); - const invoice = await this.invoicesService.createInvoiceForSubscription(user, plan, userSubscription, invoiceDueDate, queryRunner,InvoicePurpose.RENEW); + const invoice = await this.invoicesService.createInvoiceForSubscription(user, plan, userSubscription, invoiceDueDate, queryRunner, InvoicePurpose.RENEW); // userSubscription.plan = plan; @@ -689,4 +689,15 @@ export class SubscriptionsService { } //************************************ */ + + async softDeleteUSerSubscription(userSubscriptionId: string) { + const usersubscription = await this.userSubscriptionsRepository.findOne({ where: { id: userSubscriptionId } }) + if (!usersubscription) { + throw new BadRequestException(SubscriptionMessage.NOT_FOUND) + } + await this.userSubscriptionsRepository.softDelete(userSubscriptionId) + return { + message: SubscriptionMessage.SUBSCRIPTION_DELETED + } + } } diff --git a/src/modules/subscriptions/subscriptions.controller.ts b/src/modules/subscriptions/subscriptions.controller.ts index ed7f816..a94be08 100755 --- a/src/modules/subscriptions/subscriptions.controller.ts +++ b/src/modules/subscriptions/subscriptions.controller.ts @@ -29,6 +29,13 @@ export class SubscriptionsController { private readonly userQuickAccessService: UserQuickAccessService, ) {} + @ApiOperation({ summary: "Delete subscription " }) + @PermissionsDec(PermissionEnum.SERVICES) + @Post(':id') + deleteSubscription(@Param('id') id :string) { + return this.subscriptionService.softDeleteUSerSubscription(id); + } + @ApiOperation({ summary: "Create a subscription plan" }) @PermissionsDec(PermissionEnum.SERVICES) @Post()