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');
|
||
}
|
||
}
|
||
}
|