private static FavoriteStopViewModel ToViewModel(FavoriteStop favorite, BusStaticData staticData, ClientBusSchedule schedule, DateTimeOffset currentTime) { var routeSchedules = schedule[favorite.Id] .Where(rs => rs.Value.Any()) .OrderBy(rs => rs.Value.Aggregate(ARRIVAL_TIME_SEED, BusArrivalTime.Min)) .Take(2) .ToList(); var firstRoute = routeSchedules.Count > 0 ? staticData.Routes[routeSchedules[0].Key] : null; var secondRoute = routeSchedules.Count > 1 ? staticData.Routes[routeSchedules[1].Key] : null; return(new FavoriteStopViewModel { StopId = favorite.Id, StopName = favorite.Name, FirstRouteName = firstRoute != null ? firstRoute.RouteNo : string.Empty, FirstRouteColor = firstRoute != null ? firstRoute.Color : string.Empty, FirstRouteArrivals = routeSchedules.Count > 0 ? RouteArrivalsSummary.ToEstimateSummary(routeSchedules[0].Value, currentTime) : "No arrivals!", SecondRouteName = secondRoute != null ? secondRoute.RouteNo : string.Empty, SecondRouteColor = secondRoute != null ? secondRoute.Color : string.Empty, SecondRouteArrivals = routeSchedules.Count > 1 ? RouteArrivalsSummary.ToEstimateSummary(routeSchedules[1].Value, currentTime) : string.Empty, DistanceFromUser = double.IsNaN(favorite.DistanceFromUser) ? "" : $"{favorite.DistanceFromUser:F1} miles", IsNearestStop = favorite.IsNearestStop }); }
public async Task <FavoriteStop> AddFavoriteStopAsync(string chatId, Stop stop) { var favoriteStop = new FavoriteStop(chatId, stop.ShortName); var insertOperation = TableOperation.InsertOrReplace(favoriteStop); await _table.ExecuteAsync(insertOperation); return(favoriteStop); }
public async Task <FavoriteStop> RemoveFavoriteStopAsync(string chatId, Stop stop) { var allFavs = await GetFavoriteStopsAsync(chatId); if (allFavs.All(_ => _.ShortName != stop.ShortName)) { return(null); } var favoriteStop = new FavoriteStop(chatId, stop.ShortName) { ETag = "*" }; var insertOperation = TableOperation.Delete(favoriteStop); var result = await _table.ExecuteAsync(insertOperation); return(favoriteStop); }
private static FavoriteStopViewModel ToViewModel(FavoriteStop favorite, BusStaticData staticData, ClientBusSchedule schedule, DateTimeOffset currentTime) { var routeSchedules = schedule[favorite.Id] .Where(rs => rs.Value.Any()) .OrderBy(rs => rs.Value.Aggregate(int.MaxValue, Math.Min)) .Take(2) .ToList(); var firstRoute = routeSchedules.Count > 0 ? staticData.Routes[routeSchedules[0].Key] : null; var secondRoute = routeSchedules.Count > 1 ? staticData.Routes[routeSchedules[1].Key] : null; return new FavoriteStopViewModel { StopId = favorite.Id, StopName = favorite.Name, FirstRouteName = firstRoute != null ? firstRoute.RouteNo : string.Empty, FirstRouteColor = firstRoute != null ? firstRoute.Color : string.Empty, FirstRouteArrivals = routeSchedules.Count > 0 ? ToArrivalsSummary(routeSchedules[0].Value, currentTime) : "No arrivals!", SecondRouteName = secondRoute != null ? secondRoute.RouteNo : string.Empty, SecondRouteColor = secondRoute != null ? secondRoute.Color : string.Empty, SecondRouteArrivals = routeSchedules.Count > 1 ? ToArrivalsSummary(routeSchedules[1].Value, currentTime) : string.Empty, DistanceFromUser = double.IsNaN(favorite.DistanceFromUser) ? "" : $"{favorite.DistanceFromUser:F1} miles", IsNearestStop = favorite.IsNearestStop }; }