Пример #1
0
        public async Task <ActionResult <ClassRatingResponse> > getClassRating(int classid)
        {
            GymClasses gymClass = await classRepository.getClassById(classid);

            if (gymClass == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "Specified class does not exist!"));
            }

            ClassRating rating = await classRatingRepository.getRating(classid);

            ClassRatingResponse response = new ClassRatingResponse();

            if (rating == null)
            {
                response.classId     = classid;
                response.ratingCount = 0;
                response.ratingSum   = 0;
            }
            else
            {
                response.classId     = rating.ClassIdForeignKey;
                response.ratingCount = rating.RatingCount;
                response.ratingSum   = rating.RatingSum;
            }

            return(Ok(response));
        }
Пример #2
0
        public async Task <ActionResult <ClassRatingResponse> > rateClass(ClassRatingRequest request)
        {
            /* Validate User Exists */
            Users user = await userRepository.getUser(request.username);

            if (user == null)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "User specified is not a valid user!"));
            }

            /* Validate Class Exists */
            GymClasses gymClass = await classRepository.getClassById(request.classId);

            if (gymClass == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound, "Specified class does not exist!"));
            }

            /* Validate From Same Gym */
            if (gymClass.GymIdForeignKey != user.GymIdForeignKey)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "User rating the class is not from the same gym as the class!"));
            }

            /* Validate Not Instructor Of Class */
            if (gymClass.InstructorUsername == user.Username)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, "Instructors cannot rate their own classes!"));
            }

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

            /* Check if existing rating record exists */
            ClassRating rating = await classRatingRepository.getRating(request.classId);

            if (rating == null)
            {
                rating = new ClassRating();

                rating.ClassIdForeignKey = request.classId;
                rating.RatingCount       = 0;
                rating.RatingCount       = 0;

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

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

            if (!(await classRatingRepository.rateClass(rating)))
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Something went wrong adding your rating to the database!"));
            }

            ClassRatingResponse response = new ClassRatingResponse();

            response.classId     = rating.ClassIdForeignKey;
            response.ratingCount = rating.RatingCount;
            response.ratingSum   = rating.RatingSum;

            return(Ok(response));
        }