feat: pay invoice of the free support plan

This commit is contained in:
mahyargdz
2025-05-07 09:32:33 +03:30
parent 263de161b1
commit 61135e5eef
2 changed files with 23 additions and 7 deletions
@@ -518,12 +518,15 @@ export class InvoicesService {
//*********************************** */ //*********************************** */
async payInvoice(invoiceId: string, userId: string) { async payInvoice(invoiceId: string, userId: string, queryRunner = this.dataSource.createQueryRunner()) {
const queryRunner = this.dataSource.createQueryRunner(); let transactionStarted = false;
try { try {
await queryRunner.connect(); if (!queryRunner.isTransactionActive) {
await queryRunner.startTransaction(); await queryRunner.connect();
await queryRunner.startTransaction();
transactionStarted = true;
}
const user = await this.usersService.findOneByIdWithQueryRunner(userId, queryRunner); const user = await this.usersService.findOneByIdWithQueryRunner(userId, queryRunner);
@@ -573,16 +576,17 @@ export class InvoicesService {
paidAt: invoice.paidAt, paidAt: invoice.paidAt,
}); });
await queryRunner.commitTransaction(); if (transactionStarted) await queryRunner.commitTransaction();
return { return {
message: InvoiceMessage.INVOICE_PAID, message: InvoiceMessage.INVOICE_PAID,
invoice, invoice,
}; };
} catch (error) { } catch (error) {
await queryRunner.rollbackTransaction(); if (transactionStarted) await queryRunner.rollbackTransaction();
throw error; throw error;
} finally { } finally {
await queryRunner.release(); if (transactionStarted) await queryRunner.release();
} }
} }
@@ -152,6 +152,12 @@ export class SupportPlansService {
await queryRunner.manager.save(this.userSupportPlanRepo.target, userSupportPlan); 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(); await queryRunner.commitTransaction();
return { return {
message: SupportPlanMessage.SUPPORT_PLAN_SUBSCRIBED, message: SupportPlanMessage.SUPPORT_PLAN_SUBSCRIBED,
@@ -249,6 +255,12 @@ export class SupportPlansService {
currentUserSupportPlan.status = UserSupportPlanStatus.CANCELLED; currentUserSupportPlan.status = UserSupportPlanStatus.CANCELLED;
await queryRunner.manager.save(this.userSupportPlanRepo.target, currentUserSupportPlan); 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(); await queryRunner.commitTransaction();
return { return {