80 lines
2.2 KiB
TypeScript
80 lines
2.2 KiB
TypeScript
import { ApiProperty } from '@nestjs/swagger';
|
|
|
|
class UserGrowthDto {
|
|
@ApiProperty({ description: 'Label for the time period' })
|
|
label!: string;
|
|
|
|
@ApiProperty({ description: 'Number of new users' })
|
|
value!: number;
|
|
|
|
@ApiProperty({ description: 'Color class for the bar' })
|
|
color!: string;
|
|
}
|
|
|
|
class RoleDistributionDto {
|
|
@ApiProperty({ description: 'Role name' })
|
|
label!: string;
|
|
|
|
@ApiProperty({ description: 'Number of users with this role' })
|
|
value!: number;
|
|
|
|
@ApiProperty({ description: 'Color class for the bar' })
|
|
color!: string;
|
|
}
|
|
|
|
class StatusDistributionDto {
|
|
@ApiProperty({ description: 'Number of active users' })
|
|
active!: number;
|
|
|
|
@ApiProperty({ description: 'Number of suspended users' })
|
|
suspended!: number;
|
|
|
|
@ApiProperty({ description: 'Number of deleted users' })
|
|
deleted!: number;
|
|
}
|
|
|
|
class ActivityTimelineDto {
|
|
@ApiProperty({ description: 'Date label' })
|
|
date!: string;
|
|
|
|
@ApiProperty({ description: 'Number of new users' })
|
|
newUsers!: number;
|
|
|
|
@ApiProperty({ description: 'Number of logins' })
|
|
logins!: number;
|
|
}
|
|
|
|
export class DashboardStatsResponseDto {
|
|
@ApiProperty({ description: 'Total number of users' })
|
|
totalUsers!: number;
|
|
|
|
@ApiProperty({ description: 'Number of active users' })
|
|
activeUsers!: number;
|
|
|
|
@ApiProperty({ description: 'Number of suspended users' })
|
|
suspendedUsers!: number;
|
|
|
|
@ApiProperty({ description: 'Number of deleted users' })
|
|
deletedUsers!: number;
|
|
|
|
@ApiProperty({ description: 'Number of system admins' })
|
|
systemAdmins!: number;
|
|
|
|
@ApiProperty({ description: 'Number of recent logins (last 24h)' })
|
|
recentLogins!: number;
|
|
|
|
@ApiProperty({ description: 'Number of new users today' })
|
|
newUsersToday!: number;
|
|
|
|
@ApiProperty({ type: [UserGrowthDto], description: 'User growth over last 7 days' })
|
|
userGrowth!: UserGrowthDto[];
|
|
|
|
@ApiProperty({ type: [RoleDistributionDto], description: 'Distribution of user roles' })
|
|
roleDistribution!: RoleDistributionDto[];
|
|
|
|
@ApiProperty({ type: StatusDistributionDto, description: 'Distribution of user statuses' })
|
|
statusDistribution!: StatusDistributionDto;
|
|
|
|
@ApiProperty({ type: [ActivityTimelineDto], description: 'Activity timeline for last 7 days' })
|
|
activityTimeline!: ActivityTimelineDto[];
|
|
} |