Esempio n. 1
0
        /// <summary>
        /// Randoms the words.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <returns>
        /// Exam words for test
        /// </returns>
        public async Task <ExamTest> RandomWords(StartRequestExamTestModel model)
        {
            var knownLanguageType =
                await _flashcardDbContext.LanguageTypes.FirstOrDefaultAsync(l => l.Id == model.KnownLanguageTypeId);

            if (knownLanguageType == null)
            {
                throw new NotFoundException("Known language type not found");
            }

            var learningLanguageType =
                await _flashcardDbContext.LanguageTypes.FirstOrDefaultAsync(l => l.Id == model.LearningLanguageTypeId);

            if (learningLanguageType == null)
            {
                throw new NotFoundException("Learning language type not found");
            }

            var examTest = new ExamTest
            {
                KnownLanguageType    = knownLanguageType,
                LearningLanguageType = learningLanguageType,
                Created = DateTime.Now
            };

            using (var transaction = _flashcardDbContext.Database.BeginTransaction())
            {
                try
                {
                    await _flashcardDbContext.ExamTests.AddAsync(examTest);

                    var examTestWords = (await _wordService.GetRandomWords(model.CategoryId, model.WordsLength))?.Select(w => new ExamTestWord
                    {
                        ExamTest = examTest,
                        Word     = w
                    }) ?? new List <ExamTestWord>();

                    if (!examTestWords.Any())
                    {
                        throw new BadRequestException("No words to fetch");
                    }

                    await _flashcardDbContext.ExamTestWords.AddRangeAsync(examTestWords);

                    _flashcardDbContext.SaveChanges();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
            }

            return(examTest);
        }
Esempio n. 2
0
 public async Task <IActionResult> RandomWords([FromBody] StartRequestExamTestModel model)
 {
     return(await OnActionWorkAsync(async() =>
                                    new ObjectResult(await _examTestService.RandomWords(model))));
 }