public async Task <IActionResult> EditRating([FromBody] SetRatingModel setRatingModel) { var currentUser = await _userManager.GetUserAsync(User); var rubric = await _applicationDbContext.Rubrics.Include(x => x.Ratings) .SingleOrDefaultAsync(x => x.Id == setRatingModel.RubricId); if (rubric == null) { Response.StatusCode = (int)HttpStatusCode.BadRequest; return(Json("Rubric not found.")); } if (rubric.Ratings.Where(x => x.ApplicationUserId == currentUser.Id).Any()) { var rating = rubric.Ratings.First(x => x.ApplicationUserId == currentUser.Id); if (rating.Value == setRatingModel.Value) { //user undoes vote rubric.Ratings.Remove(rating); rubric.TotalRating = setRatingModel.Value ? rubric.TotalRating - 1 : rubric.TotalRating + 1; } else { //user switches directly from one vote to another rating.Value = setRatingModel.Value; rubric.TotalRating = setRatingModel.Value ? rubric.TotalRating + 2 : rubric.TotalRating - 2; } } else { await _applicationDbContext.Ratings.AddAsync(new Rating { ApplicationUserId = currentUser.Id, RubricId = setRatingModel.RubricId, Value = setRatingModel.Value }); rubric.TotalRating = setRatingModel.Value ? rubric.TotalRating + 1 : rubric.TotalRating - 1; } await _applicationDbContext.SaveChangesAsync(); var ratingValue = -1; if (rubric.Ratings.Any(x => x.ApplicationUserId == currentUser.Id)) { var rating = rubric.Ratings.First(x => x.ApplicationUserId == currentUser.Id); ratingValue = rating.Value ? 1 : 0; } return(Json(new RatingViewModel { Vote = ratingValue, TotalRating = rubric.TotalRating.HasValue ? rubric.TotalRating.Value : 0 })); }
public async Task <IActionResult> Set([FromBody] SetRatingModel setRatingModel) { try { await _ratingService.Set(_setRatingMapper.ToBlModel(setRatingModel), User.GetEmail()); return(Ok()); } catch { return(StatusCode(500)); } }