马良AI写作初始化仓库
This commit is contained in:
295
AINoval/lib/models/admin/admin_models.dart
Normal file
295
AINoval/lib/models/admin/admin_models.dart
Normal file
@@ -0,0 +1,295 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import '../../utils/date_time_parser.dart';
|
||||
|
||||
part 'admin_models.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class AdminDashboardStats extends Equatable {
|
||||
final int totalUsers;
|
||||
final int activeUsers;
|
||||
final int totalNovels;
|
||||
final int aiRequestsToday;
|
||||
final double creditsConsumed;
|
||||
final List<ChartData> userGrowthData;
|
||||
final List<ChartData> requestsData;
|
||||
final List<ActivityItem> recentActivities;
|
||||
|
||||
const AdminDashboardStats({
|
||||
required this.totalUsers,
|
||||
required this.activeUsers,
|
||||
required this.totalNovels,
|
||||
required this.aiRequestsToday,
|
||||
required this.creditsConsumed,
|
||||
required this.userGrowthData,
|
||||
required this.requestsData,
|
||||
required this.recentActivities,
|
||||
});
|
||||
|
||||
factory AdminDashboardStats.fromJson(Map<String, dynamic> json) =>
|
||||
_$AdminDashboardStatsFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$AdminDashboardStatsToJson(this);
|
||||
|
||||
@override
|
||||
List<Object> get props => [
|
||||
totalUsers,
|
||||
activeUsers,
|
||||
totalNovels,
|
||||
aiRequestsToday,
|
||||
creditsConsumed,
|
||||
userGrowthData,
|
||||
requestsData,
|
||||
recentActivities,
|
||||
];
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class ChartData extends Equatable {
|
||||
final String label;
|
||||
final double value;
|
||||
final DateTime date;
|
||||
|
||||
const ChartData({
|
||||
required this.label,
|
||||
required this.value,
|
||||
required this.date,
|
||||
});
|
||||
|
||||
|
||||
factory ChartData.fromJson(Map<String, dynamic> json) {
|
||||
return ChartData(
|
||||
label: json['label'] as String,
|
||||
value: (json['value'] as num).toDouble(),
|
||||
date: parseBackendDateTime(json['date']),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => _$ChartDataToJson(this);
|
||||
|
||||
@override
|
||||
List<Object> get props => [label, value, date];
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class ActivityItem extends Equatable {
|
||||
final String id;
|
||||
final String userId;
|
||||
final String userName;
|
||||
final String action;
|
||||
final String description;
|
||||
final DateTime timestamp;
|
||||
final String? metadata;
|
||||
|
||||
const ActivityItem({
|
||||
required this.id,
|
||||
required this.userId,
|
||||
required this.userName,
|
||||
required this.action,
|
||||
required this.description,
|
||||
required this.timestamp,
|
||||
this.metadata,
|
||||
});
|
||||
|
||||
factory ActivityItem.fromJson(Map<String, dynamic> json) {
|
||||
return ActivityItem(
|
||||
id: json['id'] as String,
|
||||
userId: json['userId'] as String,
|
||||
userName: json['userName'] as String,
|
||||
action: json['action'] as String,
|
||||
description: json['description'] as String,
|
||||
timestamp: parseBackendDateTime(json['timestamp']),
|
||||
metadata: json['metadata'] as String?,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => _$ActivityItemToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
userId,
|
||||
userName,
|
||||
action,
|
||||
description,
|
||||
timestamp,
|
||||
metadata,
|
||||
];
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class AdminUser extends Equatable {
|
||||
final String id;
|
||||
final String username;
|
||||
final String email; // 后端可能返回 null,这里统一转换为空串
|
||||
final String? displayName;
|
||||
final String accountStatus;
|
||||
final int credits;
|
||||
final List<String> roles;
|
||||
final DateTime createdAt;
|
||||
final DateTime? updatedAt;
|
||||
|
||||
const AdminUser({
|
||||
required this.id,
|
||||
required this.username,
|
||||
required this.email,
|
||||
this.displayName,
|
||||
required this.accountStatus,
|
||||
required this.credits,
|
||||
required this.roles,
|
||||
required this.createdAt,
|
||||
this.updatedAt,
|
||||
});
|
||||
|
||||
factory AdminUser.fromJson(Map<String, dynamic> json) {
|
||||
return AdminUser(
|
||||
id: json['id'] as String,
|
||||
username: json['username'] as String,
|
||||
email: (json['email'] as String?) ?? '',
|
||||
displayName: json['displayName'] as String?,
|
||||
accountStatus: json['accountStatus']?.toString() ?? 'ACTIVE',
|
||||
credits: (json['credits'] as num?)?.toInt() ?? 0,
|
||||
roles: (json['roles'] as List?)?.map((e) => e.toString()).toList() ?? [],
|
||||
createdAt: parseBackendDateTime(json['createdAt']),
|
||||
updatedAt: json['updatedAt'] != null ? parseBackendDateTime(json['updatedAt']) : null,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => _$AdminUserToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
username,
|
||||
email,
|
||||
displayName,
|
||||
accountStatus,
|
||||
credits,
|
||||
roles,
|
||||
createdAt,
|
||||
updatedAt,
|
||||
];
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class AdminRole extends Equatable {
|
||||
final String? id;
|
||||
final String roleName;
|
||||
final String displayName;
|
||||
final String? description;
|
||||
final List<String> permissions;
|
||||
final bool enabled;
|
||||
final int priority;
|
||||
|
||||
const AdminRole({
|
||||
this.id,
|
||||
required this.roleName,
|
||||
required this.displayName,
|
||||
this.description,
|
||||
required this.permissions,
|
||||
required this.enabled,
|
||||
required this.priority,
|
||||
});
|
||||
|
||||
factory AdminRole.fromJson(Map<String, dynamic> json) =>
|
||||
_$AdminRoleFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$AdminRoleToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
roleName,
|
||||
displayName,
|
||||
description,
|
||||
permissions,
|
||||
enabled,
|
||||
priority,
|
||||
];
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class AdminModelConfig extends Equatable {
|
||||
final String? id;
|
||||
final String provider;
|
||||
final String modelId;
|
||||
final String? displayName;
|
||||
final bool enabled;
|
||||
final List<String> enabledForFeatures;
|
||||
final double creditRateMultiplier;
|
||||
final int maxConcurrentRequests;
|
||||
final int dailyRequestLimit;
|
||||
final String? description;
|
||||
|
||||
const AdminModelConfig({
|
||||
this.id,
|
||||
required this.provider,
|
||||
required this.modelId,
|
||||
this.displayName,
|
||||
required this.enabled,
|
||||
required this.enabledForFeatures,
|
||||
required this.creditRateMultiplier,
|
||||
required this.maxConcurrentRequests,
|
||||
required this.dailyRequestLimit,
|
||||
this.description,
|
||||
});
|
||||
|
||||
factory AdminModelConfig.fromJson(Map<String, dynamic> json) =>
|
||||
_$AdminModelConfigFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$AdminModelConfigToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
provider,
|
||||
modelId,
|
||||
displayName,
|
||||
enabled,
|
||||
enabledForFeatures,
|
||||
creditRateMultiplier,
|
||||
maxConcurrentRequests,
|
||||
dailyRequestLimit,
|
||||
description,
|
||||
];
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class AdminSystemConfig extends Equatable {
|
||||
final String id;
|
||||
final String configKey;
|
||||
final String configValue;
|
||||
final String? description;
|
||||
final String configType;
|
||||
final String? configGroup;
|
||||
final bool enabled;
|
||||
final bool readOnly;
|
||||
|
||||
const AdminSystemConfig({
|
||||
required this.id,
|
||||
required this.configKey,
|
||||
required this.configValue,
|
||||
this.description,
|
||||
required this.configType,
|
||||
this.configGroup,
|
||||
required this.enabled,
|
||||
required this.readOnly,
|
||||
});
|
||||
|
||||
factory AdminSystemConfig.fromJson(Map<String, dynamic> json) =>
|
||||
_$AdminSystemConfigFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$AdminSystemConfigToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
configKey,
|
||||
configValue,
|
||||
description,
|
||||
configType,
|
||||
configGroup,
|
||||
enabled,
|
||||
readOnly,
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user