public ActionResult AskQuestion(QuestionViewModel question)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    question.DatePublished = DateTime.Now;
                    var user = System.Web.HttpContext.Current.User.Identity.GetUserId();
                    //Map View Model -> Entity
                    var questionEntity = new DataStore.Question();
                    questionEntity.DatePublished = question.DatePublished;
                    questionEntity.QuestionText  = question.QuestionText;
                    questionEntity.UserId        = user;
                    //Add in DataBase
                    bool isInserted = repo.InsertQuestion(questionEntity);

                    if (isInserted)
                    {
                        ViewBag.InsertMessage = "Your Question has been successfully submitted, please wait for your response...";
                        return(RedirectToAction("ViewMyQuestions"));
                    }
                    else
                    {
                        ModelState.AddModelError("", "The Question could not be submitted... Please try again later");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                ModelState.AddModelError("", "There is something wrong at server side, please be patient till we fix some things...");
            }
            return(View());
        }
        private QuestionViewModel GetQuestionModel(DataStore.Question questionEntity)
        {
            QuestionViewModel questionModel = new QuestionViewModel();

            try
            {
                questionModel.Id            = questionEntity.Id;
                questionModel.QuestionText  = questionEntity.QuestionText;
                questionModel.UserId        = questionEntity.UserId;
                questionModel.DatePublished = questionEntity.DatePublished;
                questionModel.AnswerId      = questionEntity.AnswerId;
                questionModel.IsPublic      = questionEntity.IsPublic;

                if (questionEntity.Answer != null)
                {
                    questionModel.Answer = GetAnswerModel(questionEntity.Answer);
                }

                if (questionEntity.AspNetUsers != null)
                {
                    questionModel.UserName = questionEntity.AspNetUsers.UserName;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            return(questionModel);
        }
        private DataStore.Question GetQuestionEntity(QuestionViewModel questionModel)
        {
            DataStore.Question questionEntity = new DataStore.Question();
            try
            {
                questionEntity.Id            = questionModel.Id;
                questionEntity.QuestionText  = questionModel.QuestionText;
                questionEntity.UserId        = questionModel.UserId;
                questionEntity.DatePublished = questionModel.DatePublished;
                questionEntity.AnswerId      = questionModel.AnswerId;
                questionEntity.IsPublic      = questionModel.IsPublic;

                if (questionEntity.Answer != null)
                {
                    questionEntity.Answer = GetAnswerEntity(questionModel.Answer);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            return(questionEntity);
        }
        public ActionResult ViewAnswer(int?questionId)
        {
            QuestionViewModel question = new QuestionViewModel();

            try
            {
                if (questionId == null)
                {
                    ModelState.AddModelError("", "Invalid Question...");
                    return(RedirectToAction("AccessDenied", "Error"));
                }

                //Fetch Question against Id
                DataStore.Question questionEntity = repo.GetQuestionById((int)questionId);

                question = GetQuestionModel(questionEntity);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                ModelState.AddModelError("", "An Error Occured Retrieving the Answer against question, please try again later...");
            }
            return(View(question));
        }