/// <summary> /// Add review to executor. /// </summary> /// <param name="review">Review to add.</param> /// <param name="currentUserId">Id of current user.</param> /// <returns> /// Added review. /// </returns> /// <exception cref="System.ArgumentException">When one of params invalid.</exception> /// <exception cref="System.UnauthorizedAccessException">User not permissions.</exception> public async Task <Review> AddReview(Review review, long currentUserId) { review.CheckArgumentException(); var user = await _userRepository.GetAsync(currentUserId); var order = await _orderRepository.GetAsync(review.OrderId); order = order.CustomerId == user.Id ? order : throw new UnauthorizedAccessException(); return(await _reviewRepository.AddAsync(review)); }