23 lines
723 B
C#
23 lines
723 B
C#
namespace QuestionsApi.Services;
|
|
|
|
public static class DynamicReviewPolicy
|
|
{
|
|
private static readonly int[] IntervalsDays = [1, 3, 7, 21, 45];
|
|
|
|
public static DateTime FirstDue(DateTime nowUtc) => nowUtc.AddDays(IntervalsDays[0]);
|
|
|
|
public static (int Stage, DateTime? DueUtc, bool Mastered) AfterReview(
|
|
int currentStage,
|
|
bool isCorrect,
|
|
DateTime nowUtc)
|
|
{
|
|
if (!isCorrect)
|
|
return (0, FirstDue(nowUtc), false);
|
|
|
|
var nextStage = Math.Clamp(currentStage + 1, 1, IntervalsDays.Length);
|
|
if (nextStage >= IntervalsDays.Length)
|
|
return (nextStage, null, true);
|
|
return (nextStage, nowUtc.AddDays(IntervalsDays[nextStage]), false);
|
|
}
|
|
}
|