Implement persistent review queue

This commit is contained in:
hz
2026-07-19 12:51:24 -05:00
parent 1bfb3f5347
commit 7508d4fe1d
20 changed files with 1155 additions and 20 deletions
@@ -16,6 +16,7 @@ public class ExamSimulationStore
private readonly AnswerStatisticsStore _statistics;
private readonly RatingStore _ratings;
private readonly ServiceMetrics _metrics;
private readonly ReviewQueueStore _reviewQueue;
public ExamSimulationStore(
MongoDatabaseProvider mongo,
@@ -23,7 +24,8 @@ public class ExamSimulationStore
QuestionAttemptStore attempts,
AnswerStatisticsStore statistics,
RatingStore ratings,
ServiceMetrics metrics)
ServiceMetrics metrics,
ReviewQueueStore reviewQueue)
{
_simulations = mongo.Database.GetCollection<ExamSimulation>("ExamSimulations");
_outcomes = mongo.Database.GetCollection<Step3Outcome>("Step3Outcomes");
@@ -32,6 +34,7 @@ public class ExamSimulationStore
_statistics = statistics;
_ratings = ratings;
_metrics = metrics;
_reviewQueue = reviewQueue;
_simulations.Indexes.CreateOne(new CreateIndexModel<ExamSimulation>(
Builders<ExamSimulation>.IndexKeys.Ascending(item => item.UserId).Ascending(item => item.State)));
_simulations.Indexes.CreateOne(new CreateIndexModel<ExamSimulation>(
@@ -439,6 +442,7 @@ public class ExamSimulationStore
responses.TryGetValue(item.QuestionExternalId, out var response);
var choiceId = response?.ChoiceId ?? "";
var record = await _attempts.RecordFirstAttemptAsync(item.QuestionExternalId, simulation.UserId, choiceId, choiceId == question.CorrectChoiceId, choiceId == "", item.PresentedChoiceIds);
await _reviewQueue.AddFromFirstAttemptAsync(record.Attempt);
if (!record.Inserted) continue;
_metrics.AttemptCreated();
try { await _statistics.IncrementAsync(record.Attempt); } catch { _metrics.CounterFailure(); }