public async Task <IActionResult> RatingAndComment(BasketRatingAndComment request) { var model = new BasketRatingAndCommentDto() { Id = request.Id, UserId = request.UserId }; foreach (var rec in request.BasketInventoryRatingAndComments) { var basketInventoryRatingAndComment = new BasketInventoryRatingAndCommentDto() { Id = rec.Id, DishId = rec.DishId, Comment = rec.Comment, Rating = rec.Raiting }; model.BasketInventoryRatingAndCommentDtos.Add(basketInventoryRatingAndComment); } var result = await _service.RatingAndCommentAsync(model); if (result.IsSuccess) { return(RedirectToAction("Index")); } else { foreach (var resultError in result.Errors) { ModelState.AddModelError("Error", resultError); } return(View(request)); } }
public async Task <EntityOperationResult <Basket> > RatingAndCommentAsync(BasketRatingAndCommentDto basketRatingAndCommentDto) { using (var unitOfWork = _unitOfWorkFactory.MakeUnitOfWork()) { try { var basket = unitOfWork.Basket.GetById(basketRatingAndCommentDto.Id); foreach (var rec in basketRatingAndCommentDto.BasketInventoryRatingAndCommentDtos) { var paitings = unitOfWork.Ratings.GetRating(basketRatingAndCommentDto.UserId, rec.Id); if (paitings == null && rec.Rating > 0) { var dish = unitOfWork.Dish.GetById(rec.DishId); dish.RatingTotal += rec.Rating; dish.RatingCount += 1; dish.RatingAverage = (dish.RatingCount != 0) ? (int)(dish.RatingTotal / dish.RatingCount) : 0; unitOfWork.Dish.Update(dish); await unitOfWork.CompleteAsync(); var rating = new Rating(); rating.UserId = basketRatingAndCommentDto.UserId; rating.BasketInventoryId = rec.Id; rating.RatingNumber = rec.Rating; await unitOfWork.Ratings.AddAsync(rating); await unitOfWork.CompleteAsync(); } else if (paitings != null && rec.Rating == 0) { var dish = unitOfWork.Dish.GetById(rec.DishId); dish.RatingTotal -= paitings.RatingNumber; dish.RatingCount -= 1; dish.RatingAverage = (dish.RatingCount != 0) ? (int)(dish.RatingTotal / dish.RatingCount) : 0; unitOfWork.Dish.Update(dish); await unitOfWork.CompleteAsync(); unitOfWork.Ratings.Delete(paitings); await unitOfWork.CompleteAsync(); } else if (paitings != null && rec.Rating > 0 && paitings.RatingNumber != rec.Rating) { var dish = unitOfWork.Dish.GetById(rec.DishId); dish.RatingTotal -= paitings.RatingNumber; dish.RatingTotal += rec.Rating; dish.RatingAverage = (dish.RatingCount != 0) ? (int)(dish.RatingTotal / dish.RatingCount) : 0; unitOfWork.Dish.Update(dish); await unitOfWork.CompleteAsync(); paitings.RatingNumber = rec.Rating; unitOfWork.Ratings.Update(paitings); await unitOfWork.CompleteAsync(); } var comment = unitOfWork.Comments.GetComment(basketRatingAndCommentDto.UserId, rec.Id); if (comment == null && rec.Comment?.Length > 0) { var commentCreate = new Comment { BasketInventoryId = rec.Id, Text = rec.Comment, UserId = basketRatingAndCommentDto.UserId }; await unitOfWork.Comments.AddAsync(commentCreate); await unitOfWork.CompleteAsync(); } else if (comment != null && rec.Comment?.Length > 0) { comment.Text = rec.Comment; unitOfWork.Comments.Update(comment); await unitOfWork.CompleteAsync(); } else if (comment != null && (rec.Comment == null || rec.Comment?.Length == 0)) { comment.Text = rec.Comment; unitOfWork.Comments.Delete(comment); await unitOfWork.CompleteAsync(); } } return(EntityOperationResult <Basket> .Success(basket)); } catch (Exception ex) { return(EntityOperationResult <Basket> .Failure().AddError(ex.Message)); } } }