public async Task <ActionResult <Review> > PostReview(Review review) { Core.Models.Review addedReview = await _repository.PostReviewAsync(Mapper.MapReview(review)); if (addedReview == null) { return(BadRequest($"Unable to add new review.")); } return(CreatedAtAction("GetReview", new { id = review.Id }, review)); }
public async Task <ActionResult <Review> > GetReview(int id) { Core.Models.Review review = await _repository.GetReviewAsync(id); if (review == null) { return(NotFound()); } return(Ok(Mapper.MapReview(review))); }
/// <summary> /// Adds a new Review to the DB. /// </summary> /// <param name="review"></param> /// <returns>The review that was added</returns> public async Task <Core.Models.Review> PostReviewAsync(Core.Models.Review review) { var user = await _dbContext.Users.FirstOrDefaultAsync(u => u.Id == review.UserId); var hospital = await _dbContext.Hospitals.FirstOrDefaultAsync(h => h.Id == review.HospitalId); if (user is null || hospital is null) { _logger.LogInformation($"Couldn't find hospital with ID {review.HospitalId} and/or user with ID {review.UserId}."); return(null); } /*if (!(await _dbContext.Reviews.FirstOrDefaultAsync(r => r.UserId == user.Id && r.HospitalId == hospital.Id) is null)) * { * _logger.LogInformation($"User with id {review.UserId} already placed a review at hospital with id {review.HospitalId}."); * return null; * }*/ Review newReview = new Review { UserId = review.UserId, HospitalId = review.HospitalId, MedicalStaffRating = review.MedicalStaffRating, ClericalStaffRating = review.ClericalStaffRating, FacilityRating = review.FacilityRating, OverallRating = (review.MedicalStaffRating + review.ClericalStaffRating + review.FacilityRating) / 3.0, WrittenFeedback = review.WrittenFeedback, Reason = review.Reason, ReasonOther = review.ReasonOther, DateAdmittance = review.DateAdmittance, }; _logger.LogInformation($"Added a review from user with id {review.UserId} to hospital with id {review.HospitalId} to DB."); _dbContext.Reviews.Add(newReview); await _dbContext.SaveChangesAsync(); var updatedHospital = await _dbContext.Hospitals.Include(h => h.Reviews).FirstOrDefaultAsync(h => h.Id == review.HospitalId); updatedHospital.Reviews.Add(newReview); var updatedUser = await _dbContext.Users.Include(r => r.Reviews).FirstOrDefaultAsync(r => r.Id == review.UserId); updatedHospital.Reviews.Add(newReview); updatedUser.Reviews.Add(newReview); UpdateAggregateRatings(updatedHospital); // Update the hospital's aggregate ratings after adding a new review. await _dbContext.SaveChangesAsync(); var resultReview = await _dbContext.Reviews.FirstOrDefaultAsync(r => r.Id == newReview.Id); return(Mapper.MapReview(resultReview)); }
public async Task <IActionResult> PutReview(int id, Review review) { if (id != review.Id) { return(BadRequest()); } Core.Models.Review updatedReview = await _repository.PutReviewAsync(id, Mapper.MapReview(review)); if (updatedReview == null) { return(BadRequest($"Review with ID {id} was not found.")); } return(Ok($"Review with ID {id} was successfully updated.")); }
public static Review MapReview(Core.Models.Review review) { return(review is null ? null : new Review { Id = review.Id, UserId = review.UserId, HospitalId = review.HospitalId, MedicalStaffRating = review.MedicalStaffRating, ClericalStaffRating = review.ClericalStaffRating, FacilityRating = review.FacilityRating, OverallRating = review.OverallRating, WrittenFeedback = review.WrittenFeedback, DateSubmitted = review.DateSubmitted, DateAdmittance = review.DateAdmittance, Reason = review.Reason, ReasonOther = review.ReasonOther }); }
/// <summary> /// Update a review /// </summary> /// <param name="id"></param> /// <param name="review"></param> /// <returns>Returns the review after updated</returns> public async Task <Core.Models.Review> PutReviewAsync(int id, Core.Models.Review review) { var reviewExists = await _dbContext.Reviews.FindAsync(id); if (reviewExists == null) { _logger.LogInformation($"Unable to update review with id {id} because it was not found."); return(null); } Review changedReview = new Review { Id = reviewExists.Id, UserId = reviewExists.UserId, HospitalId = reviewExists.HospitalId, MedicalStaffRating = review.MedicalStaffRating, ClericalStaffRating = review.ClericalStaffRating, FacilityRating = review.FacilityRating, OverallRating = (review.MedicalStaffRating + review.ClericalStaffRating + review.FacilityRating) / 3.0, DateAdmittance = review.DateAdmittance, DateSubmitted = reviewExists.DateSubmitted, WrittenFeedback = review.WrittenFeedback, Reason = review.Reason, ReasonOther = review.ReasonOther }; _logger.LogInformation($"Updating review with id {id}."); _dbContext.Entry(reviewExists).CurrentValues.SetValues(changedReview); await _dbContext.SaveChangesAsync(); var updatedHospital = await _dbContext.Hospitals.Include(h => h.Reviews).FirstOrDefaultAsync(h => h.Id == review.HospitalId); UpdateAggregateRatings(updatedHospital); // Update the hospital's aggregate ratings after adding a new review. await _dbContext.SaveChangesAsync(); return(review); }