feat: implement audit logging system with service, controller, and interceptor to track user actions across core services

This commit is contained in:
pradeepkumar
2026-04-28 11:12:25 +05:30
parent 4eda556059
commit 80c6fd1d71
27 changed files with 895 additions and 29 deletions

View File

@@ -9,12 +9,15 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
import { PrismaService } from '../prisma/prisma.service';
import { ConnectionStatus } from '@prisma/client';
import { CreateConnectionRequestDto, RespondConnectionRequestDto } from './dto';
import { AuditService } from '../audit/audit.service';
import { AuditAction } from '../audit/audit.constants';
@Injectable()
export class ConnectionRequestsService {
constructor(
private prisma: PrismaService,
private eventEmitter: EventEmitter2,
private audit: AuditService,
) {}
/**
@@ -320,6 +323,16 @@ export class ConnectionRequestsService {
connectionRequestId: requestId,
});
this.audit.log({
action:
dto.status === ConnectionStatus.ACCEPTED
? AuditAction.CONNECTION_REQUEST_ACCEPT
: AuditAction.CONNECTION_REQUEST_REJECT,
resourceType: 'ConnectionRequest',
resourceId: requestId,
metadata: { userId: request.userId, agentProfileId },
});
return updated;
}
@@ -385,9 +398,22 @@ export class ConnectionRequestsService {
throw new BadRequestException('Only pending or accepted connections can be removed');
}
return this.prisma.connectionRequest.delete({
const deleted = await this.prisma.connectionRequest.delete({
where: { id: requestId },
});
this.audit.log({
action: AuditAction.CONNECTION_REQUEST_CANCEL,
resourceType: 'ConnectionRequest',
resourceId: requestId,
metadata: {
userId: request.userId,
agentProfileId: request.agentProfileId,
previousStatus: request.status,
},
});
return deleted;
}
/**