refreshSemesters method
Fetches fresh semester data from network and writes to DB.
The watchSemesters stream automatically emits the updated value. Network errors propagate to the caller.
Implementation
Future<void> refreshSemesters() async {
final dtos = await _authRepository.withAuth(
_courseService.getCourseSemesterList,
sso: [.courseService],
);
await _database.transaction(() async {
for (final dto in dtos) {
if (dto case (year: final year?, term: final term?)) {
await _database.getOrCreateSemester(
year,
term,
inCourseSemesterList: true,
);
}
}
await (_database.update(_database.users)).write(
UsersCompanion(semestersFetchedAt: Value(DateTime.now())),
);
});
}