Beispiel #1
0
        /// <summary>
        /// Adds a new Route to the database.
        /// </summary>
        /// <param name="route">Route to add to the database.</param>
        /// <returns>Primary Key (ID) of the newly added Route.</returns>
        public static int AddNewRoute(Route route, out string errorMessage)
        {
            try
            {
                using (SqlConnection connection = ConnectionManager.GetConnection())
                {
                    errorMessage = String.Empty;

                    var data = new ActivEarthDataProvidersDataContext(connection);
                    var routeData = new ActiveRouteDataProvider
                    {
                        gmt_offset = route.GMTOffset,
                        distance = route.Distance,
                        end_latitude = route.EndLatitude,
                        end_longitude = route.EndLongitude,
                        end_time = route.EndTime,
                        mode = route.Mode,
                        points = route.Points,
                        start_latitude = route.StartLatitude,
                        start_longitude = route.StartLongitude,
                        start_time = route.StartTime,
                        steps = route.Steps,
                        type = route.Type,
                        user_id = route.UserId
                    };

                    data.ActiveRouteDataProviders.InsertOnSubmit(routeData);
                    data.SubmitChanges();

                    if (routeData.id > 0)
                    {
                        ActiveRouteDAO.ProcessRoute(route);
                    }

                    return routeData.id;
                }
            }
            catch (Exception e)
            {
                errorMessage = e.Message;
                return 0;
            }
        }
        public string ProcessRoute(string id, XElement input)
        {
            try
            {
                Route route = new Route()
                {
                    GMTOffset = int.Parse(input.Element("GMTOffset").Value),
                    Distance = double.Parse(input.Element("Distance").Value),
                    EndLatitude = double.Parse(input.Element("EndLatitude").Value),
                    EndLongitude = double.Parse(input.Element("EndLongitude").Value),
                    EndTime = DateTime.Parse(input.Element("EndTime").Value),
                    Mode = input.Element("Mode").Value,
                    Points = input.Element("Points").Value,
                    StartLatitude = double.Parse(input.Element("StartLatitude").Value),
                    StartLongitude = double.Parse(input.Element("StartLongitude").Value),
                    StartTime = DateTime.Parse(input.Element("StartTime").Value),
                    Steps = int.Parse(input.Element("Steps").Value),
                    Type = input.Element("Type").Value,
                    UserId = int.Parse(id)
                };
                string errorMessage;

                int routeId = ActiveRouteDAO.AddNewRoute(route, out errorMessage);

                return "Route addition was " + (routeId > 0 ? "successful." : ("unsuccessful. Reason: " + errorMessage));
            }
            catch (Exception e)
            {
                return String.Format("Route addition was unsuccessful. Reason: {0}", e.Message);
            }
        }
        public void TestAddRoute()
        {
            using (_trans)
            {
                Log("Creating test user in DB");
                _user1.UserID = UserDAO.CreateNewUser(_user1, "pass1");

                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.Steps, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.WalkDistance, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.RunDistance, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.BikeDistance, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.AggregateDistance, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.WalkTime, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.RunTime, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.BikeTime, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.AggregateTime, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.ChallengesCompleted, 0);
                UserStatisticDAO.CreateNewStatisticForUser(_user1.UserID, Statistic.GasSavings, 0);

                Route route = new Route()
                {
                    GMTOffset = -14400,
                    Distance = 2627,
                    EndLatitude = 37.22998,
                    EndLongitude = -80.421654,
                    EndTime = new DateTime(2012, 4, 30, 18, 25, 49),
                    Mode = "running",
                    Points = "POINTSWOULDGOHEREIFTHISWASNTATEST",
                    StartLatitude = 37.222889,
                    StartLongitude = -80.42263,
                    StartTime = new DateTime(2012, 4, 29, 19, 16, 32),
                    Steps = 709,
                    Type = "transportation",
                    UserId = _user1.UserID
                };

                Log("Adding route");
                string errorMessage;
                ActiveRouteDAO.AddNewRoute(route, out errorMessage);

                Log("Verifying that statistics updated");
                Assert.AreEqual(709, UserStatisticDAO.GetStatisticFromUserIdAndStatType(_user1.UserID, Statistic.Steps).Value);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Processes the contents of a route and updates the corresponding user statistics.
        /// </summary>
        /// <param name="route">Route to process.</param>
        private static void ProcessRoute(Route route)
        {
            if (route == null) return;

            double distance = MetersToMiles(route.Distance);
            double time = route.EndTime.Subtract(route.StartTime).TotalHours;
            string mode = route.Mode;

            float oldDistance, oldTotalDistance, oldTime, oldTotalTime, oldSteps;

            oldTotalDistance = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.AggregateDistance).Value;
            oldTotalTime = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.AggregateTime).Value;

            switch (mode.ToLower())
            {
                case "running":
                    // Update RunDistance, RunTime, and Steps
                    oldDistance = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.RunDistance).Value;
                    oldTime = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.RunTime).Value;
                    oldSteps = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.Steps).Value;

                    StatisticManager.SetUserStatistic(route.UserId, Statistic.RunDistance, (float)(distance + oldDistance));
                    StatisticManager.SetUserStatistic(route.UserId, Statistic.RunTime, (float)(time + oldTime));
                    StatisticManager.SetUserStatistic(route.UserId, Statistic.Steps, (float)(route.Steps + oldSteps));
                    break;

                case "biking":
                    // Update BikeDistance and BikeTime
                    oldDistance = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.BikeDistance).Value;
                    oldTime = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.BikeTime).Value;

                    StatisticManager.SetUserStatistic(route.UserId, Statistic.BikeDistance, (float)(distance + oldDistance));
                    StatisticManager.SetUserStatistic(route.UserId, Statistic.BikeTime, (float)(time + oldTime));
                    break;

                case "walking":
                    // Update WalkDistance, WalkTime, and Steps
                    oldDistance = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.WalkDistance).Value;
                    oldTime = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.WalkTime).Value;
                    oldSteps = UserStatisticDAO.GetStatisticFromUserIdAndStatType(route.UserId, Statistic.Steps).Value;

                    StatisticManager.SetUserStatistic(route.UserId, Statistic.WalkDistance, (float)(distance + oldDistance));
                    StatisticManager.SetUserStatistic(route.UserId, Statistic.WalkTime, (float)(time + oldTime));
                    StatisticManager.SetUserStatistic(route.UserId, Statistic.Steps, (float)(route.Steps + oldSteps));
                    break;

                default:

                    break;
            }

            StatisticManager.SetUserStatistic(route.UserId, Statistic.AggregateDistance, (float)(distance + oldTotalDistance));
            StatisticManager.SetUserStatistic(route.UserId, Statistic.AggregateTime, (float)(time + oldTotalTime));
        }