コード例 #1
0
        public async Task <IActionResult> GetQuestionHint([FromHeader] DataModel.Models.Localization.Locale locale, [FromRoute] Guid questionId)
        {
            var userId = HttpContext.User.FindFirstValue(ClaimTypes.Name);

            var result = await _mediator.Send(new GetQuestionHint.Query
            {
                QuestionId = questionId,
                Locale     = locale
            });

            _mediator.Enqueue(new MarkUserQuestion.Command
            {
                UserId    = Guid.Parse(userId),
                Questions = new List <MarkUserQuestion.Question>
                {
                    new MarkUserQuestion.Question
                    {
                        QuestionId = questionId,
                        HintUsed   = true
                    }
                }
            });

            return(Ok(result));
        }
コード例 #2
0
            private async Task <string> GetHint(Guid questionId, DataModel.Models.Localization.Locale locale)
            {
                var query = from questionLocalization in _db.QuestionLocalizations
                            join localization in _db.Localizations on questionLocalization.LocalizationId equals localization.Id
                            where questionLocalization.QuestionId == questionId && localization.LocaleId == locale && questionLocalization.QuestionType == QuestionType.Hint
                            select localization.Translation;

                var result = await query.FirstOrDefaultAsync();

                return(result);
            }
コード例 #3
0
        public async Task <IActionResult> GetQuestions([FromHeader] DataModel.Models.Localization.Locale locale, [FromQuery] int limit = 20)
        {
            var userId = HttpContext.User.FindFirstValue(ClaimTypes.Name);

            var result = await _mediator.Send(new GetQuestions.Query
            {
                Limit  = limit,
                UserId = Guid.Parse(userId),
                Locale = locale
            });

            return(Ok(result));
        }
コード例 #4
0
            private async Task <string> GetQuestionText(Guid questionId, DataModel.Models.Localization.Locale locale)
            {
                var query = from answer in _db.Answers
                            join questionLocalization in _db.QuestionLocalizations on answer.QuestionId equals questionLocalization.QuestionId
                            join localization in _db.Localizations on questionLocalization.LocalizationId equals localization.Id
                            where answer.QuestionId == questionId && questionLocalization.QuestionType == QuestionType.Final
                            where localization.LocaleId == locale
                            select localization.Translation;

                var result = await query.FirstOrDefaultAsync();

                return(result);
            }
コード例 #5
0
        public async Task <IActionResult> AddAnswer([FromHeader] DataModel.Models.Localization.Locale locale, [FromRoute] Guid questionId, [FromBody] CheckAnswer.AnswerRequest answer)
        {
            var userId = HttpContext.User.FindFirstValue(ClaimTypes.Name);

            var result = await _mediator.Send(new CheckAnswer.Query
            {
                Answer     = answer,
                QuestionId = questionId,
                Locale     = locale
            });

            _mediator.Enqueue(new AddAnswer.Command
            {
                AnswerId = answer.AnswerId,
                UserId   = Guid.Parse(userId)
            });

            return(Ok(result));
        }
コード例 #6
0
            private async Task <ICollection <Question> > GetQuestions(ICollection <Guid> skipQuestionIds,
                                                                      DataModel.Models.Localization.Locale locale, int limit)
            {
                var query = from question in _db.Questions
                            join questionLocalization in _db.QuestionLocalizations on question.Id equals questionLocalization
                            .QuestionId
                            join qLocalization in _db.Localizations on questionLocalization.LocalizationId equals qLocalization
                            .Id

                            join answer in _db.Answers on question.Id equals answer.QuestionId
                            join answerLocalization in _db.AnswerLocalizations on answer.Id equals answerLocalization.AnswerId
                            join aLocalization in _db.Localizations on answerLocalization.LocalizationId equals aLocalization.Id

                            where !skipQuestionIds.Contains(question.Id) && qLocalization.LocaleId == locale &&
                            aLocalization.LocaleId == locale && questionLocalization.QuestionType == QuestionType.Question

                            orderby Guid.NewGuid()

                            group new Answer
                {
                    Id = answer.Id, Text = aLocalization.Translation
                }

                by new { question, qLocalization }
                into gr

                    select new Question
                {
                    Id       = gr.Key.question.Id,
                    Text     = gr.Key.qLocalization.Translation,
                    ImageUrl = gr.Key.question.ImageUrl,
                    Answers  = gr.OrderBy(_ => Guid.NewGuid()).ToList()
                };

                var sql = query.ToString();

                var result = await query.Take(limit).ToListAsync();

                return(result);
            }