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)); }
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)); }