import { Body, Controller, Get, Param, Post, Put, Query } from '@nestjs/common'; import { ApiTags } from '@nestjs/swagger'; import { CurrentSessionUserId } from '../auth/current-session-user.decorator'; import { RequireRecentAuthentication } from '../auth/require-recent-authentication.decorator'; import { InfrastructureAlertSettingsService } from './infrastructure-alert-settings.service'; import { InfrastructureMonitoringService } from './infrastructure-monitoring.service'; @ApiTags('infrastructure-monitoring') @Controller('admin/infrastructure-monitoring') export class InfrastructureMonitoringController { constructor(private readonly monitoring: InfrastructureMonitoringService, private readonly settings: InfrastructureAlertSettingsService) {} @Get('overview') overview(@Query('range') range?: string, @CurrentSessionUserId() userId?: string) { return this.monitoring.overview(range, userId); } @Get('notification-summary') notificationSummary(@CurrentSessionUserId() userId?: string) { return this.monitoring.notificationSummary(userId); } @Post('alerts/:fingerprint/read') markAlertRead(@Param('fingerprint') fingerprint: string, @Body('activeAt') activeAt: unknown, @CurrentSessionUserId() userId: string) { return this.monitoring.markAlertRead(fingerprint, activeAt, userId); } @Get('alert-thresholds') alertThresholds() { return this.settings.get(); } @Put('alert-thresholds') @RequireRecentAuthentication() updateAlertThresholds(@Body() body: { configVersion?: number; thresholds?: unknown }, @CurrentSessionUserId() operatorId?: string) { return this.settings.update(body, operatorId); } }