This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { buildPaginatedResponse } from '../../common/utils/pagination.util';
|
||||
import { resolveMongoSortDirection } from '../../common/utils/sort.util';
|
||||
import { AuditRepository } from './audit.repository';
|
||||
import { AuditQueryDto } from './dto/audit-query.dto';
|
||||
|
||||
@Injectable()
|
||||
export class AuditService {
|
||||
@@ -21,4 +24,41 @@ export class AuditService {
|
||||
metadata,
|
||||
});
|
||||
}
|
||||
|
||||
async listSuperAdminLogs(query: AuditQueryDto) {
|
||||
const page = query.page ?? 1;
|
||||
const limit = query.limit ?? 20;
|
||||
const skip = (page - 1) * limit;
|
||||
const filter: Record<string, unknown> = {};
|
||||
|
||||
if (query.q?.trim()) {
|
||||
filter.$or = [
|
||||
{ action: { $regex: query.q.trim(), $options: 'i' } },
|
||||
{ targetType: { $regex: query.q.trim(), $options: 'i' } },
|
||||
{ targetId: { $regex: query.q.trim(), $options: 'i' } },
|
||||
{ actorIdentifier: { $regex: query.q.trim(), $options: 'i' } },
|
||||
];
|
||||
}
|
||||
|
||||
if (query.actorType) {
|
||||
filter.actorType = query.actorType;
|
||||
}
|
||||
|
||||
if (query.targetType?.trim()) {
|
||||
filter.targetType = query.targetType.trim();
|
||||
}
|
||||
|
||||
const sort = { createdAt: resolveMongoSortDirection(query.sortOrder) } as Record<string, 1 | -1>;
|
||||
const [items, total] = await Promise.all([
|
||||
this.auditRepository.findMany(filter, skip, limit, sort),
|
||||
this.auditRepository.count(filter),
|
||||
]);
|
||||
|
||||
return buildPaginatedResponse(items, {
|
||||
page,
|
||||
limit,
|
||||
total,
|
||||
offset: skip,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user