Credits were previously awarded on any first attempt regardless of correctness or timing. The award now requires the first-ever attempt to be correct (record.Attempt.IsCorrect) and submitted before the adaptive per-question timer expired (new MetTimeLimit request field, computed client-side from the same elapsed/target comparison that already drives the visible countdown bar). The coin-flight animation in question_player.gd now only plays when both conditions are met (BlockSessionService.submit_core_attempt's existing "mastered" flag plus met_time_limit), so the effect never promises a coin that isn't actually earned. Co-Authored-By: Claude Sonnet 5 <[email protected]>
54 lines
2.1 KiB
C#
54 lines
2.1 KiB
C#
namespace QuestionsApi.Models;
|
|
|
|
public class QuestionSearchRequest
|
|
{
|
|
public string? System { get; set; }
|
|
public string? Discipline { get; set; }
|
|
public List<string> Tags { get; set; } = [];
|
|
public int? DifficultyMin { get; set; }
|
|
public int? DifficultyMax { get; set; }
|
|
public int Limit { get; set; } = 40;
|
|
public bool SupportsChoicePools { get; set; }
|
|
public bool RequireMedia { get; set; }
|
|
public List<string> ExcludeExternalIds { get; set; } = [];
|
|
}
|
|
|
|
public class UpsertQuestionRequest
|
|
{
|
|
public string ExternalId { get; set; } = "";
|
|
public string Stem { get; set; } = "";
|
|
public string LeadIn { get; set; } = "";
|
|
public List<QuestionChoice> Choices { get; set; } = [];
|
|
public string CorrectChoiceId { get; set; } = "";
|
|
public string Explanation { get; set; } = "";
|
|
public string KeyTakeaway { get; set; } = "";
|
|
public string UsmlePearl { get; set; } = "";
|
|
public List<QuestionReviewFollowup> ReviewFollowups { get; set; } = [];
|
|
public Dictionary<string, string> ChoiceExplanations { get; set; } = [];
|
|
public Dictionary<string, WrongAnswerFollowup> WrongAnswerFollowups { get; set; } = [];
|
|
public Dictionary<string, int> ChoiceSelectionPercentages { get; set; } = [];
|
|
public string Discipline { get; set; } = "";
|
|
public string System { get; set; } = "";
|
|
public string PerformanceCategory { get; set; } = "";
|
|
public int Difficulty { get; set; } = 1;
|
|
public List<QuestionLab> Labs { get; set; } = [];
|
|
public List<string> Media { get; set; } = [];
|
|
public List<string> Tags { get; set; } = [];
|
|
public List<QuestionReference> References { get; set; } = [];
|
|
public bool IsPublished { get; set; } = true;
|
|
}
|
|
|
|
public class FlagQuestionRequest
|
|
{
|
|
public string Reason { get; set; } = "";
|
|
}
|
|
|
|
public class FirstQuestionAttemptRequest
|
|
{
|
|
public string QuestionExternalId { get; set; } = "";
|
|
public string ChoiceId { get; set; } = "";
|
|
public List<string> PresentedChoiceIds { get; set; } = [];
|
|
public int DurationSeconds { get; set; }
|
|
public bool MetTimeLimit { get; set; } = true;
|
|
}
|