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)));
        }
Exemplo n.º 3
0
        /// <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."));
        }
Exemplo n.º 5
0
 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
     });
 }
Exemplo n.º 6
0
        /// <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);
        }