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();
            }
        }
Пример #3
0
        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);
        }