public async Task <IActionResult> AddQuestionComment(int questionId)
        {
            try
            {
                var question = await _repository.GetQuestionByIdWithoutDetailsAsync(questionId);

                if (question == null)
                {
                    Response.StatusCode      = 404;
                    ViewData["ErrorMessage"] = "404 Resource not found.";
                    return(View("Error"));
                }
            }
            catch (DbUpdateException dbex)
            {
                ViewData["ErrorMessage"] = "DB issue - " + dbex.Message;
                return(View("Error"));
            }
            catch (Exception ex)
            {
                ViewData["ErrorMessage"] = ex.Message;
                return(View("Error"));
            }
            var questionCommentViewModel = new QuestionCommentViewModel();

            questionCommentViewModel.QuestionId = questionId;
            return(View("AddQuestionComment", questionCommentViewModel));
        }
        public async Task <IActionResult> AddQuestionComment(QuestionCommentViewModel questionCommentViewModel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var question = await _repository.GetQuestionByIdWithoutDetailsAsync(questionCommentViewModel.QuestionId);

                    if (question == null)
                    {
                        Response.StatusCode      = 404;
                        ViewData["ErrorMessage"] = "404 Resource not found.";
                        return(View("Error"));
                    }
                    var currentlyLoggedInUser = await _userManager.GetUserAsync(User);

                    questionCommentViewModel.UserId = currentlyLoggedInUser.Id;
                    var questionComment = _mapper.Map <QuestionCommentViewModel, QuestionComment>(questionCommentViewModel);
                    await _repository.AddQuestionCommentAsync(questionComment);

                    return(RedirectToAction("Details", "Questions", new { questionId = questionCommentViewModel.QuestionId }));
                }
                catch (DbUpdateException dbex)
                {
                    ViewData["ErrorMessage"] = "DB issue - " + dbex.Message;
                    return(View("Error"));
                }
                catch (Exception ex)
                {
                    ViewData["ErrorMessage"] = ex.Message;
                    return(View("Error"));
                }
            }
            return(View("AddQuestionComment", questionCommentViewModel));
        }
        public async Task <IActionResult> EditQuestionComment(QuestionCommentViewModel questionCommentViewModel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var questionComment = await _repository.GetQuestionCommentById(questionCommentViewModel.Id);

                    if (questionComment == null)
                    {
                        Response.StatusCode      = 404;
                        ViewData["ErrorMessage"] = "404 Resource not found.";
                        return(View("Error"));
                    }
                    var question = await _repository.GetQuestionByIdWithoutDetailsAsync(questionComment.QuestionId);

                    if (question == null)
                    {
                        Response.StatusCode      = 404;
                        ViewData["ErrorMessage"] = "404 Resource not found.";
                        return(View("Error"));
                    }
                    if (String.Equals(User.FindFirstValue(ClaimTypes.NameIdentifier), questionComment.UserId) == false)
                    {
                        return(RedirectToAction("AccessDenied", "Account"));
                    }
                    questionComment = _mapper.Map <QuestionCommentViewModel, QuestionComment>(questionCommentViewModel);
                    // adding the "Edited" mark and refreshing the DateAdded
                    // this replaces the old Body
                    // to keep old data, mark old comment as IsRemoved and add the new one w "Edited" mark
                    questionComment.IsEdited  = true;
                    questionComment.DateAdded = DateTime.Now;
                    await _repository.EditQuestionCommentAsync(questionComment);

                    return(RedirectToAction("Details", "Questions", new { questionId = questionCommentViewModel.QuestionId }));
                }
                catch (DbUpdateException dbex)
                {
                    ViewData["ErrorMessage"] = "DB issue - " + dbex.Message;
                    return(View("Error"));
                }
                catch (Exception ex)
                {
                    ViewData["ErrorMessage"] = ex.Message;
                    return(View("Error"));
                }
            }
            return(View("EditQuestionComment", questionCommentViewModel));
        }