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); }
public IHttpActionResult AddAssessment([FromUri] string reviewId, CustomerReviewAssessmentRequest assessment) { _customerReviewService.AddCustomerReviewAssessment(reviewId, assessment); return(StatusCode(HttpStatusCode.NoContent)); }