commit from livecd

This commit is contained in:
2025-07-24 13:46:46 +01:00
parent 9fbdd97b15
commit e6ed9d01c2
6 changed files with 251 additions and 38 deletions

View File

@@ -34,3 +34,120 @@ class AuthenticatedUserData extends UserData {
final String access_token;
}
class HomepageStats {
final double totalMileage;
final List<YearlyMileage> yearlyMileage;
final List<LocoSummary> topLocos;
final List<LeaderboardEntry> leaderboard;
final List<TripSummary> trips;
HomepageStats({
required this.totalMileage,
required this.yearlyMileage,
required this.topLocos,
required this.leaderboard,
required this.trips,
});
factory HomepageStats.fromJson(Map<String, dynamic> json) {
return HomepageStats(
totalMileage: (json['milage_data']['mileage'] as num).toDouble(),
yearlyMileage: (json['yearly_mileage'] as List)
.map((e) => YearlyMileage.fromJson(e))
.toList(),
topLocos: (json['top_locos'] as List)
.map((e) => LocoSummary.fromJson(e))
.toList(),
leaderboard: (json['leaderboard_data'] as List)
.map((e) => LeaderboardEntry.fromJson(e))
.toList(),
trips: (json['trip_data'] as List)
.map((e) => TripSummary.fromJson(e))
.toList(),
);
}
}
class YearlyMileage {
final int? year;
final double mileage;
YearlyMileage({this.year, required this.mileage});
factory YearlyMileage.fromJson(Map<String, dynamic> json) => YearlyMileage(
year: json['year'],
mileage: (json['mileage'] as num).toDouble(),
);
}
class LocoSummary {
final String locoType, locoClass, locoNumber, locoName, locoOperator;
final String? locoNotes, locoEvn;
final int locoId, locoJourneys;
final double locoMileage;
LocoSummary({
required this.locoType,
required this.locoClass,
required this.locoNumber,
required this.locoName,
required this.locoOperator,
this.locoNotes,
this.locoEvn,
required this.locoId,
required this.locoMileage,
required this.locoJourneys,
});
factory LocoSummary.fromJson(Map<String, dynamic> json) => LocoSummary(
locoType: json['loco_type'],
locoClass: json['loco_class'],
locoNumber: json['loco_number'],
locoName: json['loco_name'],
locoOperator: json['loco_operator'],
locoNotes: json['loco_notes'],
locoEvn: json['loco_evn'],
locoId: json['loco_id'],
locoMileage: (json['loco_mileage'] as num).toDouble(),
locoJourneys: json['loco_journeys'],
);
}
class LeaderboardEntry {
final String userId, username, userFullName;
final double mileage;
LeaderboardEntry({
required this.userId,
required this.username,
required this.userFullName,
required this.mileage,
});
factory LeaderboardEntry.fromJson(Map<String, dynamic> json) =>
LeaderboardEntry(
userId: json['user_id'],
username: json['username'],
userFullName: json['user_full_name'],
mileage: (json['mileage'] as num).toDouble(),
);
}
class TripSummary {
final int tripId;
final String tripName;
final double tripMileage;
TripSummary({
required this.tripId,
required this.tripName,
required this.tripMileage,
});
factory TripSummary.fromJson(Map<String, dynamic> json) => TripSummary(
tripId: json['trip_id'],
tripName: json['trip_name'],
tripMileage: (json['trip_mileage'] as num).toDouble(),
);
}