Example #1
0
 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()));
     }
 }
Example #2
0
        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);
        }