public async Task <IHttpActionResult> PostBuilding(Models.Outgoing.Map.Building building) { using (var db = DbHelper.GetDb()) { if (building.Id == null) { var dbLocation = new Models.DB.Location() { Description = building.Description, MarkerData = JsonConvert.SerializeObject(building.Marker, Formatting.Indented), Name = building.Name }; var dbBuilding = new Models.DB.Building { BuildingCode = building.OuCode, GeoData = JsonConvert.SerializeObject(building.Shape, Formatting.Indented), }; dbLocation.Building = dbBuilding; db.Locations.Add(dbLocation); } else { var dbObject = db.Buildings.Include(b => b.Location).FirstOrDefault(b => b.fkLocationId == building.Id); if (dbObject == null) { return(Content(HttpStatusCode.BadRequest, $"Building with id {building.Id} not found")); } dbObject.BuildingCode = building.OuCode; dbObject.Location.Description = building.Description; dbObject.Location.GeoData = JsonConvert.SerializeObject(building.Shape, Formatting.Indented); dbObject.Location.MarkerData = JsonConvert.SerializeObject(building.Marker, Formatting.Indented); dbObject.Location.Name = building.Name; } return(Ok(await db.SaveChangesAsync())); } }
public static async Task <bool> SaveBuilding(Models.Outgoing.Map.Building building) { using (var db = DbHelper.GetDb()) { Building dbObject; if (building.Id == null) { var dbLocation = new Models.DB.Location() { Description = building.Description, MarkerData = JsonConvert.SerializeObject(building.Marker, Formatting.Indented), Name = building.Name }; dbObject = new Models.DB.Building { BuildingCode = building.OuCode, GeoData = JsonConvert.SerializeObject(building.Shape, Formatting.Indented), }; dbLocation.Building = dbObject; db.Locations.Add(dbLocation); } else { dbObject = db.Buildings.Include(b => b.Location).FirstOrDefault(b => b.fkLocationId == building.Id); if (dbObject == null) { return(false); } dbObject.BuildingCode = building.OuCode; dbObject.Location.Description = building.Description; dbObject.Location.GeoData = JsonConvert.SerializeObject(building.Shape, Formatting.Indented); dbObject.Location.MarkerData = JsonConvert.SerializeObject(building.Marker, Formatting.Indented); dbObject.Location.Name = building.Name; } try { await db.SaveChangesAsync(); building.Id = dbObject.fkLocationId; } catch (Exception) { return(false); } } var cache = new Caching(); await cache.UpdateAsync <CachedLocationsContainer>("LOCATIONS", container => { var current = container.Buildings.FirstOrDefault(b => b.Id == building.Id); if (current != null) { current.Description = building.Description; current.Marker = building.Marker; current.Shape = building.Shape; current.Name = building.Name; current.OuCode = building.OuCode; } else { container.Buildings.Add(building); } return(Task.FromResult(container)); }, new TimeSpan(0, 1, 0)); return(true); }