chore: add new access log module
This commit is contained in:
@@ -6,6 +6,9 @@ import Decimal from "decimal.js";
|
||||
import { Between, DataSource, In, QueryRunner } from "typeorm";
|
||||
|
||||
import { AuthMessage, InvoiceMessage, WalletMessage } from "../../../common/enums/message.enum";
|
||||
import { OperationType } from "../../access-logs/enums/operation-type.enum";
|
||||
import { UserType } from "../../access-logs/enums/user-type.enum";
|
||||
import { AccessLogService } from "../../access-logs/providers/access-log.service";
|
||||
import { VerifyOtpWithUserId } from "../../auth/DTO/verify-otp.dto";
|
||||
import { Discount } from "../../discounts/entities/discount.entity";
|
||||
import { DiscountType } from "../../discounts/enums/discount-type.enum";
|
||||
@@ -48,11 +51,12 @@ export class InvoicesService {
|
||||
private readonly otpService: OTPService,
|
||||
private readonly smsService: SmsService,
|
||||
private readonly dataSource: DataSource,
|
||||
private readonly accessLogService: AccessLogService,
|
||||
) {}
|
||||
|
||||
///********************************** */
|
||||
|
||||
async createInvoiceAdmin(createDto: CreateInvoiceDto) {
|
||||
async createInvoiceAdmin(createDto: CreateInvoiceDto, userId: string) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
@@ -79,7 +83,7 @@ export class InvoicesService {
|
||||
const dueDate = dayjs().add(INVOICE.DUEDATE, "day").toDate();
|
||||
|
||||
const invoice = queryRunner.manager.create(this.invoiceRepository.target, {
|
||||
user: { id: createDto.userId },
|
||||
user: { id: userId },
|
||||
totalPrice: totalPrice.add(tax).toNumber(),
|
||||
originalPrice: totalPrice.add(tax).toNumber(),
|
||||
items: invoiceItems,
|
||||
@@ -108,6 +112,15 @@ export class InvoicesService {
|
||||
});
|
||||
|
||||
await this.scheduleInvoiceJobs(invoice, createDto);
|
||||
|
||||
await this.accessLogService.logCreate("Invoice", invoice.id, createDto, {
|
||||
user: { id: userId },
|
||||
userType: UserType.ADMIN,
|
||||
actionDescription: `Admin created invoice: ${invoice.numericId}`,
|
||||
metadata: {
|
||||
items: invoiceItems.map((item) => item.name).join(", "),
|
||||
},
|
||||
});
|
||||
await queryRunner.commitTransaction();
|
||||
|
||||
return {
|
||||
@@ -128,7 +141,7 @@ export class InvoicesService {
|
||||
|
||||
//********************************** */
|
||||
|
||||
async updateInvoiceAdmin(invoiceId: string, updateDto: UpdateInvoiceDto) {
|
||||
async updateInvoiceAdmin(invoiceId: string, updateDto: UpdateInvoiceDto, userId: string) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
@@ -191,6 +204,12 @@ export class InvoicesService {
|
||||
|
||||
await queryRunner.commitTransaction();
|
||||
|
||||
await this.accessLogService.logUpdate("Invoice", invoice.id, updateDto, {
|
||||
user: { id: userId },
|
||||
userType: UserType.ADMIN,
|
||||
actionDescription: `Admin updated invoice: ${invoice.numericId}`,
|
||||
});
|
||||
|
||||
return {
|
||||
message: InvoiceMessage.INVOICE_UPDATED,
|
||||
invoice,
|
||||
@@ -205,7 +224,7 @@ export class InvoicesService {
|
||||
|
||||
//********************************** */
|
||||
|
||||
async deleteInvoiceAdmin(invoiceId: string) {
|
||||
async deleteInvoiceAdmin(invoiceId: string, userId: string) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
|
||||
try {
|
||||
@@ -226,6 +245,12 @@ export class InvoicesService {
|
||||
|
||||
await queryRunner.manager.remove(this.invoiceRepository.target, invoice);
|
||||
|
||||
await this.accessLogService.logDelete("Invoice", invoice.id, invoice, {
|
||||
user: { id: userId },
|
||||
userType: UserType.ADMIN,
|
||||
actionDescription: `Admin deleted invoice: ${invoice.numericId}`,
|
||||
});
|
||||
|
||||
await queryRunner.commitTransaction();
|
||||
|
||||
return {
|
||||
@@ -239,9 +264,7 @@ export class InvoicesService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up all queue jobs related to a specific invoice
|
||||
*/
|
||||
//################################################
|
||||
private async cleanupInvoiceQueueJobs(invoiceId: string): Promise<void> {
|
||||
try {
|
||||
this.logger.log(`Starting cleanup of queue jobs for invoice: ${invoiceId}`);
|
||||
@@ -334,6 +357,17 @@ export class InvoicesService {
|
||||
items,
|
||||
);
|
||||
|
||||
await this.accessLogService.logUserAction(
|
||||
OperationType.APPROVE,
|
||||
"Invoice",
|
||||
invoiceId,
|
||||
`user approved invoice request: ${invoice.numericId}`,
|
||||
{
|
||||
user: { id: userId },
|
||||
userType: UserType.USER,
|
||||
},
|
||||
);
|
||||
|
||||
await queryRunner.commitTransaction();
|
||||
|
||||
return {
|
||||
@@ -380,6 +414,17 @@ export class InvoicesService {
|
||||
|
||||
await this.otpService.delOtpFormCache(user.phone, "INVOICE_VERIFY");
|
||||
|
||||
await this.accessLogService.logUserAction(
|
||||
OperationType.APPROVE,
|
||||
"Invoice",
|
||||
invoiceId,
|
||||
`user approved invoice by user: ${invoice.numericId}`,
|
||||
{
|
||||
user: { id: userId },
|
||||
userType: UserType.USER,
|
||||
},
|
||||
);
|
||||
|
||||
await queryRunner.commitTransaction();
|
||||
|
||||
return {
|
||||
@@ -739,6 +784,11 @@ export class InvoicesService {
|
||||
paidAt: invoice.paidAt,
|
||||
});
|
||||
|
||||
await this.accessLogService.logUserAction(OperationType.UPDATE, "Invoice", invoiceId, `user paid invoice: ${invoice.numericId}`, {
|
||||
user: { id: userId },
|
||||
userType: UserType.USER,
|
||||
});
|
||||
|
||||
if (transactionStarted) await queryRunner.commitTransaction();
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user