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 hasOfferings = _database.select(_database.courseOfferings)
    ..where((co) => co.semester.equalsExp(_database.semesters.id));
  final cached =
      await (_database.select(_database.semesters)
            ..where((_) => existsQuery(hasOfferings))
            ..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,
  );
}