Spaces:
Runtime error
Runtime error
File size: 1,683 Bytes
46252cd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import { Controller, Get, Param, Query } from '@nestjs/common';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
import { StatsService } from './stats.service';
import { StatsQueryDto } from './dto/stats-query.dto';
import { RequireRole } from '../auth/decorators/auth.decorators';
import { ApiKeyRole } from '../auth/entities/api-key.entity';
@ApiTags('statistics')
@Controller('stats')
export class StatsController {
constructor(private readonly statsService: StatsService) {}
// Global, cross-session aggregates with no scope param — ADMIN-only so a VIEWER / session-
// restricted key can't read cross-tenant activity. (Per-session stats below stays scope-gated.)
@Get('overview')
@RequireRole(ApiKeyRole.ADMIN)
@ApiOperation({ summary: 'Get overall statistics' })
@ApiResponse({ status: 200, description: 'Cross-session aggregate statistics (sessions, messages, etc.).' })
async getOverview() {
return this.statsService.getOverview();
}
@Get('messages')
@RequireRole(ApiKeyRole.ADMIN)
@ApiOperation({ summary: 'Get message statistics with time series' })
@ApiResponse({ status: 200, description: 'Message statistics with a time series for the requested period.' })
async getMessageStats(@Query() query: StatsQueryDto) {
return this.statsService.getMessageStats(query.period || '24h');
}
@Get('sessions/:sessionId')
@ApiOperation({ summary: 'Get statistics for a specific session' })
@ApiResponse({ status: 200, description: 'Per-session statistics for the requested session.' })
async getSessionStats(@Param('sessionId') sessionId: string) {
return this.statsService.getSessionStats(sessionId);
}
}
|