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