chore: add all notification sewrvice to the queue

This commit is contained in:
mahyargdz
2025-05-04 16:06:14 +03:30
parent d50b18b8aa
commit c3ad2a1733
16 changed files with 539 additions and 277 deletions
@@ -9,7 +9,7 @@ import { AuthMessage, InvoiceMessage, WalletMessage } from "../../../common/enum
import { VerifyOtpWithUserId } from "../../auth/DTO/verify-otp.dto";
import { Discount } from "../../discounts/entities/discount.entity";
import { DiscountType } from "../../discounts/enums/discount-type.enum";
import { NotificationsService } from "../../notifications/providers/notifications.service";
import { NotificationQueue } from "../../notifications/queue/notification.queue";
import { SubscriptionPlan } from "../../subscriptions/entities/subscription.entity";
import { UserSubscription } from "../../subscriptions/entities/user-subscription.entity";
import { SubscriptionStatus } from "../../subscriptions/enums/subscription-status.enum";
@@ -29,14 +29,13 @@ import { RecurringPeriodEnum } from "../enums/invoice-recurring-period.enum";
import { InvoiceStatus } from "../enums/invoice-status.enum";
import { InvoiceItemsRepository } from "../repositories/invoice-items.repository";
import { InvoicesRepository } from "../repositories/invoices.repository";
@Injectable()
export class InvoicesService {
private readonly logger = new Logger(InvoicesService.name);
constructor(
@InjectQueue(INVOICE.QUEUE_NAME) private readonly invoiceQueue: Queue,
private readonly notificationsService: NotificationsService,
private readonly notificationQueue: NotificationQueue,
private readonly invoiceRepository: InvoicesRepository,
private readonly invoiceItemsRepository: InvoiceItemsRepository,
private readonly usersService: UsersService,
@@ -116,20 +115,16 @@ export class InvoicesService {
const user = await this.usersService.findOneByIdWithQueryRunner(createDto.userId, queryRunner);
await this.notificationsService.createInvoiceCreationNotification(
createDto.userId,
{
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: new Decimal(invoice.totalPrice).toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: invoiceItems.map((item) => item.name).join(", "),
paidAt: invoice.paidAt,
},
queryRunner,
);
await this.notificationQueue.addInvoiceCreationNotification(createDto.userId, {
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: new Decimal(invoice.totalPrice).toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: invoiceItems.map((item) => item.name).join(", "),
paidAt: invoice.paidAt,
});
await this.scheduleInvoiceJobs(invoice, createDto);
await queryRunner.commitTransaction();
@@ -279,19 +274,15 @@ export class InvoicesService {
invoice.status = InvoiceStatus.WAIT_PAYMENT;
await queryRunner.manager.save(Invoice, invoice);
await this.notificationsService.createApprovedInvoiceNotification(
userId,
{
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: new Decimal(invoice.totalPrice).toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: invoice.items.map((item) => item.name).join(", "),
},
queryRunner,
);
await this.notificationQueue.addApprovedInvoiceNotification(userId, {
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: new Decimal(invoice.totalPrice).toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: invoice.items.map((item) => item.name).join(", "),
});
await this.otpService.delOtpFormCache(user.phone, "INVOICE_VERIFY");
@@ -365,19 +356,15 @@ export class InvoicesService {
await qryRnr.manager.save(Invoice, invoice);
await this.notificationsService.createInvoiceCreationNotification(
user.id,
{
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: totalPrice.toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: plan.service.name,
},
qryRnr,
);
await this.notificationQueue.addInvoiceCreationNotification(user.id, {
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: totalPrice.toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: plan.service.name,
});
await this.invoiceQueue.add(
INVOICE.REMINDER_JOB_NAME,
@@ -507,20 +494,16 @@ export class InvoicesService {
await queryRunner.manager.save(Invoice, invoice);
await this.notificationsService.createBillInvoiceNotification(
userId,
{
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: new Decimal(invoice.totalPrice).toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: invoice.items.map((item) => item.name).join(", "),
paidAt: invoice.paidAt,
},
queryRunner,
);
await this.notificationQueue.addBillInvoiceNotification(userId, {
invoiceId: invoice.numericId.toString(),
dueDate: invoice.dueDate,
createDate: invoice.createdAt,
price: new Decimal(invoice.totalPrice).toNumber(),
userPhone: user.phone,
userEmail: user.email,
items: invoice.items.map((item) => item.name).join(", "),
paidAt: invoice.paidAt,
});
await queryRunner.commitTransaction();
return {