getCourseOffering method

  1. @override
Future<CourseOfferingDto?> getCourseOffering(
  1. String courseNumber
)
override

Fetches a course offering by its course number.

Returns null only when the course system explicitly reports that the number does not exist. Malformed or inconsistent responses throw so that callers do not cache a server or parser failure as a missing offering.

Throws an ArgumentError when courseNumber is blank.

Implementation

@override
Future<CourseOfferingDto?> getCourseOffering(String courseNumber) async {
  final number = courseNumber.trim();
  if (number.isEmpty) {
    throw ArgumentError.value(
      courseNumber,
      'courseNumber',
      'must not be blank',
    );
  }
  if (courseOfferingResult case final result?) return result;

  for (final semester in await getCourseSemesterList()) {
    for (final schedule in await getCourseTable(
      username: '',
      semester: semester,
    )) {
      if (schedule.number != number) continue;
      return (
        semester: semester,
        schedule: schedule,
        courseType: null,
        enrolled: null,
        withdrawn: null,
      );
    }
  }
  return null;
}