/// <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); } }
/// <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)); }