update: invoice processor and fix bug

This commit is contained in:
mahyargdz
2025-03-09 23:16:00 +03:30
parent 0d16a670e4
commit dff944ef90
5 changed files with 44 additions and 19 deletions
@@ -8,6 +8,7 @@ import { DataSource, QueryRunner } from "typeorm";
import { WorkerProcessor } from "../../../common/queues/worker.processor";
import { NotificationsService } from "../../notifications/providers/notifications.service";
import { SubscriptionStatus } from "../../subscriptions/enums/subscription-status.enum";
import { INVOICE } from "../constants";
import { Invoice } from "../entities/invoice.entity";
import { InvoiceStatus } from "../enums/invoice-status.enum";
@@ -77,7 +78,7 @@ export class InvoiceProcessor extends WorkerProcessor {
private async fetchInvoice(invoiceId: string, queryRunner: QueryRunner) {
const invoice = await queryRunner.manager.findOne(Invoice, {
where: { id: invoiceId },
relations: { user: true },
relations: { user: true, items: { subscriptionPlan: true } },
});
if (!invoice) throw new Error(`Invoice not found: ${invoiceId}`);
@@ -86,15 +87,34 @@ export class InvoiceProcessor extends WorkerProcessor {
//********************************** */
private isInvoiceOverdueForCancellation(invoice: Invoice): boolean {
const fiveDaysAfterDueDate = dayjs(invoice.dueDate).add(INVOICE.MAX_DAYS_AFTER_OVERDUE, "day");
return dayjs().isAfter(fiveDaysAfterDueDate);
const tenDaysAfterDueDate = dayjs(invoice.dueDate).add(INVOICE.MAX_DAYS_AFTER_OVERDUE, "day");
return dayjs().isAfter(tenDaysAfterDueDate);
}
//********************************** */
private async cancelOverdueInvoice(invoice: Invoice, queryRunner: QueryRunner) {
invoice.status = InvoiceStatus.CANCELLED;
await queryRunner.manager.save(Invoice, invoice);
this.logger.log(`Invoice ${invoice.id} has been cancelled as it is more than 7 days overdue.`);
if (invoice.items[0]?.subscriptionPlan) {
this.logger.log(
`Invoice ${invoice.id} has been cancelled as it is more than 10 days overdue. Subscription Plan ${invoice.items[0].subscriptionPlan.id} has been cancelled.`,
);
const userSubscription = invoice.items[0].subscriptionPlan;
userSubscription.status = SubscriptionStatus.INACTIVE;
await queryRunner.manager.save(userSubscription);
// await this.notificationService.createSubscriptionPlanCancelledNotification(
// invoice.user.id,
// {
// userPhone: invoice.user.phone,
// userEmail: invoice.user.email,
// subscriptionPlanId: invoice.items[0].subscriptionPlan.id,
// },
// queryRunner,
// );
}
this.logger.log(`Invoice ${invoice.id} has been cancelled as it is more than 10 days overdue.`);
}
//********************************** */