diff --git a/src/modules/invoices/providers/invoices.service.ts b/src/modules/invoices/providers/invoices.service.ts index 3a48e10..9ba2977 100755 --- a/src/modules/invoices/providers/invoices.service.ts +++ b/src/modules/invoices/providers/invoices.service.ts @@ -518,12 +518,15 @@ export class InvoicesService { //*********************************** */ - async payInvoice(invoiceId: string, userId: string) { - const queryRunner = this.dataSource.createQueryRunner(); + async payInvoice(invoiceId: string, userId: string, queryRunner = this.dataSource.createQueryRunner()) { + let transactionStarted = false; try { - await queryRunner.connect(); - await queryRunner.startTransaction(); + if (!queryRunner.isTransactionActive) { + await queryRunner.connect(); + await queryRunner.startTransaction(); + transactionStarted = true; + } const user = await this.usersService.findOneByIdWithQueryRunner(userId, queryRunner); @@ -573,16 +576,17 @@ export class InvoicesService { paidAt: invoice.paidAt, }); - await queryRunner.commitTransaction(); + if (transactionStarted) await queryRunner.commitTransaction(); + return { message: InvoiceMessage.INVOICE_PAID, invoice, }; } catch (error) { - await queryRunner.rollbackTransaction(); + if (transactionStarted) await queryRunner.rollbackTransaction(); throw error; } finally { - await queryRunner.release(); + if (transactionStarted) await queryRunner.release(); } } diff --git a/src/modules/support-plans/providers/support-plans.service.ts b/src/modules/support-plans/providers/support-plans.service.ts index db5ea79..52557f9 100644 --- a/src/modules/support-plans/providers/support-plans.service.ts +++ b/src/modules/support-plans/providers/support-plans.service.ts @@ -152,6 +152,12 @@ export class SupportPlansService { await queryRunner.manager.save(this.userSupportPlanRepo.target, userSupportPlan); + if (supportPlan.isFree) { + userSupportPlan.status = UserSupportPlanStatus.ACTIVE; + await queryRunner.manager.save(this.userSupportPlanRepo.target, userSupportPlan); + await this.invoicesService.payInvoice(invoice.id, user.id, queryRunner); + } + await queryRunner.commitTransaction(); return { message: SupportPlanMessage.SUPPORT_PLAN_SUBSCRIBED, @@ -249,6 +255,12 @@ export class SupportPlansService { currentUserSupportPlan.status = UserSupportPlanStatus.CANCELLED; await queryRunner.manager.save(this.userSupportPlanRepo.target, currentUserSupportPlan); + if (newSupportPlan.isFree) { + currentUserSupportPlan.status = UserSupportPlanStatus.ACTIVE; + await queryRunner.manager.save(this.userSupportPlanRepo.target, currentUserSupportPlan); + await this.invoicesService.payInvoice(invoice.id, user.id, queryRunner); + } + await queryRunner.commitTransaction(); return {