65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
import { Controller, Get, Query, UseGuards } from '@nestjs/common';
|
|
import { IsInt, IsOptional, IsString, Max, Min } from 'class-validator';
|
|
import { Type } from 'class-transformer';
|
|
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
|
|
import { CurrentUser } from '../auth/current-user.decorator';
|
|
import { Roles } from '../auth/roles.decorator';
|
|
import { RolesGuard } from '../auth/roles.guard';
|
|
import { OrgModuleGuard } from '../billing/org-module.guard';
|
|
import { RequireOrgModule } from '../billing/org-module.decorator';
|
|
import { AuditLogsService } from './audit-logs.service';
|
|
|
|
class ListAuditQueryDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
q?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
actorUserId?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
entityType?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
action?: string;
|
|
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
page?: number;
|
|
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
@Max(100)
|
|
limit?: number;
|
|
}
|
|
|
|
@Controller('audit-logs')
|
|
@UseGuards(JwtAuthGuard, RolesGuard, OrgModuleGuard)
|
|
@RequireOrgModule('audit_logs')
|
|
@Roles('owner', 'admin')
|
|
export class AuditLogsController {
|
|
constructor(private readonly auditLogs: AuditLogsService) {}
|
|
|
|
@Get()
|
|
list(
|
|
@CurrentUser() user: { organizationId: string },
|
|
@Query() query: ListAuditQueryDto,
|
|
) {
|
|
return this.auditLogs.list(user.organizationId, {
|
|
q: query.q,
|
|
actorUserId: query.actorUserId,
|
|
entityType: query.entityType,
|
|
action: query.action,
|
|
page: query.page,
|
|
limit: query.limit,
|
|
});
|
|
}
|
|
}
|