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(); }