watchStudentRoster method
- int courseOfferingId
Watches the cached I-School Plus student roster for courseOfferingId.
The fetch timestamp distinguishes a successfully cached empty roster from a roster that has never been fetched.
Implementation
Stream<CourseStudentRoster> watchStudentRoster(int courseOfferingId) {
final query =
_database.select(_database.courseOfferings).join([
leftOuterJoin(
_database.courseOfferingStudents,
_database.courseOfferingStudents.courseOffering.equalsExp(
_database.courseOfferings.id,
),
),
leftOuterJoin(
_database.students,
_database.students.id.equalsExp(
_database.courseOfferingStudents.student,
),
),
])
..where(_database.courseOfferings.id.equals(courseOfferingId))
..orderBy([OrderingTerm.asc(_database.students.studentId)]);
return query.watch().map((rows) {
if (rows.isEmpty) {
return (students: const <Student>[], fetchedAt: null);
}
return (
students: rows
.map((row) => row.readTableOrNull(_database.students))
.nonNulls
.toList(growable: false),
fetchedAt: rows.first
.readTable(_database.courseOfferings)
.studentRosterFetchedAt,
);
});
}