add : remove subscription

This commit is contained in:
2026-02-07 12:36:02 +03:30
parent 4c8ad2c359
commit ef9860cf12
4 changed files with 26 additions and 4 deletions
+1
View File
@@ -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 {
@@ -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;
}
@@ -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
}
}
}
@@ -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()