import '../core/utils/safe_convert.dart'; class NamedRecord { final int id; final String name; const NamedRecord({required this.id, required this.name}); factory NamedRecord.fromJson(Map json) { return NamedRecord( id: SafeConvert.toSafeInt(json['id']), name: SafeConvert.toSafeString(json['name']), ); } static NamedRecord? fromNullableJson(dynamic json) { final map = SafeConvert.toNullableMap(json); if (map == null) return null; return NamedRecord.fromJson(map); } Map toJson() => {'id': id, 'name': name}; @override String toString() => name; } class StudentBasic { final int id; final String name; const StudentBasic({required this.id, required this.name}); factory StudentBasic.fromJson(Map json) { return StudentBasic( id: SafeConvert.toSafeInt(json['id']), name: SafeConvert.toSafeString(json['name']), ); } static StudentBasic? fromNullableJson(dynamic json) { final map = SafeConvert.toNullableMap(json); if (map == null) return null; return StudentBasic.fromJson(map); } Map toJson() => {'id': id, 'name': name}; } class StudentProfile { final int id; final String studentId; final String admissionNumber; final String? rollNumber; final String fullName; final String? email; final String? mobile; final String? gender; final String? dateOfBirth; final String status; final NamedRecord? campus; final NamedRecord? department; final NamedRecord? program; final NamedRecord? level; final NamedRecord? academicYear; final NamedRecord? academicTerm; final NamedRecord? batch; final NamedRecord? semester; final NamedRecord? section; const StudentProfile({ required this.id, required this.studentId, required this.admissionNumber, this.rollNumber, required this.fullName, this.email, this.mobile, this.gender, this.dateOfBirth, required this.status, this.campus, this.department, this.program, this.level, this.academicYear, this.academicTerm, this.batch, this.semester, this.section, }); factory StudentProfile.fromJson(Map json) { return StudentProfile( id: SafeConvert.toSafeInt(json['id']), studentId: SafeConvert.toSafeString(json['student_id']), admissionNumber: SafeConvert.toSafeString(json['admission_number']), rollNumber: SafeConvert.toNullableString(json['roll_number']), fullName: SafeConvert.toSafeString(json['full_name']), email: SafeConvert.toNullableString(json['email']), mobile: SafeConvert.toNullableString(json['mobile']), gender: SafeConvert.toNullableString(json['gender']), dateOfBirth: SafeConvert.toNullableString(json['date_of_birth']), status: SafeConvert.toSafeString(json['status'], 'draft'), campus: NamedRecord.fromNullableJson(json['campus']), department: NamedRecord.fromNullableJson(json['department']), program: NamedRecord.fromNullableJson(json['program']), level: NamedRecord.fromNullableJson(json['level']), academicYear: NamedRecord.fromNullableJson(json['academic_year']), academicTerm: NamedRecord.fromNullableJson(json['academic_term']), batch: NamedRecord.fromNullableJson(json['batch']), semester: NamedRecord.fromNullableJson(json['semester']), section: NamedRecord.fromNullableJson(json['section']), ); } }