chore: add new access log module

This commit is contained in:
mahyargdz
2025-09-02 16:14:36 +03:30
parent 60deb8937d
commit 672fe9b783
36 changed files with 2066 additions and 41 deletions
@@ -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 {