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
@@ -62,7 +62,8 @@ export class InvoicesService {
const totalPrice = invoiceItems.reduce((sum, item) => new Decimal(item.totalPrice).add(sum), new Decimal(0));
const tax = totalPrice.mul(0.1);
const dueDate = dayjs().add(INVOICE.DUEDATE, "day").toDate();
// const dueDate = dayjs().add(INVOICE.DUEDATE, "day").toDate();
const dueDate = dayjs().add(1, "minute").toDate();
const invoice = queryRunner.manager.create(Invoice, {
user: { id: createDto.userId },
@@ -90,13 +91,12 @@ export class InvoicesService {
},
queryRunner,
);
//TODO:remove the test delay
await this.invoiceQueue.add(
INVOICE.INVOICE_REMINDER_JOB_NAME,
{ invoiceId: invoice.id },
{
// delay: dayjs(invoice.dueDate).subtract(INVOICE.DAYS_BEFORE_OVERDUE, "day").diff(dayjs()),
delay: 900000, // 15 minutes in milliseconds
delay: dayjs(invoice.dueDate).subtract(INVOICE.DAYS_BEFORE_OVERDUE, "day").diff(dayjs()),
// delay: 1.5 * 60 * 1000, // 5 minutes in milliseconds
attempts: INVOICE.INVOICE_REMINDER_JOB_ATTEMPTS,
backoff: INVOICE.INVOICE_REMINDER_JOB_BACKOFF,
},
@@ -126,7 +126,7 @@ export class InvoicesService {
if (invoice.status === InvoiceStatus.WAIT_PAYMENT) throw new BadRequestException(InvoiceMessage.ALREADY_APPROVED);
if (invoice.status === InvoiceStatus.PAID) throw new BadRequestException(InvoiceMessage.INVOICE_ALREADY_PAID);
if (dayjs().isAfter(invoice.dueDate)) {
if (dayjs().isAfter(dayjs(invoice.dueDate).add(INVOICE.MAX_DAYS_AFTER_OVERDUE, "day"))) {
invoice.status = InvoiceStatus.EXPIRED;
await this.invoiceRepository.save(invoice);
throw new BadRequestException(InvoiceMessage.INVOICE_IS_OVERDUE);
@@ -177,7 +177,13 @@ export class InvoicesService {
if (invoice.status === InvoiceStatus.WAIT_PAYMENT) throw new BadRequestException(InvoiceMessage.ALREADY_APPROVED);
if (invoice.status === InvoiceStatus.PAID) throw new BadRequestException(InvoiceMessage.INVOICE_ALREADY_PAID);
if (dayjs().isAfter(invoice.dueDate)) throw new BadRequestException(InvoiceMessage.INVOICE_IS_OVERDUE);
//
if (dayjs().isAfter(dayjs(invoice.dueDate).add(INVOICE.MAX_DAYS_AFTER_OVERDUE, "day"))) {
invoice.status = InvoiceStatus.EXPIRED;
await this.invoiceRepository.save(invoice);
throw new BadRequestException(InvoiceMessage.INVOICE_IS_OVERDUE);
}
//
if (invoice.status !== InvoiceStatus.PENDING) throw new BadRequestException(InvoiceMessage.INVOICE_CAN_NOT_APPROVED);
invoice.status = InvoiceStatus.WAIT_PAYMENT;
@@ -256,8 +262,7 @@ export class InvoicesService {
INVOICE.INVOICE_REMINDER_JOB_NAME,
{ invoiceId: invoice.id },
{
// delay: dayjs(invoice.dueDate).subtract(INVOICE.DAYS_BEFORE_OVERDUE, "day").diff(dayjs()),
delay: 900000, // 15 minutes in milliseconds
delay: dayjs(invoice.dueDate).subtract(INVOICE.DAYS_BEFORE_OVERDUE, "day").diff(dayjs()),
attempts: INVOICE.INVOICE_REMINDER_JOB_ATTEMPTS,
backoff: INVOICE.INVOICE_REMINDER_JOB_BACKOFF,
repeat: { every: 300000 },