public IHttpActionResult RateRestaurants(int id, RatingBindingModel m)
        {
            if (!this.Data.Restaurants.Any(r => r.Id == id))
                return this.NotFound();

            if (this.Data.Restaurants.FirstOrDefault(r => r.Id == id).OwnerId == User.Identity.GetUserId())
                return this.BadRequest("You can't rate your own resturant.");

            if (m.Stars > 10 || m.Stars <= 0)
                return this.BadRequest("Invalid value for stars.");

            var uId = User.Identity.GetUserId();

            if (this.Data.Ratings.Any(r => r.UserId == uId && r.RestaurantId == id))
            {
                var restaurant =
                    this.Data.Ratings.FirstOrDefault(
                        r => r.UserId == uId && r.RestaurantId == id);

                restaurant.Stars = m.Stars;

                this.Data.SaveChanges();

                return this.Ok();
            }

            var rating = new Rating
            {
                RestaurantId = id,
                UserId = uId,
                Stars = m.Stars
            };

            this.Data.Ratings.Add(rating);

            this.Data.SaveChanges();

            return this.Ok();
        }
        public IHttpActionResult RateRestaurant(int restaurantId, RatingBindingModel ratingModel)
        {
            if (ratingModel == null)
            {
                return this.BadRequest("Rating data cannot be null.");
            }

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

            var loggedUserId = this.UserIdProvider.GetUserId();
            if (loggedUserId == null)
            {
                return this.Unauthorized();
            }

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

            var existingRestaurant = this.Data.Restaurants.All()
                .FirstOrDefault(r => r.Id == restaurantId);
            if (existingRestaurant == null)
            {
                return this.NotFound();
            }

            if (existingRestaurant.OwnerId == loggedUserId)
            {
                return this.BadRequest("Restaurant owner cannot rate his own restaurant.");
            }

            if (loggedUser.GivenRatings.Any(r => r.RestaurantId == restaurantId))
            {
                return this.BadRequest("Already rated that restaurant.");
            }

            var rating = new Rating
            {
                Stars = ratingModel.Stars,
                RestaurantId = restaurantId,
                Restaurant = existingRestaurant,
                User = loggedUser,
                UserId = loggedUserId
            };

            this.Data.Ratings.Add(rating);

            existingRestaurant.Ratings.Add(rating);
            loggedUser.GivenRatings.Add(rating);

            this.Data.ApplicationUsers.Update(loggedUser);
            this.Data.Restaurants.Update(existingRestaurant);

            this.Data.SaveChanges();

            return this.Ok();
        }