Example #1
0
        public async Task <List <DepartureResponse> > GetDepartureData()
        {
            var departureDataList = new List <DepartureResponse>();

            var schedules = await GetTrimmedSchedules();

            var predictions = await _mbtaApiRepository.GetNorthStationPredictions();

            var routes = await _mbtaApiRepository.GetAllCommuterRailRoutes();

            foreach (var schedule in schedules)
            {
                // If on schedule then status will be "On Time"
                var departureData =
                    new DepartureResponse(
                        schedule.attributes.departure_time,
                        ConvertStopIdToTrackNumber(schedule.relationships.stop.data.id),
                        ON_TIME_STATUS,
                        schedule.attributes.direction_id);

                UpdateIfPrediction(departureData, schedule, predictions.ToHashSet());

                departureData.Destination = GetDestination(schedule.relationships.route.data.id,
                                                           departureData.DirectionId, routes);

                departureDataList.Add(departureData);
            }

            // Remove TBD times so list can be ordered and then re-add them
            var tbdTimes = departureDataList.Where(x => x.DepartureTime == "TBD").ToList();

            departureDataList.RemoveAll(x => x.DepartureTime == "TBD");
            var orderedDepartureTimes = departureDataList.OrderBy(x => DateTime.Parse(x.DepartureTime)).ToList();

            orderedDepartureTimes.AddRange(tbdTimes);

            return(orderedDepartureTimes);
        }