getSemesters method

Future<List<Semester>> getSemesters({
  1. bool refresh = false,
})

Gets available semesters for the authenticated student.

Returns cached data if fresh (within TTL). Set refresh to true to bypass TTL (pull-to-refresh).

Implementation

Future<List<Semester>> getSemesters({bool refresh = false}) async {
  final user = await _database.select(_database.users).getSingleOrNull();
  final cached =
      await (_database.select(_database.semesters)
            ..where((s) => s.inCourseSemesterList.equals(true))
            ..orderBy([
              (s) => OrderingTerm.desc(s.year),
              (s) => OrderingTerm.desc(s.term),
            ]))
          .get();

  return fetchWithTtl(
    cached: cached.isEmpty ? null : cached,
    getFetchedAt: (_) => user?.semestersFetchedAt,
    fetchFromNetwork: _fetchSemestersFromNetwork,
    refresh: refresh,
  );
}