Beispiel #1
0
        public async Task <IActionResult> DownloadUpdates([FromQuery] decimal lat, [FromQuery] decimal lng, [FromQuery] DateTime lastUpdatedTime)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new { WasSuccessful = false, Message = "Invalid model state for DownloadUpdates." }));
            }

            // Download all events where the event was updated after the last client's updated time
            GeoBox gb = CalculateBoundingGeoBox(lat, lng, Policy.SURROUNDING_GEOBOX_SIDE_LENGTH);

            var @events = await _context.Event.Where(e => (
                                                         e.Latitude <gb.MaxLatitude &&
                                                                     e.Latitude> gb.MinLatitude &&
                                                         e.Longitude <gb.MaxLongitude &&
                                                                      e.Longitude> gb.MinLongitude &&
                                                         e.TimeLastUpdated > lastUpdatedTime
                                                         )).ToListAsync();

            // Determine if any of these events need to be deleted...
            var eventsToDelete = @events.Where(Policy.ShouldMarkEventForDeletion);

            foreach (Event e in eventsToDelete)
            {
                e.Deleted         = true;
                e.TimeLastUpdated = DateTime.UtcNow;
            }

            _context.UpdateRange(eventsToDelete);
            await _context.SaveChangesAsync();

            return(Json(new { WasSuccessful = true, Events = @events, CurrentServerTime = DateTime.UtcNow }));
        }