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