import 'course.dart'; /// Result of a single course evaluation class EvaluationResult { final Course course; final bool success; final String? errorMessage; final DateTime timestamp; EvaluationResult({ required this.course, required this.success, this.errorMessage, DateTime? timestamp, }) : timestamp = timestamp ?? DateTime.now(); factory EvaluationResult.fromJson(Map json) { return EvaluationResult( course: Course.fromJson(json['course'] as Map), success: json['success'] as bool? ?? false, errorMessage: json['errorMessage'] as String?, timestamp: json['timestamp'] != null ? DateTime.parse(json['timestamp'] as String) : DateTime.now(), ); } Map toJson() { return { 'course': course.toJson(), 'success': success, 'errorMessage': errorMessage, 'timestamp': timestamp.toIso8601String(), }; } @override String toString() { return 'EvaluationResult(course: ${course.name}, success: $success, errorMessage: $errorMessage)'; } } /// Result of batch evaluation class BatchEvaluationResult { final int total; final int success; final int failed; final List results; final Duration duration; BatchEvaluationResult({ required this.total, required this.success, required this.failed, required this.results, required this.duration, }); factory BatchEvaluationResult.fromJson(Map json) { return BatchEvaluationResult( total: json['total'] as int? ?? 0, success: json['success'] as int? ?? 0, failed: json['failed'] as int? ?? 0, results: (json['results'] as List?) ?.map((e) => EvaluationResult.fromJson(e as Map)) .toList() ?? [], duration: Duration(milliseconds: json['durationMs'] as int? ?? 0), ); } Map toJson() { return { 'total': total, 'success': success, 'failed': failed, 'results': results.map((e) => e.toJson()).toList(), 'durationMs': duration.inMilliseconds, }; } double get successRate => total > 0 ? success / total : 0.0; @override String toString() { return 'BatchEvaluationResult(total: $total, success: $success, failed: $failed, duration: ${duration.inSeconds}s)'; } }