public async System.Threading.Tasks.Task Auhtorize([FromBody] string authCode) { using (var context = new PttContext()) { var user = UserHelper.GetUser(context, RequestContext); if (user.RefreshToken == null) { var googleapiservices = new GoogleApiServices(); user.RefreshToken = await googleapiservices.GetRefreshTokenFromAuthCodeAsync(authCode, user); context.SaveChanges(); } } }
public async void SaveArea() { var json = await Request.Content.ReadAsStringAsync(); var telemetry = new Microsoft.ApplicationInsights.TelemetryClient(); telemetry.TrackEvent("STH", new Dictionary <string, string> { { "body", json.Replace(@"\", "").TrimStart('"').TrimEnd('"') } }); telemetry.Flush(); var dbGeo = JsonConvert.DeserializeObject <Polygon>(json.Replace(@"\", "").TrimStart('"').TrimEnd('"')).ToDbGeography(); var sqlGeography = MakePolygonValid(dbGeo); sqlGeography = sqlGeography.Reduce(1); var newPolygon = DbGeography.FromBinary(sqlGeography.STAsBinary().Value); using (var context = new PttContext()) { var intersectingAreas = context.CoveredAreas.Where(x => x.Geo.Intersects(newPolygon)).ToList(); var user = UserHelper.GetUser(context, RequestContext); if (newPolygon.Length != null) { user.Statistic.DistanceWalked += (double)newPolygon.Length; } foreach (var intersectingArea in intersectingAreas) { if (intersectingArea.User == user) { intersectingArea.Geo = intersectingArea.Geo.Difference(newPolygon); } } context.CoveredAreas.Add(new CoveredArea() { User = user, Geo = newPolygon }); context.SaveChanges(); } }
public static User GetUser(PttContext context, System.Web.Http.Controllers.HttpRequestContext requestContext) { var subject = GetUserSubject(requestContext); if (!context.Users.Any(x => x.Id == subject)) { context.Users.Add(new User { Id = subject, Name = "" }); } context.SaveChanges(); var user = context.Users.FirstOrDefault(x => x.Id == subject); return(user); }