예제 #1
0
        public IActionResult Index(int id)
        {
            _questionImplementation.AddView(id).Wait();
            var question = _questionImplementation.GetById(id);
            var answers  = Buildanswers(question.Answers);

            var model = new QuestionIndexModel
            {
                QuestionId      = question.QuestionId,
                QuestionTitle   = question.QuestionTitle,
                AuthorId        = question.User.Id,
                AuthorName      = question.User.UserName,
                AuthorImageUrl  = question.User.ProfileImageUrl,
                AuthorRating    = question.User.Rating,
                QuestionCreated = question.QuestionCreated,
                QuestionContent = question.QuestionContent,
                Answers         = answers,
                AnswerCount     = question.Answers.Count(),
                CategoryId      = question.Category.CategoryId,
                CategoryTitle   = question.Category.CategoryTitle,
                IsAuthorAdmin   = IsAuthorAdmin(question.User),
                LikeCount       = question.LikeQuestions.Count(),
                NumberView      = question.NumberViews
            };

            return(View(model));
        }
예제 #2
0
        private Answer BuildReply(QuestionIndexModel model, ApplicationUser user)
        {
            var question = _questionImplementation.GetById(model.QuestionId);

            return(new Answer
            {
                Question = question,
                AnswerContent = model.AnswerContent,
                AnswerCreated = DateTime.Now,
                User = user
            });
        }
예제 #3
0
        public List <QuestionIndexModel> GetAllQuestionsFromTestWithId(int id)
        {
            var lis = new List <QuestionIndexModel>();

            foreach (var question in this.dbContext.Questions.Where(x => x.TestId == id))
            {
                var curQuestion = new QuestionIndexModel()
                {
                    Id   = question.Id,
                    Name = question.QuestionName,
                };

                lis.Add(curQuestion);
            }

            return(lis);
        }
예제 #4
0
        /// <summary>
        /// From list of the question make a QuestionIndexModel list to index page
        /// </summary>
        /// <param name="questions">Question list</param>
        /// <returns></returns>
        public static List <QuestionIndexModel> ToQuestionIndexModel(IEnumerable <Question> questions)
        {
            List <QuestionIndexModel> qim = new List <QuestionIndexModel>();

            foreach (var item in questions)
            {
                var add = new QuestionIndexModel();
                add.Question     = item;
                add.Answers      = AnswerManager.GetAllAnswerToOneQuestion(item.Id).Count;
                add.Vote         = QuestionManager.GetVote(item.Id);
                add.Tags         = TagManager.GetAllTagToOneQuestion(item.Id);
                add.QuestionUser = UserManager.GetUserById(item.UserId);

                qim.Add(add);
            }

            return(qim);
        }
예제 #5
0
        public async Task <IActionResult> AddLike(int questionId)
        {
            var userId = _userManager.GetUserId(User);
            var user   = await _userManager.FindByIdAsync(userId);

            var likeQuestion = BuildLike(questionId, user);

            await _questionImplementation.AddLike(likeQuestion);

            var question = _questionImplementation.GetById(questionId);
            var model    = new QuestionIndexModel
            {
                LikeCount  = question.LikeQuestions.Count(),
                QuestionId = question.QuestionId
            };

            return(RedirectToAction("Index", "Question", new { id = questionId }));
        }
예제 #6
0
        public async Task <IActionResult> AddAnswer(QuestionIndexModel model)
        {
            var userId = _userManager.GetUserId(User);
            var user   = await _userManager.FindByIdAsync(userId);

            var answer = BuildReply(model, user);

            string[] censoredWords = System.IO.File.ReadAllLines(@"CensoredWords.txt");
            Censor   censor        = new Censor(censoredWords);

            answer.AnswerContent = censor.CensorText(answer.AnswerContent);

            await _questionImplementation.AddAnswer(answer);

            await _applicationUserImplementation.UpdateUserRating(userId, typeof(Answer));

            return(RedirectToAction("Index", "Question", new { id = model.QuestionId }));
        }
예제 #7
0
        public async Task <ActionResult> GetQuestionsAsync(int pageSize, int pageNumber, string tagName)
        {
            var items = await _questionService.GetQuestions(pageNumber, pageSize, tagName);

            var countQuestions = await _questionService.CountQuestions(tagName);

            var questionModel = new QuestionIndexModel()
            {
                PageModel      = new PageModel(countQuestions, pageNumber, pageSize),
                QuestionModels = _mapper.Map <List <QuestionModel> >(items)
            };

            var claimValueId = User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Sid)?.Value;
            var userId       = int.TryParse(claimValueId, out var f) ? f : default(int?);

            questionModel.QuestionModels.ForEach(x => x.SetCurrentVoter(userId));
            return(Ok(questionModel));
        }
예제 #8
0
        public async Task <IActionResult> Index(Guid topic, FilterType filter = FilterType.New, int page = 1)
        {
            if (page < 1)
            {
                return(NotFound());
            }
            PagingResult <PostView> postViews = await postService.GetPagingResultAsync(topic, PostResultType.Question, page, filter);

            if (postViews.PageCount > 1 && page > postViews.PageCount)
            {
                return(NotFound());
            }
            QuestionIndexModel model = new QuestionIndexModel
            {
                PostViews = postViews
            };

            return(this.View(model));
        }