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