Complete Socratic adaptive exams in Flutter, Guardian WhatsApp alerts, and curriculum robustness

This commit is contained in:
Hamza-Ayed
2026-09-03 10:14:34 +03:00
parent ab482d85e4
commit 12049fd7da
12 changed files with 1444 additions and 26 deletions
@@ -3,6 +3,7 @@ import '../../core/network/api_client.dart';
import '../../core/services/storage_service.dart';
import '../models/user_model.dart';
import '../models/lesson_model.dart';
import '../models/exam_model.dart';
/// Authentication Repository (OTP, National ID, me, logout)
class AuthRepository {
@@ -176,3 +177,52 @@ class GuardianRepository {
return [];
}
}
/// Exam Repository (Adaptive Exams, Questions, Diagnostic Submissions)
class ExamRepository {
final ApiClient _api;
ExamRepository({ApiClient? api}) : _api = api ?? ApiClient();
Future<List<ExamModel>> getExams({int? courseId, int? lessonId, String? scope}) async {
final params = <String, dynamic>{};
if (courseId != null) params['course_id'] = courseId;
if (lessonId != null) params['lesson_id'] = lessonId;
if (scope != null) params['scope'] = scope;
final res = await _api.get(AppConfig.examsEndpoint, queryParams: params);
if (res is Map && res['data'] is List) {
return (res['data'] as List)
.map((item) => ExamModel.fromJson(Map<String, dynamic>.from(item)))
.toList();
}
return [];
}
Future<ExamModel> getExamDetails(int examId) async {
final res = await _api.get('${AppConfig.examsEndpoint}/$examId');
if (res is Map && res['data'] is Map) {
return ExamModel.fromJson(Map<String, dynamic>.from(res['data']));
}
throw ApiException('فشل تحميل تفاصيل الامتحان');
}
Future<ExamSubmissionResultModel> submitExam(
int examId, {
required List<Map<String, dynamic>> answers,
required int timeSpentSeconds,
}) async {
final res = await _api.post(
'${AppConfig.examsEndpoint}/$examId/submit',
body: {
'answers': answers,
'time_spent_seconds': timeSpentSeconds,
},
);
if (res is Map && res['data'] is Map) {
return ExamSubmissionResultModel.fromJson(Map<String, dynamic>.from(res['data']));
}
throw ApiException('فشل تقديم الامتحان والتشخيص الذكي');
}
}