public IHttpActionResult CreateRestaurants(RestaurantsBindingModel m)
        {
            if (!ModelState.IsValid)
                return this.BadRequest();

            var restaurant = new Restaurant
            {
                Name = m.Name,
                TownId = m.TownId,
                OwnerId = User.Identity.GetUserId()
            };

            var townName = this.Data.Towns.FirstOrDefault(t => t.Id == m.TownId).Name;

            this.Data.Restaurants.Add(restaurant);

            this.Data.SaveChanges();

            //Hardcoded location because CreatedAtRoute kept throwing some kind of stupid exception.
            //My code is bad and I should feel bad... But Hey, it works! 
            return this.Created("http://localhost:1337/api/restaurants/" + restaurant.Id, new
            {
                id = restaurant.Id,
                name = restaurant.Name,
                rating = (Rating)null,
                town = new 
                {
                    id = restaurant.TownId,
                    name = townName
                }
            });
        }
        public IHttpActionResult CreateNewRestaurant([FromBody]RestaurantBindingModel model)
        {
            if (model == null)
            {
                return BadRequest("Missing restraunt data.");
            }

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var currentUserId = User.Identity.GetUserId();
            var currentUser = db.Users.Find(currentUserId);

            var restrauntToPost = new Restaurant()
            {
                Name = model.Name,
                TownId = int.Parse(model.TownId),
                OwnerId = currentUserId
            };

            db.Restaurants.Add(restrauntToPost);
            db.SaveChanges();

            return this.CreatedAtRoute(
                "DefaultApi",
                new { controller = "restaurants", id = restrauntToPost.Id },
                new { restrauntToPost.Id, restrauntToPost.Name });
        }
        public IHttpActionResult PostRestaurant(RestaurantBindingModel restaurant)
        {
            if (!ModelState.IsValid || restaurant == null)
            {
                return BadRequest(ModelState);
            }

            var userId = this.User.Identity.GetUserId();
            var restaurantToAdd = new Restaurant()
            {
                Name = restaurant.Name,
                TownId = restaurant.TownId,
                OwnerId = userId
            };

            db.Restaurants.Add(restaurantToAdd);
            db.SaveChanges();

            var rvm = new RestaurantViewModel()
            {
                Id = restaurantToAdd.Id,
                Name = restaurantToAdd.Name,
                Rating = null,
                Town = new TownViewModel()
                {
                    Id = restaurantToAdd.TownId,
                    Name = db.Towns.FirstOrDefault(t => t.Id == restaurantToAdd.TownId).Name
                }
            };

            return CreatedAtRoute("DefaultApi", new { id = rvm.Id }, rvm);
        }
        public void EditMeal_NonExistingMeal_ShouldNotReturnMealForEditing()
        {
            using (var dbContext = new RestaurantsContext())
            {
                var httpTestServer = TestServer.Create(appBuilder =>
                {
                    var config = new HttpConfiguration();
                    WebApiConfig.Register(config);
                    appBuilder.UseWebApi(config);
                });

                // Arrange

                // Clean Database
                CleanDatabase();

                // Create restaurant

                var restaurant = new Restaurant()
                {
                    Id = 1,
                    Name = "Gurlata",
                    TownId = 1
                };

                // Create meal
                var meal = new Meal()
                {
                    Id = 1,
                    Name = "Shish kebab",
                    Price = 18.2m,
                    TypeId = 3,
                    RestaurantId = 1
                };

                // Act -> add restaurant and meal to database

                dbContext.Restaurants.Add(restaurant);
                dbContext.Meals.Add(meal);
                dbContext.SaveChanges();

                var mealWithNonExistingId = dbContext.Meals
                    .Where(m => m.Id == meal.Id + 1);

                // Assert -> check if non existing meal returns not found

                var fakeMealId = meal.Id + 1;

                var fakeMeal = dbContext.Meals.Find(fakeMealId);

                Assert.IsNull(fakeMeal);

                CleanDatabase();
            }
        }
 private static int CalculateSumOfRatings(Restaurant currentRestaurant)
 {
     var ratings = currentRestaurant.Ratings
         .Select(r => r.Stars)
         .ToList();
     int sum = 0;
     foreach (var rating in ratings)
     {
         sum += rating;
     }
     return sum;
 }
 public static RestaurantViewModel CreateSingle(Restaurant restaurant)
 {
     return new RestaurantViewModel
     {
         Id = restaurant.Id,
         Name = restaurant.Name,
         Rating = null,
         Town = new TownViewModel
         {
             Id = restaurant.TownId,
             Name = restaurant.Town.Name
         }
     };
 }
        public IHttpActionResult CreateRestaurant(RestaurantBindingModel restaurantModel)
        {
            var loggedUserId = this.UserIdProvider.GetUserId();
            if (loggedUserId == null)
            {
                return this.Unauthorized();
            }

            var loggedUser = this.Data.ApplicationUsers.All()
                .FirstOrDefault(u => u.Id == loggedUserId);

            if (restaurantModel == null)
            {
                return this.BadRequest();
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            var existingTown = this.Data.Towns.All()
                .FirstOrDefault(t => t.Id == restaurantModel.TownId);
            if (existingTown == null)
            {
                return this.NotFound();
            }

            var newRestaurant = new Restaurant
            {
                Name = restaurantModel.Name,
                TownId = restaurantModel.TownId,
                Town = existingTown,
                OwnerId = loggedUserId,
                Owner = loggedUser
            };

            this.Data.Restaurants.Add(newRestaurant);
            existingTown.Restaurants.Add(newRestaurant);
            this.Data.SaveChanges();

            return this.CreatedAtRoute(
                "DefaultApi",
                new
                {
                    Id = newRestaurant.Id,
                    Controller = "restaurants"
                },
                RestaurantViewModel.CreateSingle(newRestaurant));
        }
        public IHttpActionResult CreateNewRestaurant(RestourantBindingModel restourantModel)
        {
            if (restourantModel == null)
            {
                return this.BadRequest("Invalid restaurant data.");
            }

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var currentUserId = User.Identity.GetUserId();

            if (currentUserId == null)
            {
                return this.Unauthorized();
            }

            var town = db.Towns.FirstOrDefault(t => t.Id == restourantModel.TownId);

            var restaurant = new Restaurant()
            {
                Name = restourantModel.Name,
                Town = town,
                OwnerId = currentUserId
            };

            db.Restaurants.Add(restaurant);
            db.SaveChanges();

            return CreatedAtRoute(
                    "DefaultApi",
                    new
                    {
                        id = restaurant.Id
                    },
                    new RestourantOutputModel()
                    {
                        Id = restaurant.Id,
                        Name = restaurant.Name,
                        Rating = null,
                        Town = new TownOutputModel() { Id = restaurant.TownId, Name = restaurant.Town.Name}
                    });
        }
        public IHttpActionResult CreateRestaurant([FromBody]RestaurantBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest("Model cannot be null (no data in request)");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            var loggedUserId = this.User.Identity.GetUserId();
            var user = this.Data.Users.Find(loggedUserId);

            if (user == null)
            {
                return this.Unauthorized();
            }

            var town = this.Data.Towns.Find(model.TownId);

            var restaurant = new Restaurant()
            {
                Name = model.Name,
                Owner = user,
                OwnerId = loggedUserId,
                TownId = model.TownId,
                Town = town
            };

            this.Data.Restaurants.Add(restaurant);
            this.Data.SaveChanges();

            return this.CreatedAtRoute(
                "DefaultApi",
                new {controller = "restaurans", id = restaurant.Id},
                new
                {
                    id = restaurant.Id,
                    name = restaurant.Name,
                    rating = (restaurant.Ratings.Any()) ?restaurant.Ratings.Average(r => r.Stars) : null,
                    town = new {id = restaurant.TownId, name = restaurant.Town.Name}
                });
        }
        public IHttpActionResult AddRestaurant(AddRestaurantBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest("No data was sent.");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            var town = this.Data.Towns.Find(model.TownId);
            if (town == null)
            {
                return this.BadRequest("Invalid town id: " + model.TownId);
            }

            var loggedUserId = this.User.Identity.GetUserId();

            var restaurant = new Restaurant
            {
                Name = model.Name,
                TownId = town.Id,
                OwnerId = loggedUserId
            };

            this.Data.Restaurants.Add(restaurant);
            this.Data.SaveChanges();

            var restaurantData = this.Data.Restaurants.All()
                .Where(r => r.Id == restaurant.Id)
                .Select(RestaurantViewModel.Create)
                .FirstOrDefault();

            return this.CreatedAtRoute(
                "DefaultApi",
                new { controller = "restaurants", id = restaurant.Id }, 
                restaurantData);
        }
        public IHttpActionResult PutRestaurant(int id, Restaurant restaurant)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var currentUser = User.Identity.IsAuthenticated;

            if(!currentUser)
            {
                return this.Unauthorized();
            }

            if (id != restaurant.Id)
            {
                return BadRequest();
            }

            db.Entry(restaurant).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RestaurantExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }
        public IHttpActionResult CreateRestaurant(RestaurantBindingModel restaurantBindingModel)
        {
            var ownerId = this.User.Identity.GetUserId();

            if (restaurantBindingModel == null)
            {
                return this.BadRequest("Data is missing");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            var newRestaurant = new Restaurant
                {
                    Name = restaurantBindingModel.Name, 
                    TownId = restaurantBindingModel.TownId, 
                    OwnerId = ownerId
                };

            this.Data.Restaurants.Add(newRestaurant);
            this.Data.SaveChanges();

            var restaurantView = this.Data.Restaurants.GetAll()
                .Where(r => r.Id == newRestaurant.Id)
                .Select(RestaurantViewModel.Create())
                .FirstOrDefault();

            var uriLocation = new
                {
                    controller = "restaurants", 
                    id = newRestaurant.Id
                };

            return this.CreatedAtRoute("DefaultApi", uriLocation, restaurantView);
        }
Esempio n. 13
0
        public IHttpActionResult CreateRestaurant(CreateRestaurantBindingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            if (model == null)
            {
                return this.BadRequest("Model cannot be null.");
            }

            var town = this.Data.Towns.All()
                .FirstOrDefault(t => t.Id == model.TownId);

            if (town == null)
            {
                return this.NotFound();
            }

            var restaurant = new Restaurant
            {
                Name = model.Name,
                TownId = model.TownId,
                OwnerId = this.User.Identity.GetUserId()
            };

            this.Data.Restaurants.Add(restaurant);
            this.Data.SaveChanges();

            var restaurantViewModel = this.Data.Restaurants.All()
                .Where(r => r.Id == restaurant.Id)
                .Select(RestaurantViewModel.Create)
                .FirstOrDefault();

            return this.Created($"api/Restaurants/{restaurant.Id}", restaurantViewModel);
        }
        public IHttpActionResult PostNewRestaurant(RestaurantInputModel restaurantData)
        {
            var currentUserId = User.Identity.GetUserId();
            if (!ModelState.IsValid)
            {
                return this.BadRequest();
            }
            if (currentUserId == null)
            {
                return this.Unauthorized();
            }

            var newRestaurant = new Restaurant()
            {
                Name = restaurantData.Name,
                TownId = restaurantData.TownId,
                OwnerId = currentUserId
            };
            this.Data.Restaurants.Add(newRestaurant);
            this.Data.SaveChanges();

            return this.CreatedAtRoute(
                "DefaultApi",
                new { id = newRestaurant.Id},
                new
                {
                    id = newRestaurant.Id,
                    name = newRestaurant.Name,
                    rating = (double?)null,
                    town = this.Data.Towns.Where(t => t.Id == restaurantData.TownId).Select(t => new
                    {
                        id = t.Id,
                        name = t.Name
                    })
                });
        }
        public void EditMeal_WithEmptyMealName_ShouldNotAllowMealEdition()
        {
            using (var dbContext = new RestaurantsContext())
            {
                var httpTestServer = TestServer.Create(appBuilder =>
                {
                    var config = new HttpConfiguration();
                    WebApiConfig.Register(config);
                    appBuilder.UseWebApi(config);
                });

                // Arrange

                // Clean Database
                CleanDatabase();

                // Create restaurant

                var restaurant = new Restaurant()
                {
                    Id = 1,
                    Name = "Gurlata",
                    TownId = 1
                };

                // Create meal
                var meal = new Meal()
                {
                    Id = 1,
                    Name = "Gozba",
                    Price = 18.2m,
                    TypeId = 3,
                    RestaurantId = 1
                };

                // Act -> add restaurant and meal to database

                dbContext.Restaurants.Add(restaurant);
                dbContext.Meals.Add(meal);
                dbContext.SaveChanges();

                var mealFromDb = dbContext.Meals.Find(meal.Id);

                mealFromDb.Name = "";
                dbContext.SaveChanges();

                CleanDatabase();
            }
        }
        public IHttpActionResult PostRestaurant(RestaurantBindingModel restaurantData)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var townName = db.Towns
                .Where(t => t.Id == restaurantData.TownId)
                .Select(t => t.Name).FirstOrDefault();

            if(townName == null || string.IsNullOrEmpty(restaurantData.Name))
            {
                this.BadRequest();
            }

            var currentUser = User.Identity.IsAuthenticated;
            var userName = User.Identity.Name;

            if (!currentUser)
            {
                return this.Unauthorized();
            }

            var userId = db.Users
                .Where(u => u.UserName == userName)
                .Select(u => u.Id).FirstOrDefault();

            var restaurant = new Restaurant()
            {
                Name = restaurantData.Name,
                TownId = restaurantData.TownId,
                OwnerId = userId
            };

            db.Restaurants.Add(restaurant);
            db.SaveChanges();

            Rating ratingRestaurant = null;

            return this.CreatedAtRoute(
                    "DefaultApi",
                    new { id = restaurant.Id },
                    new { id = restaurant.Id, name = restaurant.Name, rating = ratingRestaurant,
                        town = new
                        {
                            id = restaurantData.TownId, name = townName
                        }
                    });
        }
        public IHttpActionResult CreateRestaurant(RestaurantBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest();
            }

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var currUserId = User.Identity.GetUserId();
            var currUser = db.Users.Find(currUserId);
            var town = db.Towns.All().FirstOrDefault(t => t.Id == model.TownId);

            var restaurant = new Restaurant()
            {
                Name = model.Name,
                Town = town,
                Owner = currUser
            };

            var restaurantViewModel = new RestaurantViewModel()
            {
                Id = restaurant.Id,
                Name = restaurant.Name,
                Rating = (restaurant.Ratings.Any()) ? restaurant.Ratings.Average(r => r.Stars) : (double?) null,
                Town = new TownViewModel()
                {
                    Id = town.Id,
                    Name = town.Name
                }
            };

            db.Restaurants.Add(restaurant);
            db.SaveChanges();

            return this.Created("http://localhost:1337/api/restaurants/" + restaurant.Id, restaurantViewModel);
        }
        public IHttpActionResult CreateRestaurant(
            [FromBody] CreateRestaurantBindingModel model)
        {
            if (model == null)
            {
                return this.BadRequest("Model cannot be null (no data in request)");
            }

            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }
            string loggedUserId = this.User.Identity.GetUserId();

            var restaurant = new Restaurant()
            {
                Name = model.Name,
                TownId = model.TownId,
                OwnerId = loggedUserId
            };
            this.Data.Restaurants.Add(restaurant);
            this.Data.SaveChanges();

            var data = this.Data.Restaurants.All()
                .Where(r => r.Id == restaurant.Id)
                .Select(RestaurantViewModel.Create)
                .FirstOrDefault();

            return this.CreatedAtRoute(
                "DefaultApi",
                new { controller = "restaurants", id = restaurant.Id },
                data);
        }
        public IHttpActionResult PostRestaurant(RestaurantBindingModel restaurant)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (!User.Identity.IsAuthenticated)
            {
                return Unauthorized();
            }

            var currentUserId = User.Identity.GetUserId();
            var currentUser = db.Users.Find(currentUserId);

            Restaurant newRestaurant = new Restaurant()
            {
                Name = restaurant.Name,
                Town = db.Towns.Find(int.Parse(restaurant.TownId)),
                TownId = int.Parse(restaurant.TownId),
                Owner = currentUser,
                OwnerId = currentUserId
            };

            db.Restaurants.Add(newRestaurant);
            db.SaveChanges();

            return CreatedAtRoute("DefaultApi",
                new { controller = "restaurants", id = newRestaurant.Id },
                new RestaurantViewModel()
            {
                Id = newRestaurant.Id,
                Name = newRestaurant.Name,
                Rating = null,
                Town = new TownViewModel()
                {
                    Id = newRestaurant.Town.Id,
                    Name = newRestaurant.Town.Name
                }
            });
        }