This commit is contained in:
sjk
2025-11-17 14:09:17 +08:00
commit 31e46c5bf6
479 changed files with 109324 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
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');
}
}
}