Files
chat/client/flutter/lib/models/stats.dart
2026-04-25 16:36:34 +08:00

155 lines
3.7 KiB
Dart

/// My stats returned by stats.getMyStats
class MyStats {
final TotalStats total;
final TodayStats today;
final List<InviteSummary> recentInvites;
MyStats({
required this.total,
required this.today,
this.recentInvites = const [],
});
factory MyStats.fromJson(Map<String, dynamic> json) {
return MyStats(
total: TotalStats.fromJson(json['total'] ?? {}),
today: TodayStats.fromJson(json['today'] ?? {}),
recentInvites: (json['recentInvites'] as List?)
?.map((e) => InviteSummary.fromJson(e))
.toList() ??
[],
);
}
}
class TotalStats {
final int totalInvites;
final int totalJoins;
final int totalConversions;
final double totalRevenue;
TotalStats({
this.totalInvites = 0,
this.totalJoins = 0,
this.totalConversions = 0,
this.totalRevenue = 0,
});
factory TotalStats.fromJson(Map<String, dynamic> json) {
return TotalStats(
totalInvites: json['totalInvites'] ?? 0,
totalJoins: json['totalJoins'] ?? 0,
totalConversions: json['totalConversions'] ?? 0,
totalRevenue: (json['totalRevenue'] ?? 0).toDouble(),
);
}
}
class TodayStats {
final int invitesCreated;
final int joins;
final int conversions;
final double revenue;
TodayStats({
this.invitesCreated = 0,
this.joins = 0,
this.conversions = 0,
this.revenue = 0,
});
factory TodayStats.fromJson(Map<String, dynamic> json) {
return TodayStats(
invitesCreated: json['invitesCreated'] ?? 0,
joins: json['joins'] ?? 0,
conversions: json['conversions'] ?? 0,
revenue: (json['revenue'] ?? 0).toDouble(),
);
}
}
class InviteSummary {
final String? id;
final String? code;
final String? groupId;
final String? link;
final int? clickCount;
final int? joinCount;
final DateTime? createdAt;
InviteSummary({
this.id,
this.code,
this.groupId,
this.link,
this.clickCount,
this.joinCount,
this.createdAt,
});
factory InviteSummary.fromJson(Map<String, dynamic> json) {
return InviteSummary(
id: (json['_id'] ?? json['id'])?.toString(),
code: json['code'],
groupId: json['groupId']?.toString(),
link: json['link'],
clickCount: json['clickCount'],
joinCount: json['joinCount'],
createdAt: json['createdAt'] != null
? DateTime.parse(json['createdAt'].toString())
: null,
);
}
}
/// Ranking entry returned by stats.getRanking
class RankingEntry {
final int rank;
final String salesId;
final int totalJoins;
final int totalConversions;
final double totalRevenue;
final Map<String, dynamic>? user;
RankingEntry({
this.rank = 0,
required this.salesId,
this.totalJoins = 0,
this.totalConversions = 0,
this.totalRevenue = 0,
this.user,
});
factory RankingEntry.fromJson(Map<String, dynamic> json) {
return RankingEntry(
rank: json['rank'] ?? 0,
salesId: (json['_id'] ?? json['salesId'] ?? '').toString(),
totalJoins: json['totalJoins'] ?? 0,
totalConversions: json['totalConversions'] ?? 0,
totalRevenue: (json['totalRevenue'] ?? 0).toDouble(),
user: json['user'],
);
}
String get displayName =>
user?['nickname']?.toString() ?? user?['email']?.toString() ?? salesId;
}
/// Platform stats returned by stats.getPlatformStats
class PlatformStats {
final Map<String, dynamic> platform;
final Map<String, dynamic> today;
PlatformStats({
this.platform = const {},
this.today = const {},
});
factory PlatformStats.fromJson(Map<String, dynamic> json) {
return PlatformStats(
platform: json['platform'] ?? {},
today: json['today'] ?? {},
);
}
}