chore: fix bug
This commit is contained in:
@@ -11,8 +11,10 @@ export class DecimalTransformer implements ValueTransformer {
|
|||||||
// return new Decimal(value).toNumber();
|
// return new Decimal(value).toNumber();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
to(value: Decimal | null): string | null {
|
to(value: Decimal | number | null): string | null {
|
||||||
return value ? value.toString() : "0";
|
if (value === null) return "0";
|
||||||
|
|
||||||
|
return value instanceof Decimal ? value.toString() : new Decimal(value).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
from(value: string | null): number {
|
from(value: string | null): number {
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ export class AuthService {
|
|||||||
const hashedPassword = await this.passwordService.hashPassword(completeRegistrationDto.password);
|
const hashedPassword = await this.passwordService.hashPassword(completeRegistrationDto.password);
|
||||||
const user = await this.usersService.createUser(completeRegistrationDto, hashedPassword, queryRunner);
|
const user = await this.usersService.createUser(completeRegistrationDto, hashedPassword, queryRunner);
|
||||||
|
|
||||||
const tokens = await this.tokensService.generateTokens(user);
|
const tokens = await this.tokensService.generateTokens(user, queryRunner);
|
||||||
|
|
||||||
await queryRunner.commitTransaction();
|
await queryRunner.commitTransaction();
|
||||||
|
|
||||||
|
|||||||
@@ -148,6 +148,7 @@ export class DanakServicesService {
|
|||||||
async getCategories(queryDto: CategorySearchQueryDto) {
|
async getCategories(queryDto: CategorySearchQueryDto) {
|
||||||
const where: FindOptionsWhere<DanakServiceCategory> = {
|
const where: FindOptionsWhere<DanakServiceCategory> = {
|
||||||
isActive: true,
|
isActive: true,
|
||||||
|
deletedAt: IsNull(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (queryDto.parentId === undefined) {
|
if (queryDto.parentId === undefined) {
|
||||||
|
|||||||
@@ -505,22 +505,22 @@ export class InvoicesService {
|
|||||||
let delayMs: number;
|
let delayMs: number;
|
||||||
switch (recurringPeriod) {
|
switch (recurringPeriod) {
|
||||||
case RecurringPeriodEnum.WEEKLY:
|
case RecurringPeriodEnum.WEEKLY:
|
||||||
delayMs = dayjs().add(1, "week").subtract(INVOICE.DAYS_BEFORE_OVERDUE, "days").diff(dayjs());
|
delayMs = dayjs().add(1, "week").subtract(INVOICE.DAYS_BEFORE_OVERDUE, "day").diff(dayjs());
|
||||||
break;
|
break;
|
||||||
case RecurringPeriodEnum.MONTHLY:
|
case RecurringPeriodEnum.MONTHLY:
|
||||||
delayMs = dayjs().add(1, "month").subtract(7, "days").diff(dayjs());
|
delayMs = dayjs().add(1, "month").subtract(7, "day").diff(dayjs());
|
||||||
break;
|
break;
|
||||||
case RecurringPeriodEnum.QUARTERLY:
|
case RecurringPeriodEnum.QUARTERLY:
|
||||||
delayMs = dayjs().add(3, "month").subtract(7, "days").diff(dayjs());
|
delayMs = dayjs().add(3, "month").subtract(7, "day").diff(dayjs());
|
||||||
break;
|
break;
|
||||||
case RecurringPeriodEnum.BIANNUALLY:
|
case RecurringPeriodEnum.BIANNUALLY:
|
||||||
delayMs = dayjs().add(6, "month").subtract(7, "days").diff(dayjs());
|
delayMs = dayjs().add(6, "month").subtract(7, "day").diff(dayjs());
|
||||||
break;
|
break;
|
||||||
case RecurringPeriodEnum.ANNUALLY:
|
case RecurringPeriodEnum.ANNUALLY:
|
||||||
delayMs = dayjs().add(1, "year").subtract(7, "days").diff(dayjs());
|
delayMs = dayjs().add(1, "year").subtract(7, "day").diff(dayjs());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
delayMs = dayjs().add(1, "month").subtract(7, "days").diff(dayjs());
|
delayMs = dayjs().add(1, "month").subtract(7, "day").diff(dayjs());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.logger.log(`Calculated recurring delay: ${delayMs}ms for period: ${recurringPeriod}`);
|
this.logger.log(`Calculated recurring delay: ${delayMs}ms for period: ${recurringPeriod}`);
|
||||||
@@ -558,116 +558,4 @@ export class InvoicesService {
|
|||||||
this.logger.log(`Scheduled recurring invoice for user ${createDto.userId} with interval ${createDto.recurringPeriod}`);
|
this.logger.log(`Scheduled recurring invoice for user ${createDto.userId} with interval ${createDto.recurringPeriod}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// async applyDiscount(invoiceId: string, applyDiscountDto: ApplyDiscountDto, userId: string) {
|
|
||||||
// const invoice = await this.invoiceRepository.findOneBy({ id: invoiceId, status: InvoiceStatus.PENDING });
|
|
||||||
// if (!invoice) throw new BadRequestException(InvoiceMessage.NOT_FOUND_BY_ID);
|
|
||||||
|
|
||||||
// const discount = await this.discountRepository.findOne({
|
|
||||||
// where: { code: applyDiscountDto.discountCode, isActive: true },
|
|
||||||
// relations: ["subscriptionPlans", "users"],
|
|
||||||
// });
|
|
||||||
// if (!discount) {
|
|
||||||
// throw new BadRequestException(DiscountMessage.NOT_FOUND);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const hasUsedDiscount = await this.hasUserUsedDiscount(userId, discount.id);
|
|
||||||
// if (hasUsedDiscount) throw new BadRequestException(DiscountMessage.ALREADY_USED);
|
|
||||||
|
|
||||||
// if (discount.subscriptionPlans && discount.subscriptionPlans.length > 0) {
|
|
||||||
// const isApplicable = invoice.items.some((item) => {
|
|
||||||
// const subscriptionPlan = item.subscriptionPlan;
|
|
||||||
// if (!subscriptionPlan) return false;
|
|
||||||
// return discount.subscriptionPlans.some((plan) => plan.id === subscriptionPlan.id);
|
|
||||||
// });
|
|
||||||
// if (!isApplicable) {
|
|
||||||
// throw new BadRequestException(DiscountMessage.CAN_NOT_APPLICABLE);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (discount.users && discount.users.length > 0) {
|
|
||||||
// if (!discount.users.some((user) => user.id === userId)) {
|
|
||||||
// throw new BadRequestException(DiscountMessage.CAN_NOT_APPLICABLE);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const discountAmount =
|
|
||||||
// discount.calculationType === "PERCENTAGE"
|
|
||||||
// ? new Decimal(invoice.totalPrice).mul(discount.amount).div(100)
|
|
||||||
// : new Decimal(discount.amount);
|
|
||||||
|
|
||||||
// invoice.totalPrice = new Decimal(invoice.totalPrice).minus(discountAmount);
|
|
||||||
// await this.invoiceRepository.save(invoice);
|
|
||||||
|
|
||||||
// const usageDiscount = this.usageDiscountRepository.create({
|
|
||||||
// discount,
|
|
||||||
// users: [{ id: userId }],
|
|
||||||
// usageDate: new Date(),
|
|
||||||
// });
|
|
||||||
|
|
||||||
// await this.usageDiscountRepository.save(usageDiscount);
|
|
||||||
|
|
||||||
// return {
|
|
||||||
// message: InvoiceMessage.DISCOUNT_APPLIED,
|
|
||||||
// invoice,
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
|
|
||||||
//*********************************** */
|
|
||||||
|
|
||||||
// async cancelDiscount(invoiceId: string, userId: string) {
|
|
||||||
// // Find the invoice by ID and ensure it is in a PENDING status
|
|
||||||
// const invoice = await this.invoiceRepository.findOneBy({ id: invoiceId, status: InvoiceStatus.PENDING });
|
|
||||||
// if (!invoice) throw new BadRequestException(InvoiceMessage.NOT_FOUND_BY_ID);
|
|
||||||
|
|
||||||
// // Find the usage discount associated with the user and invoice
|
|
||||||
// const usage = await this.usageDiscountRepository.findOne({
|
|
||||||
// where: {
|
|
||||||
// users: { id: userId },
|
|
||||||
// discount: { invoice: { id: invoice.id } },
|
|
||||||
// },
|
|
||||||
// relations: {
|
|
||||||
// discount: true,
|
|
||||||
// users: true,
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
// console.log(usage);
|
|
||||||
// if (!usage) throw new BadRequestException(DiscountMessage.NOT_FOUND);
|
|
||||||
|
|
||||||
// // Find the discount associated with the usage
|
|
||||||
// const discount = await this.discountRepository.findOneBy({ id: usage.discount.id });
|
|
||||||
// if (!discount) throw new BadRequestException(DiscountMessage.NOT_FOUND);
|
|
||||||
|
|
||||||
// // Calculate the discount amount to be removed from the invoice
|
|
||||||
// const discountAmount =
|
|
||||||
// discount.calculationType === "PERCENTAGE"
|
|
||||||
// ? new Decimal(invoice.totalPrice).mul(discount.amount).div(100)
|
|
||||||
// : new Decimal(discount.amount);
|
|
||||||
|
|
||||||
// // Update the invoice's total price by adding the discount amount (effectively removing the discount)
|
|
||||||
// invoice.totalPrice = new Decimal(invoice.totalPrice).add(discountAmount);
|
|
||||||
// await this.invoiceRepository.save(invoice);
|
|
||||||
|
|
||||||
// // Delete the usage discount record
|
|
||||||
// await this.usageDiscountRepository.delete(usage.id);
|
|
||||||
|
|
||||||
// return {
|
|
||||||
// message: InvoiceMessage.DISCOUNT_CANCELLED,
|
|
||||||
// invoice,
|
|
||||||
// };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private async hasUserUsedDiscount(userId: string, discountId: string): Promise<boolean> {
|
|
||||||
// const usage = await this.usageDiscountRepository.findOne({
|
|
||||||
// where: {
|
|
||||||
// users: {
|
|
||||||
// id: userId,
|
|
||||||
// },
|
|
||||||
// discount: {
|
|
||||||
// id: discountId,
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
// return !!usage;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user