89 lines
2.8 KiB
Dart
89 lines
2.8 KiB
Dart
|
|
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');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|