Files
ai_english/client/lib/features/home/services/learning_progress_service.dart
2025-11-17 14:09:17 +08:00

89 lines
2.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import '../../../core/models/api_response.dart';
import '../../../core/services/enhanced_api_service.dart';
import '../models/learning_progress_model.dart';
/// 学习进度服务
class LearningProgressService {
static final LearningProgressService _instance = LearningProgressService._internal();
factory LearningProgressService() => _instance;
LearningProgressService._internal();
final EnhancedApiService _enhancedApiService = EnhancedApiService();
// 缓存时长配置
static const Duration _shortCacheDuration = Duration(minutes: 5);
/// 获取用户学习进度列表
Future<ApiResponse<List<LearningProgress>>> getUserLearningProgress({
int page = 1,
int limit = 20,
}) async {
try {
final response = await _enhancedApiService.get<List<LearningProgress>>(
'/user/learning-progress',
queryParameters: {
'page': page,
'limit': limit,
},
cacheDuration: _shortCacheDuration,
fromJson: (data) {
final progressList = data['progress'] as List?;
print('=== 学习进度数据解析 ===');
print('progress字段: $progressList');
print('数据条数: ${progressList?.length ?? 0}');
if (progressList == null || progressList.isEmpty) {
// 返回空列表,不使用默认数据
print('后端返回空数据,显示空状态');
return [];
}
final result = progressList.map((json) => LearningProgress.fromJson(json)).toList();
print('解析后的数据条数: ${result.length}');
return result;
},
);
if (response.success && response.data != null) {
return ApiResponse.success(message: '获取成功', data: response.data!);
} else {
// 如果API失败返回空列表
return ApiResponse.success(
message: '获取失败',
data: [],
);
}
} catch (e) {
// 出错时返回空列表
print('获取学习进度异常: $e');
return ApiResponse.success(
message: '获取失败',
data: [],
);
}
}
/// 获取用户学习统计
Future<ApiResponse<Map<String, dynamic>>> getUserStats({
String timeRange = 'all',
}) async {
try {
final response = await _enhancedApiService.get<Map<String, dynamic>>(
'/user/stats',
queryParameters: {
'time_range': timeRange,
},
cacheDuration: _shortCacheDuration,
fromJson: (data) => data,
);
if (response.success && response.data != null) {
return ApiResponse.success(message: '获取成功', data: response.data!);
} else {
return ApiResponse.error(message: response.message);
}
} catch (e) {
return ApiResponse.error(message: '获取统计数据失败: $e');
}
}
}