public async Task <CommandResult> Handle( Command request, CancellationToken cancellationToken) { Document doc = await store.GetAsync <Document>( request.PurchaseOrderLineId.ToString()); PurchaseOrderLine aggregate = new PurchaseOrderLine(doc); ReviewOutcome reviewResult = aggregate.Review(); CommandResult result = CommandResult.Void; if (reviewResult is CancellationSuggested) { result = result .WithNotification( new CancellationSuggestedEvent { PurchaseOrderLineId = request.PurchaseOrderLineId }); } return(result); }
public T Review(T item, ReviewOutcome outcome) { _revisionList.Remove(item); var nextReview = new T(); if (outcome != ReviewOutcome.Incorrect) { nextReview.CorrectReviewStreak = item.CorrectReviewStreak + 1; nextReview.PreviousCorrectReview = item.ReviewDate; } else { nextReview.CorrectReviewStreak = 0; nextReview.PreviousCorrectReview = DateTime.MinValue; _revisionList.Add(nextReview); } nextReview.ReviewDate = Clock.Now(); nextReview.DifficultyRating = ReviewStrategy.AdjustDifficulty(item, outcome); nextReview.ReviewOutcome = outcome; return(nextReview); }
public void reviewing_updates_ReviewOutcome(ReviewOutcome outcome) { var item = new ReviewItemBuilder().Due().Build(); var session = new StudySession<ReviewItem>(new[] { item }) { Clock = _clock }; var review = session.Review(item, outcome); Assert.That(review.ReviewOutcome, Is.EqualTo(outcome)); }
public void correct_review_outcome_increments_CorrectReviewStreak(ReviewOutcome outcome) { var correctReviewStreak = 3; var item = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build(); var session = new StudySession<ReviewItem>(new[] { item }); var review = session.Review(item, outcome); Assert.That(review.CorrectReviewStreak, Is.EqualTo(correctReviewStreak + 1)); }
public void correct_review_outcome_increments_CorrectReviewStreak(ReviewOutcome outcome) { var correctReviewStreak = 3; var item = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build(); var session = new StudySession <ReviewItem>(new[] { item }); var review = session.Review(item, outcome); Assert.That(review.CorrectReviewStreak, Is.EqualTo(correctReviewStreak + 1)); }
public void correct_review_outcome_sets_PreviousCorrectReview(ReviewOutcome outcome) { var correctReviewStreak = 3; var item = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build(); var reviewDate = item.ReviewDate; var session = new StudySession<ReviewItem>(new[] { item }); var review = session.Review(item, outcome); Assert.That(review.PreviousCorrectReview, Is.EqualTo(reviewDate)); }
public void correct_review_outcome_sets_PreviousCorrectReview(ReviewOutcome outcome) { var correctReviewStreak = 3; var item = new ReviewItemBuilder().Due().WithCorrectReviewStreak(correctReviewStreak).Build(); var reviewDate = item.ReviewDate; var session = new StudySession <ReviewItem>(new[] { item }); var review = session.Review(item, outcome); Assert.That(review.PreviousCorrectReview, Is.EqualTo(reviewDate)); }
public void reviewing_updates_DifficultyRating_based_on_review_strategy(ReviewOutcome outcome) { var item = new ReviewItemBuilder().Due().WithDifficultyRating(DifficultyRating.MostDifficult).Build(); var session = new StudySession <ReviewItem>(new[] { item }) { ReviewStrategy = new SimpleReviewStrategy() }; var review = session.Review(item, outcome); Assert.That(review.DifficultyRating, Is.EqualTo(DifficultyRating.Easiest)); }
public void reviewing_updates_ReviewOutcome(ReviewOutcome outcome) { var item = new ReviewItemBuilder().Due().Build(); var session = new StudySession <ReviewItem>(new[] { item }) { Clock = _clock }; var review = session.Review(item, outcome); Assert.That(review.ReviewOutcome, Is.EqualTo(outcome)); }
public void correct_items_are_removed_from_review_queue(ReviewOutcome outcome) { var items = new ReviewItemListBuilder() .WithDueItems(1) .Build(); var session = new StudySession <ReviewItem>(items); var item = session.First(); session.Review(item, outcome); Assert.That(session.Count(), Is.EqualTo(0)); }
public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome) { //EF':=EF+(0.1-(5-q)*(0.08+(5-q)*0.02)) //where: //EF' - new value of the E-Factor, //EF - old value of the E-Factor, //q - quality of the response in the 0-3 grade scale. //If EF is less than 1.3 then let EF be 1.3. var currentEasinessFactor = DifficultyRatingToEasinessFactor(item.DifficultyRating.Percentage); var newEasinessFactor = currentEasinessFactor + (0.1 - (3 - (int)outcome)*(0.08 + (3 - (int)outcome)*0.02)); var newDifficultyRating = EasinessFactorToDifficultyRating(newEasinessFactor); if (newDifficultyRating > 100) newDifficultyRating = 100; if (newDifficultyRating < 0) newDifficultyRating = 0; return new DifficultyRating(newDifficultyRating); }
public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome) { //EF':=EF+(0.1-(5-q)*(0.08+(5-q)*0.02)) //where: //EF' - new value of the E-Factor, //EF - old value of the E-Factor, //q - quality of the response in the 0-3 grade scale. //If EF is less than 1.3 then let EF be 1.3. var currentEasinessFactor = DifficultyRatingToEasinessFactor(item.DifficultyRating.Percentage); var newEasinessFactor = currentEasinessFactor + (0.1 - (3 - (int)outcome) * (0.08 + (3 - (int)outcome) * 0.02)); var newDifficultyRating = EasinessFactorToDifficultyRating(newEasinessFactor); if (newDifficultyRating > 100) { newDifficultyRating = 100; } if (newDifficultyRating < 0) { newDifficultyRating = 0; } return(new DifficultyRating(newDifficultyRating)); }
public void reviewing_updates_DifficultyRating_based_on_review_strategy(ReviewOutcome outcome) { var item = new ReviewItemBuilder().Due().WithDifficultyRating(DifficultyRating.MostDifficult).Build(); var session = new StudySession<ReviewItem>(new[] { item }) { ReviewStrategy = new SimpleReviewStrategy() }; var review = session.Review(item, outcome); Assert.That(review.DifficultyRating, Is.EqualTo(DifficultyRating.Easiest)); }
public void correct_items_are_removed_from_review_queue(ReviewOutcome outcome) { var items = new ReviewItemListBuilder() .WithDueItems(1) .Build(); var session = new StudySession<ReviewItem>(items); var item = session.First(); session.Review(item, outcome); Assert.That(session.Count(), Is.EqualTo(0)); }
public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome) { return DifficultyRating.Easiest; }
public DifficultyRating AdjustDifficulty(IReviewItem item, ReviewOutcome outcome) { return(DifficultyRating.Easiest); }