feat: model undergraduate schools terms and exam queries
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import 'school_identity.dart';
|
||||
import 'school_term.dart';
|
||||
import 'exam_schedule.dart';
|
||||
|
||||
enum UndergraduateExamType {
|
||||
finalExam(1,'期末考试'), midterm(2,'期中考试'), makeup(3,'补考/缓考');
|
||||
const UndergraduateExamType(this.id, this.label);
|
||||
final int id;
|
||||
final String label;
|
||||
static UndergraduateExamType fromId(int id) => values.firstWhere((t)=>t.id==id,
|
||||
orElse:()=>throw const FormatException('考试类型无效'));
|
||||
}
|
||||
|
||||
class UndergraduateExamQuery {
|
||||
UndergraduateExamQuery({required this.term, required Set<UndergraduateExamType> types})
|
||||
: types=Set.unmodifiable(types) {
|
||||
if(term.school != SupportedSchool.uestcUndergraduate || types.isEmpty) throw ArgumentError('请选择本科学期和考试类型');
|
||||
}
|
||||
final SchoolTerm term;
|
||||
final Set<UndergraduateExamType> types;
|
||||
List<UndergraduateExamType> get orderedTypes => UndergraduateExamType.values.where(types.contains).toList();
|
||||
Uri uriFor(UndergraduateExamType type) {
|
||||
if(!types.contains(type)) throw ArgumentError('考试类型不在查询选项中');
|
||||
return Uri.https('eams.uestc.edu.cn','/eams/stdExamTable!examTable.action',{'semester.id':'${term.id}','examType.id':'${type.id}'});
|
||||
}
|
||||
static UndergraduateExamQuery? fromSchedule(ExamSchedule? schedule) {
|
||||
if(schedule?.school != SupportedSchool.uestcUndergraduate) return null;
|
||||
return UndergraduateExamQuery(term:SchoolTerm(int.parse(schedule!.termId),school:schedule.school),
|
||||
types:schedule.requestedExamTypes.map(UndergraduateExamType.fromId).toSet());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user