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