public async Task <IActionResult> GetRandomExpiredForMixed()
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (String.IsNullOrEmpty(userId))
            {
                return(NotFound());
            }

            var hasUserFlashcardToLearn = new GetRandomExpiredFlashcardQ(userId);

            if (await _mediator.Send(hasUserFlashcardToLearn) == null)
            {
                return(NotFound());
            }

            var getRandomExpiredFlashcardQuery = new GetRandomExpiredForMixedQ(userId);

            var flashcard = await _mediator.Send(getRandomExpiredFlashcardQuery);

            if (flashcard == null)
            {
                return(BadRequest("You have not enough flashcards to practice this mode."));
            }

            return(Ok(flashcard));
        }
Esempio n. 2
0
        public async Task TestA()
        {
            var mock = new MockDataV3();

            mock.Reset();

            var serviceProvider = new ServiceCollection()
                                  .AddTransient <IFlashcardProgressRepo, FlashcardProgressRepo>()
                                  .AddDbContext <AppDbContext>(options => options.UseSqlServer(MockDatabaseFactory.DbMockConnectionString))
                                  .AddMediatR(typeof(MediatREntryPoint).Assembly)
                                  .BuildServiceProvider();

            var mediator = serviceProvider.GetService <IMediator>();

            var getRandomExpiredFlashcardQ = new GetRandomExpiredFlashcardQ("9a4e1d79-d64e-4ec4-85e5-53bdef5043f4");

            var expectedReponses = new List <Guid>()
            {
                Guid.Parse("9884d783-427d-45d4-a1df-facaf81729f5"), Guid.Parse("2c083f4e-fdce-4c67-8ca7-e3c5d1b40d4e"), Guid.Parse("021fc2e4-e2cf-4120-a1af-df918ecad194")
            };
            var expectedReponsesNotContains = new List <Guid>()
            {
                Guid.Parse("594b1485-e842-482f-9b09-a649cb72bdb1"), Guid.Parse("91b5ae74-6197-449f-a4ef-c81068179822"), Guid.Parse("a6d821a0-75fd-4152-af8f-03fa17796430")
            };

            for (int i = 0; i < 100; i++)
            {
                var response = await mediator.Send(getRandomExpiredFlashcardQ);

                Assert.Contains(response.FlashcardProgressId, expectedReponses);
                Assert.DoesNotContain(response.FlashcardProgressId, expectedReponsesNotContains);
            }
        }
        public async Task <IActionResult> GetRandomExpired()
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (String.IsNullOrEmpty(userId))
            {
                return(NotFound());
            }

            var getRandomExpiredFlashcardQuery = new GetRandomExpiredFlashcardQ(userId);

            var flashcard = await _mediator.Send(getRandomExpiredFlashcardQuery);

            if (flashcard == null)
            {
                return(NotFound());
            }

            return(Ok(flashcard));
        }
        public async Task <FlashcardPracticeChooseGetModel> Handle(GetRandomExpiredForChooseQ request, CancellationToken cancellationToken)
        {
            var getRandomExpiredFlashcardQ = new GetRandomExpiredFlashcardQ(request.UserId);

            var choosenFlashcard = await _mediator.Send(getRandomExpiredFlashcardQ);

            if (choosenFlashcard == null)
            {
                return(null);
            }

            var allPossibleAnswers = (await _flashcardRepo.GetWhereUserId(request.UserId))
                                     .Select(e => choosenFlashcard.PracticeDirection == PracticeDirection.ForeignToNative ? e.Native : e.Foreign)
                                     .ToList();

            if (allPossibleAnswers.Count < 3)
            {
                return(null);
            }

            var firstIncorrectAns = choosenFlashcard.Back;

            while (firstIncorrectAns == choosenFlashcard.Back)
            {
                firstIncorrectAns = allPossibleAnswers[(new Random()).Next(0, allPossibleAnswers.Count)];
            }

            var secondIncorrectAns = choosenFlashcard.Back;

            while (secondIncorrectAns == choosenFlashcard.Back || secondIncorrectAns == firstIncorrectAns)
            {
                secondIncorrectAns = allPossibleAnswers[(new Random()).Next(0, allPossibleAnswers.Count)];
            }

            switch ((new Random()).Next(1, 4))
            {
            case 1:
                return(new FlashcardPracticeChooseGetModel()
                {
                    FlashcardProgressId = choosenFlashcard.FlashcardProgressId,
                    CorrectAns = 1,
                    Front = choosenFlashcard.Front,
                    AnsA = choosenFlashcard.Back,
                    AnsB = firstIncorrectAns,
                    AnsC = secondIncorrectAns
                });

            case 2:
                return(new FlashcardPracticeChooseGetModel()
                {
                    FlashcardProgressId = choosenFlashcard.FlashcardProgressId,
                    CorrectAns = 2,
                    Front = choosenFlashcard.Front,
                    AnsA = firstIncorrectAns,
                    AnsB = choosenFlashcard.Back,
                    AnsC = secondIncorrectAns
                });

            case 3:
                return(new FlashcardPracticeChooseGetModel()
                {
                    FlashcardProgressId = choosenFlashcard.FlashcardProgressId,
                    CorrectAns = 3,
                    Front = choosenFlashcard.Front,
                    AnsA = firstIncorrectAns,
                    AnsB = secondIncorrectAns,
                    AnsC = choosenFlashcard.Back,
                });

            default:
                return(null);
            }
        }