public IHttpActionResult PostCompleteShare(FormDataCollection data) { if (!Session.Authorized) { return(Unauthorized()); } var currentShare = _shareRepo.GetUserActiveShare(Session.User.Id); if (currentShare == null) { return(NotFound()); } var guest = _shareRepo.GetGuest(currentShare.Id, Session.User.Id); if (guest == null) { return(NotFound()); } var valueMap = FormDataConverter.Convert(data); var lat = valueMap.Get("completeLat"); var lng = valueMap.Get("completaLng"); if (lat.IsNullOrWhiteSpace()) { return(BadRequest("Latitudine finale mancante")); } if (lng.IsNullOrWhiteSpace()) { return(BadRequest("Longitudine finale mancante")); } double completeLat; double completeLng; try { completeLat = double.Parse(lat); } catch (Exception e) { return(BadRequest("Formato latitutudine non corretto")); } try { completeLng = double.Parse(lng); } catch (Exception e) { return(BadRequest("Formato longitudine non corretto")); } var request = new DirectionsRequest() { Origin = new GoogleApi.Entities.Common.Location(guest.StartLat, guest.StartLng), Destination = new GoogleApi.Entities.Common.Location(completeLat, completeLng), Key = "AIzaSyDrnpGbytKl9jFKNTmI3B2vXh_68x3DG2Y" }; var result = GoogleMaps.Directions.Query(request); var distance = result.Routes.First().Legs.First().Distance.Value; _shareRepo.CompleteShare(currentShare.Id, Session.User.Id, completeLat, completeLng, distance); var host = currentShare.Host; var msgData = new Dictionary <string, string> { { "TYPE", "SHARE_COMPLETED" } }; #pragma warning disable 4014 FirebaseCloudMessanger.SendMessage( host, "Condivisione completata", Session.User + " ha completato la condivisione percorrendo " + distance / 1000.0 + " Km", msgData, "it.gruppoinfor.hometowork.SHARE_COMPLETED"); #pragma warning restore 4014 _userRepo.AddExpToUser(guest.User.Id, guest.Distance / 100); var completedShare = _shareRepo.GetGuest(currentShare.Id, Session.User.Id); return(Ok(completedShare)); }