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