Beispiel #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));
        }
        public bool CreateInstructorRating(InstructorRatingCreate model)
        {
            var ctx       = new ApplicationDbContext();
            var createdBy = ctx.Users.FirstOrDefault(u => u.Id == _userId).UserName;
            var entity    = new InstructorRating
            {
                Description  = model.Description,
                InstructorId = model.InstructorId,
                Score        = model.Score,
                //FullName = model.FullName,
                //ProgramId = model.ProgramId,
                //AcademyId = model.AcademyId,
                //AcademyName = model.AcademyName,
                OwnerId   = _userId,
                CreatedBy = createdBy
            };

            ctx.Ratings.Add(entity);
            return(ctx.SaveChanges() == 1);
            //_context.Ratings.Add(entity);
            //var changeCount = _context.SaveChangesAsync();

            //return changeCount == 1;
        }
Beispiel #3
0
 public async Task <bool> rateClass(InstructorRating rating)
 {
     context.Update(rating);
     return((await context.SaveChangesAsync()) > 0);
 }
Beispiel #4
0
 public async Task <bool> addRating(InstructorRating rating)
 {
     context.Add(rating);
     return((await context.SaveChangesAsync()) > 0);
 }
Beispiel #5
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!"));
            }
        }