Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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));
                }
            }
        }