public async Task <ActionResult <AnswerViewModel> > DeleteAnswer(int id)
        {
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            if (user == null)
            {
                return(Unauthorized());
            }

            var answer = await _context.Answers.FindAsync(id);

            if (answer == null)
            {
                return(NotFound());
            }

            var roles = await userManager.GetRolesAsync(user);

            if (answer.UserID != user.Id && roles[0] != "Admin")
            {
                return(Unauthorized());
            }

            _context.Answers.Remove(answer);
            await _context.SaveChangesAsync();

            var question = await _context.Questions.Where(x => x.ID == answer.QuestionID).FirstOrDefaultAsync();

            roles[0] = await ExpertCheck(question.SubjectID, user.Id);

            return(Mapper.AnswerToViewModel(answer, user, 0, roles[0]));
        }
        public async Task <ActionResult <QuestionViewModel> > GetQuestion(int id)
        {
            var question = await _context.Questions.Where(x => x.ID == id).FirstOrDefaultAsync();

            if (question == null)
            {
                return(NotFound());
            }

            var user = await userManager.FindByIdAsync(question.UserID);

            List <Answer> answers = await _context.Answers.Where(x => x.QuestionID == question.ID).ToListAsync();

            int endorsements;
            List <AnswerViewModel> answerViewModels = new List <AnswerViewModel>();

            foreach (Answer answer in answers)
            {
                var answerUser = await userManager.FindByIdAsync(answer.UserID);

                var rolesAnswer = await userManager.GetRolesAsync(answerUser);

                endorsements = _context.EndorsedAnswers.Where(x => x.AnswerId == answer.ID).Count();
                answerViewModels.Add(Mapper.AnswerToViewModel(answer, answerUser, endorsements, rolesAnswer[0]));
            }

            var roles = await userManager.GetRolesAsync(user);

            answerViewModels = answerViewModels.OrderByDescending(x => x.Endorsements).ToList();
            roles[0]         = await ExpertCheck(question.SubjectID, user.Id);

            return(Mapper.QuestionToViewModel(question, user, answerViewModels, null, roles[0]));
        }
        public async Task <ActionResult <AnswerViewModel> > GetAnswer(int id)
        {
            var answer = await _context.Answers.Where(x => x.ID == id).FirstOrDefaultAsync();

            var user = await userManager.FindByIdAsync(answer.UserID);

            if (answer == null)
            {
                return(NotFound());
            }

            var roles = await userManager.GetRolesAsync(user);

            var question = await _context.Questions.Where(x => x.ID == answer.QuestionID).FirstOrDefaultAsync();

            roles[0] = await ExpertCheck(question.SubjectID, user.Id);

            return(Mapper.AnswerToViewModel(answer, user, 0, roles[0]));
        }
        public async Task <ActionResult <AnswerViewModel> > PostAnswer(AnswerViewModel answerViewModel)
        {
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            if (user == null)
            {
                return(Unauthorized());
            }


            var roles = await userManager.GetRolesAsync(user);

            var answer = new Answer
            {
                UserID          = user.Id,
                DateTimeCreated = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd hh:mm")),
                AnswerContent   = answerViewModel.AnswerContent,
                QuestionID      = answerViewModel.QuestionID,
                Upvotes         = 0,
                Downvotes       = 0
            };

            var question = await _context.Questions.Where(x => x.ID == answer.QuestionID).FirstOrDefaultAsync();

            roles[0] = await ExpertCheck(question.SubjectID, user.Id);

            if (roles[0] == "Expert")
            {
                question.IsAnsweredByExpert = true;
            }

            _context.Answers.Add(answer);
            await _context.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetAnswer), new { id = answerViewModel.ID }, Mapper.AnswerToViewModel(answer, user, 0, roles[0])));
        }