refreshSemesters method

Future<void> refreshSemesters()

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())),
    );
  });
}