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);
        }
        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
                        }
                    });
        }
        private void PopulateDatabase()
        {
            // Register
            this.Register("uti");
            this.Register("guest");

            // Login
            var loginData = this.Login("uti");

            this.client.DefaultRequestHeaders.Add("Authorization", "Bearer " + loginData.Access_Token);

            // Create Restaurant
            var restaurant = new RestaurantBindingModel
                {
                    Name = "Pri uti", 
                    TownId = 2
                };

            var restaurantBody = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("name", restaurant.Name), 
                    new KeyValuePair<string, string>("townId", restaurant.TownId.ToString())
                });

            var restaurantResponse = this.client.PostAsync("api/restaurants", restaurantBody).Result;
            var restaurantId = restaurantResponse.Content.ReadAsAsync<RestaurantViewModel>().Result.Id;

            // Create Meals
            var mealOne = new CreateMealBindingModel
                {
                    Name = "musaka", 
                    Price = 4.5M, 
                    TypeId = 3, 
                    RestaurantId = restaurantId
                };

            var mealTwo = new CreateMealBindingModel
                {
                    Name = "tarator", 
                    Price = 2.5M, 
                    TypeId = 2, 
                    RestaurantId = restaurantId
                };

            var mealOneBody = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("name", mealOne.Name), 
                    new KeyValuePair<string, string>("price", mealOne.Price.ToString(CultureInfo.InvariantCulture)), 
                    new KeyValuePair<string, string>("typeId", mealOne.TypeId.ToString()), 
                    new KeyValuePair<string, string>("restaurantId", mealOne.RestaurantId.ToString())
                });

            var mealTwoBody = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("name", mealTwo.Name), 
                    new KeyValuePair<string, string>("price", mealTwo.Price.ToString(CultureInfo.InvariantCulture)), 
                    new KeyValuePair<string, string>("typeId", mealTwo.TypeId.ToString()), 
                    new KeyValuePair<string, string>("restaurantId", mealTwo.RestaurantId.ToString())
                });

            var mealOneResponse = this.client.PostAsync("api/meals", mealOneBody).Result;
            var mealTwoResponse = this.client.PostAsync("api/meals", mealTwoBody).Result;

            // Clean headers
            this.client.DefaultRequestHeaders.Remove("Authorization");
        }