public IEnumerable <RouteInfo> GetRoutesInfoForUser(int id)
        {
            var userRoutes = _dbContext.Routes.Where(r => r.UserId == id).ToList();
            var resultList = new List <RouteInfo>();
            var comparer   = new DataEqualityComparer();

            foreach (var userRoute in userRoutes)
            {
                var dataForRoute = _dbContext.VibrationDatas.Where(vd => vd.RouteId == userRoute.RouteId).ToList().Distinct(comparer).ToList();
                var minSpeed     = 0.0;
                var maxSpeed     = 0.0;
                var averageSpeed = 0.0;
                var distance     = 0.0;
                var timeSpan     = userRoute.EndTime - userRoute.BeginTime;
                var duration     = $"{timeSpan.Value.Hours.ToString("00")}:{timeSpan.Value.Minutes.ToString("00")}:{timeSpan.Value.Seconds.ToString("00")}";

                if (dataForRoute.Any())
                {
                    minSpeed = dataForRoute.First().Speed;
                    maxSpeed = dataForRoute.First().Speed;

                    foreach (var data in dataForRoute)
                    {
                        if (data.Speed < minSpeed)
                        {
                            minSpeed = data.Speed;
                        }
                        if (data.Speed > maxSpeed)
                        {
                            maxSpeed = data.Speed;
                        }
                        averageSpeed += data.Speed;
                    }

                    averageSpeed /= dataForRoute.Count();
                    for (var i = 0; i < dataForRoute.Count(); i++)
                    {
                        if (i == 0)
                        {
                            distance += SpeedCalculator.CalculateDistance(userRoute.StartLocationLongitude, userRoute.StartLocationLatitude, dataForRoute[i].LocationLongitude, dataForRoute[i].LocationLatitude);
                        }

                        else if (i == dataForRoute.Count() - 1)
                        {
                            distance += SpeedCalculator.CalculateDistance(dataForRoute[i].LocationLongitude, dataForRoute[i].LocationLatitude, userRoute.EndLocationLongitude.Value, userRoute.EndLocationLatitude.Value);
                        }

                        else
                        {
                            distance += SpeedCalculator.CalculateDistance(dataForRoute[i - 1].LocationLongitude, dataForRoute[i - 1].LocationLatitude, dataForRoute[i].LocationLongitude, dataForRoute[i].LocationLatitude);
                        }
                    }
                }

                else
                {
                    distance = SpeedCalculator.CalculateDistance(userRoute.StartLocationLongitude, userRoute.StartLocationLatitude, userRoute.EndLocationLongitude.Value, userRoute.EndLocationLatitude.Value);
                    var timeDiff = userRoute.EndTime - userRoute.BeginTime;
                    var speed    = distance / Math.Abs(timeDiff.Value.TotalHours);
                    minSpeed     = speed;
                    maxSpeed     = speed;
                    averageSpeed = speed;
                }

                var result = new RouteInfo {
                    Route = userRoute, Data = dataForRoute, MaximumSpeed = maxSpeed, MinimumSpeed = minSpeed, AverageSpeed = averageSpeed, Distance = distance, Duration = duration
                };
                resultList.Add(result);
            }
            return(resultList);
        }