import { Injectable } from '@nestjs/common'; import { MessageQueueJob } from 'src/engine/integrations/message-queue/interfaces/message-queue-job.interface'; import { ObjectRecordBaseEvent } from 'src/engine/integrations/event-emitter/types/object-record.base.event'; import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repository/object-metadata-repository.decorator'; import { AuditLogRepository } from 'src/modules/timeline/repositiories/audit-log.repository'; import { AuditLogObjectMetadata } from 'src/modules/timeline/standard-objects/audit-log.object-metadata'; import { WorkspaceMemberRepository } from 'src/modules/workspace-member/repositories/workspace-member.repository'; import { WorkspaceMemberObjectMetadata } from 'src/modules/workspace-member/standard-objects/workspace-member.object-metadata'; @Injectable() export class CreateAuditLogFromInternalEvent implements MessageQueueJob { constructor( @InjectObjectMetadataRepository(WorkspaceMemberObjectMetadata) private readonly workspaceMemberService: WorkspaceMemberRepository, @InjectObjectMetadataRepository(AuditLogObjectMetadata) private readonly auditLogRepository: AuditLogRepository, ) {} async handle(data: ObjectRecordBaseEvent): Promise { let workspaceMemberId: string | null = null; if (data.userId) { const workspaceMember = await this.workspaceMemberService.getByIdOrFail( data.userId, data.workspaceId, ); workspaceMemberId = workspaceMember.id; } if (data.properties.diff) { // we remove "before" and "after" property for a cleaner/slimmer event payload data.properties = { diff: data.properties.diff, }; } await this.auditLogRepository.insert( data.name, data.properties, workspaceMemberId, data.name.split('.')[0], data.objectMetadata.id, data.recordId, data.workspaceId, ); } }