public async Task <ForumReviews> Create(ForumReviewCreateViewModel model, ReviewType reviewType, string reviewingUserId) { if (!await userManager.Users.AnyAsync(u => u.Id == reviewingUserId)) { throw new ArgumentException("Не е намерен потребителят с който сте логнати!"); } ForumReviews reviewToBeCreated; //review created by this user for this item which has to be deleted ForumReviews reviewAlreadyCreatedByThisUser; switch (reviewType) { case ReviewType.Post: if (!await PostsManager.Exists(model.ReviewedItemId)) { throw new ArgumentException("Постът, на който искате да направите ревю не съществува!"); } reviewAlreadyCreatedByThisUser = await unitOfWork.ForumReviewsRepository.GetAll() .OfType <PostReviews>() .Where(r => r.UserId == reviewingUserId && r.PostId == model.ReviewedItemId) .FirstOrDefaultAsync(); reviewToBeCreated = Mapper.Map <PostReviews>(model, opts => opts.Items.Add("UserId", reviewingUserId)); break; case ReviewType.Comment: if (!await CommentsManager.Exists(model.ReviewedItemId)) { throw new ArgumentException("Коментарът, на който искате да направите ревю не съществува!"); } reviewAlreadyCreatedByThisUser = await unitOfWork.ForumReviewsRepository.GetAll() .OfType <PostReviews>() .Where(r => r.UserId == reviewingUserId && r.PostId == model.ReviewedItemId) .FirstOrDefaultAsync(); reviewToBeCreated = Mapper.Map <CommentReviews>(model, opts => opts.Items.Add("UserId", reviewingUserId)); break; default: throw new ArgumentException("Не се поддържат Ревюта от избраният от вас тип!"); } if (reviewAlreadyCreatedByThisUser != null) { unitOfWork.ForumReviewsRepository.Delete(reviewAlreadyCreatedByThisUser); } unitOfWork.ForumReviewsRepository.Add(reviewToBeCreated); await unitOfWork.SaveAsync(); return(reviewToBeCreated); }
public async Task <ActionResult> Create(ForumReviewCreateViewModel review, string reviewedItemType) { _logger.Info("Creating Review! Params: " + (new { review, reviewedItemType }).ToJson()); if (!ModelState.IsValid) { _logger.Error("Creating Review Form Invalid! Errors: " + ModelState.ToJson()); return(Json(ModelState.ToDictionary())); } try { var createdReview = await _reviewsManager.Create(review, (ReviewType)Enum.Parse(typeof(ReviewType), reviewedItemType), User.Identity.GetUserId()); _logger.Info("Creating Review Successfully!"); return(Json(createdReview)); } catch (Exception ex) { _logger.Error(ex, "Creating Review Failed!"); throw; } }