Files
saqel/apps/teacher_app/lib/data/models/teacher_models.dart
T

147 lines
4.4 KiB
Dart

/**
* ==============================================================================
* SAQEL TEACHER STUDIO - DATA MODELS
* ==============================================================================
*
* نماذج البيانات الخاصة باستوديو المعلم:
* - نتائج فحص الجودة الإدراكي والأكاديمي (Quality Gate & MIT 20-25 Min Limit)
* - بيانات التسييل المالي وحسابات الحصص (55% المعلم / 15% المديرية / 30% المنصة)
* - أوراق العمل والواجبات المدرسية المصححة آلياً
* - استفسارات وأسئلة الطلبة الميدانية (غرفة الشكوك) والردود السقراطية المسجلة.
*/
class TeacherLessonAuditModel {
final String lessonTitle;
final String subject;
final double durationMinutes;
final bool durationGatePassed;
final String? durationWarning;
final int qualityScore;
final String approvalStatus;
final String curriculumAlignment;
final String audioClarity;
final int socraticStopsCount;
final String decision;
const TeacherLessonAuditModel({
required this.lessonTitle,
required this.subject,
required this.durationMinutes,
required this.durationGatePassed,
this.durationWarning,
required this.qualityScore,
required this.approvalStatus,
required this.curriculumAlignment,
required this.audioClarity,
required this.socraticStopsCount,
required this.decision,
});
factory TeacherLessonAuditModel.fromJson(Map<String, dynamic> json) {
return TeacherLessonAuditModel(
lessonTitle: json['lesson_title'] ?? '',
subject: json['subject'] ?? 'الفيزياء',
durationMinutes: (json['duration_minutes'] as num?)?.toDouble() ?? 22.5,
durationGatePassed: json['duration_gate_passed'] ?? true,
durationWarning: json['duration_warning'],
qualityScore: json['quality_score'] ?? 92,
approvalStatus: json['approval_status'] ?? 'approved_for_broadcast',
curriculumAlignment: json['curriculum_alignment'] ?? '96% تطابق مع مخرجات المنهاج الوزاري',
audioClarity: json['audio_clarity'] ?? '95% نقاء صوتي ممتاز',
socraticStopsCount: json['socratic_stops_count'] ?? 3,
decision: json['decision'] ?? 'الحصة معتمدة ومؤهلة للبث المشفر والعرض للبيع خارج الثقافة العسكرية 🚀',
);
}
}
class TeacherHomeworkModel {
final String id;
final String title;
final String className;
final String submitted;
final String dueDate;
final String averageScore;
final String status; // 'active', 'completed'
const TeacherHomeworkModel({
required this.id,
required this.title,
required this.className,
required this.submitted,
required this.dueDate,
required this.averageScore,
required this.status,
});
}
class StudentDoubtModel {
final String id;
final String studentName;
final String className;
final String question;
final String time;
final bool replied;
final bool voiceReply;
const StudentDoubtModel({
required this.id,
required this.studentName,
required this.className,
required this.question,
required this.time,
required this.replied,
required this.voiceReply,
});
StudentDoubtModel copyWith({
bool? replied,
bool? voiceReply,
}) {
return StudentDoubtModel(
id: id,
studentName: studentName,
className: className,
question: question,
time: time,
replied: replied ?? this.replied,
voiceReply: voiceReply ?? this.voiceReply,
);
}
}
class TeacherCourseModel {
final String id;
final String title;
final String grade;
final int totalLessons;
final int militaryStudents;
final int externalSubscribers;
final double priceJod;
final double netRevenueJod;
const TeacherCourseModel({
required this.id,
required this.title,
required this.grade,
required this.totalLessons,
required this.militaryStudents,
required this.externalSubscribers,
required this.priceJod,
required this.netRevenueJod,
});
}
class TeacherPayoutRequestModel {
final String cliqAlias;
final double amountJod;
final String requestedAt;
final String status; // 'queued', 'approved', 'completed'
const TeacherPayoutRequestModel({
required this.cliqAlias,
required this.amountJod,
required this.requestedAt,
required this.status,
});
}