Example #1
0
        public async Task <ActionResult <InstructorRatingResponse> > getInstructorRating(string instructor)
        {
            Users instructorUser = await userRepository.getUser(instructor);

            if (instructorUser == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "Instructor not found!"));
            }

            if (instructorUser.UserType != UserTypes.Instructor)
            {
                return(StatusCode(StatusCodes.Status403Forbidden, "User specified is not an instructor!"));
            }

            InstructorRating rating = await instructorRatingRepository.getRating(instructor);

            InstructorRatingResponse response = new InstructorRatingResponse();

            if (rating == null)
            {
                response.instructor  = instructor;
                response.ratingCount = 0;
                response.ratingSum   = 0;
            }
            else
            {
                response.instructor  = rating.InstructorUsernameForeignKey;
                response.ratingCount = rating.RatingCount;
                response.ratingSum   = rating.RatingSum;
            }

            return(Ok(response));
        }
Example #2
0
        public async Task <ActionResult <InstructorRatingResponse> > rateInstructor(InstructorRatingRequest request)
        {
            if (request.username == request.instructor)
            {
                return(StatusCode(StatusCodes.Status403Forbidden, "Instructors cannot rate themselves!"));
            }

            Users user = await userRepository.getUser(request.username);

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "User attempting to make the rating does not exist!"));
            }

            Users instructor = await userRepository.getUser(request.instructor);

            if (instructor == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "Instructor not found!"));
            }

            if (instructor.UserType != UserTypes.Instructor)
            {
                return(StatusCode(StatusCodes.Status403Forbidden, "The user you're trying to rate is not an instructor!"));
            }

            if (user.GymIdForeignKey != instructor.GymIdForeignKey)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "You cannot rate an instructor from another gym!"));
            }

            if (request.rating > 5 || request.rating < 0)
            {
                return(StatusCode(StatusCodes.Status400BadRequest, "Rating provided is out of allowed range!"));
            }

            InstructorRating rating = await instructorRatingRepository.getRating(instructor.Username);

            if (rating == null)
            {
                rating = new InstructorRating();
                rating.InstructorUsernameForeignKey = instructor.Username;
                rating.RatingCount = 0;
                rating.RatingSum   = 0;

                if (!(await instructorRatingRepository.addRating(rating)))
                {
                    return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong creating the rating record for the instructor!"));
                }
            }

            rating.RatingCount++;
            rating.RatingSum += request.rating;

            if (await instructorRatingRepository.rateClass(rating))
            {
                InstructorRatingResponse response = new InstructorRatingResponse();

                response.instructor  = rating.InstructorUsernameForeignKey;
                response.ratingCount = rating.RatingCount;
                response.ratingSum   = rating.RatingSum;

                return(Ok(response));
            }
            else
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong adding your rating to the database!"));
            }
        }