Files
step3/api/QuestionsApi/Models/ReviewQueueModels.cs
T

91 lines
2.8 KiB
C#

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace QuestionsApi.Models;
public static class ReviewQueueStates
{
public const string Pending = "pending";
public const string Mastered = "mastered";
public const string Unavailable = "unavailable";
}
public sealed class ReviewQueueItem
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string? Id { get; set; }
public string UserId { get; set; } = "";
public string QuestionExternalId { get; set; } = "";
public string SourceAttemptId { get; set; } = "";
public string State { get; set; } = ReviewQueueStates.Pending;
public int Cycle { get; set; } = 1;
public int ReviewCount { get; set; }
public int IncorrectReviewCount { get; set; }
public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;
public DateTime UpdatedUtc { get; set; } = DateTime.UtcNow;
public DateTime? LastReviewedUtc { get; set; }
public DateTime? MasteredUtc { get; set; }
}
public sealed class QuestionReviewAttempt
{
[BsonId]
public string Id { get; set; } = "";
public string UserId { get; set; } = "";
public string QuestionExternalId { get; set; } = "";
public int Cycle { get; set; }
public string ChoiceId { get; set; } = "";
public List<string> PresentedChoiceIds { get; set; } = [];
public bool IsCorrect { get; set; }
public int DurationSeconds { get; set; }
public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;
}
public sealed class ReviewQueueBackfillState
{
[BsonId]
public string UserId { get; set; } = "";
public DateTime CompletedUtc { get; set; } = DateTime.UtcNow;
}
public sealed class ReviewQueueNextRequest
{
public List<string> ExcludeExternalIds { get; set; } = [];
public bool SupportsChoicePools { get; set; } = true;
public string? Step3System { get; set; }
}
public sealed class ReviewQueueNextResponse
{
public QuestionResponse? Question { get; set; }
public int Cycle { get; set; }
public int PendingCount { get; set; }
}
public sealed class ReviewQueueAttemptRequest
{
public string ClientAttemptId { get; set; } = "";
public string QuestionExternalId { get; set; } = "";
public int Cycle { get; set; }
public string ChoiceId { get; set; } = "";
public List<string> PresentedChoiceIds { get; set; } = [];
public int DurationSeconds { get; set; }
}
public sealed class ReviewQueueAttemptResponse
{
public string QuestionExternalId { get; set; } = "";
public bool IsCorrect { get; set; }
public string QueueState { get; set; } = ReviewQueueStates.Pending;
public int PendingCount { get; set; }
}
public sealed class ReviewQueueRecordResult
{
public QuestionReviewAttempt Attempt { get; set; } = new();
public ReviewQueueItem? Item { get; set; }
}