public void AddCustomerReviewAssessment(string customerReviewId, CustomerReviewAssessmentRequest customerReviewAssessment)
        {
            using (var customerReviewRepository = _customerReviewRepositoryFactory())
                using (var changeTracker = GetChangeTracker(customerReviewRepository))
                {
                    var review = customerReviewRepository.GetReviewWithAssessmentsById(customerReviewId);
                    if (review == null)
                    {
                        throw new ObjectNotFoundException($"Customer review with id = {customerReviewId} not found");
                    }

                    var newAssessment = AbstractTypeFactory <CustomerReviewAssessmentEntity> .TryCreateInstance().FromModel(customerReviewAssessment);

                    changeTracker.Attach(review);
                    review.CustomerReviewAssessments.Add(newAssessment);

                    // Let's pretend I've got a validation here.
                    if (newAssessment.IsLike)
                    {
                        review.LikesNumber++;
                    }
                    else
                    {
                        review.DislikesNumber++;
                    }

                    CommitChanges(customerReviewRepository);

                    // This calculation should be processed in job.
                    CalculateRating(customerReviewRepository, review);
                }
        }
        public virtual CustomerReviewAssessmentEntity FromModel(CustomerReviewAssessmentRequest customerReviewAssessment)
        {
            if (customerReviewAssessment == null)
            {
                throw new ArgumentException(nameof(customerReviewAssessment));
            }

            AuthorNickname = customerReviewAssessment.AuthorNickname;
            IsLike         = customerReviewAssessment.IsLike;

            CreatedDate = customerReviewAssessment.CreatedDate;

            return(this);
        }
Example #3
0
 public IHttpActionResult AddAssessment([FromUri] string reviewId, CustomerReviewAssessmentRequest assessment)
 {
     _customerReviewService.AddCustomerReviewAssessment(reviewId, assessment);
     return(StatusCode(HttpStatusCode.NoContent));
 }