public async Task <IHttpActionResult> PostParking(Models.Outgoing.Map.Parking parking) { using (var db = DbHelper.GetDb()) { Models.DB.Parking dbObject; if (parking.Id == null) { var dbLocation = new Models.DB.Location() { Description = parking.Description, MarkerData = JsonConvert.SerializeObject(parking.Marker, Formatting.Indented), Name = parking.Name, }; var dbParking = new Models.DB.Parking() { GeoData = JsonConvert.SerializeObject(parking.Shape, Formatting.Indented), ParkingCode = parking.OuCode, SpaceCount = parking.SpaceCount, HandicapCount = parking.HandicappedCount }; foreach (var typeName in parking.ParkingTypes) { var parkingType = db.ParkingTypes.FirstOrDefault(pt => pt.Name == typeName); if (parkingType == null) { return(Content(HttpStatusCode.BadRequest, $"Parking Type: {typeName} not a valid type")); } else { dbParking.ParkingTypes.Add(parkingType); } } dbLocation.Parking = dbParking; db.Locations.Add(dbLocation); } else { dbObject = db.Parkings.Include(p => p.Location).FirstOrDefault(p => p.fkLocationId == parking.Id); if (dbObject == null) { return(Content(HttpStatusCode.BadRequest, $"Building with id {parking.Id} not found")); } dbObject.ParkingCode = parking.OuCode; dbObject.Location.Description = parking.Description; dbObject.Location.GeoData = JsonConvert.SerializeObject(parking.Shape, Formatting.Indented); dbObject.Location.MarkerData = JsonConvert.SerializeObject(parking.Marker, Formatting.Indented); dbObject.Location.Name = parking.Name; dbObject.SpaceCount = parking.SpaceCount; dbObject.HandicapCount = parking.HandicappedCount; foreach (var typeName in parking.ParkingTypes) { var parkingType = db.ParkingTypes.FirstOrDefault(pt => pt.Name == typeName); if (parkingType == null) { return(Content(HttpStatusCode.BadRequest, $"Parking Type: {typeName} not a valid type")); } else { dbObject.ParkingTypes.Add(parkingType); } } } return(Ok(await db.SaveChangesAsync())); } }
public static async Task <bool> SaveParking(Models.Outgoing.Map.Parking parking) { using (var db = DbHelper.GetDb()) { Parking dbObject; if (parking.Id == null) { var dbLocation = new Location() { Description = parking.Description, MarkerData = JsonConvert.SerializeObject(parking.Marker, Formatting.Indented), Name = parking.Name }; dbObject = new Parking() { ParkingCode = parking.OuCode, GeoData = JsonConvert.SerializeObject(parking.Shape, Formatting.Indented), }; dbLocation.Parking = dbObject; db.Locations.Add(dbLocation); } else { dbObject = db.Parkings.Include(b => b.Location).FirstOrDefault(b => b.fkLocationId == parking.Id); if (dbObject == null) { return(false); } dbObject.ParkingCode = parking.OuCode; dbObject.Location.Description = parking.Description; dbObject.Location.GeoData = JsonConvert.SerializeObject(parking.Shape, Formatting.Indented); dbObject.Location.MarkerData = JsonConvert.SerializeObject(parking.Marker, Formatting.Indented); dbObject.Location.Name = parking.Name; } try { await db.SaveChangesAsync(); parking.Id = dbObject.fkLocationId; } catch (Exception) { return(false); } } var cache = new Caching(); await cache.UpdateAsync <CachedLocationsContainer>("LOCATIONS", container => { var current = container.Parkings.FirstOrDefault(b => b.Id == parking.Id); if (current != null) { current.Description = parking.Description; current.Marker = parking.Marker; current.Shape = parking.Shape; current.Name = parking.Name; current.OuCode = parking.OuCode; } else { container.Parkings.Add(parking); } return(Task.FromResult(container)); }, new TimeSpan(0, 1, 0)); return(true); }