99 lines
3.6 KiB
C#
99 lines
3.6 KiB
C#
using MongoDB.Bson;
|
|
using MongoDB.Bson.Serialization.Attributes;
|
|
|
|
namespace QuestionsApi.Models;
|
|
|
|
public sealed class UserProgression
|
|
{
|
|
[BsonId, BsonRepresentation(BsonType.ObjectId)] public string? Id { get; set; }
|
|
public string UserId { get; set; } = "";
|
|
public int HighestRankOrdinal { get; set; }
|
|
public DateTime TrackingStartedUtc { get; set; }
|
|
public bool BaselineApplied { get; set; }
|
|
public Dictionary<string, DateTime> EarnedRanksUtc { get; set; } = [];
|
|
public int CurrentHardStreak { get; set; }
|
|
public int BestHardStreak { get; set; }
|
|
public DateTime? BestHardStreakUtc { get; set; }
|
|
public PersonalRecordValue BestTimedBlock { get; set; } = new();
|
|
public PersonalRecordValue SystemsAdvancedWeek { get; set; } = new();
|
|
public PersonalRecordValue ReviewQueueReduction { get; set; } = new();
|
|
public PersonalRecordValue WeakSystemImprovement { get; set; } = new();
|
|
public DateTime UpdatedUtc { get; set; }
|
|
}
|
|
|
|
public sealed class PersonalRecordValue
|
|
{
|
|
public int Value { get; set; }
|
|
public int SampleSize { get; set; }
|
|
public string Detail { get; set; } = "";
|
|
public DateTime? AchievedUtc { get; set; }
|
|
}
|
|
|
|
public sealed class ProgressionWeeklySnapshot
|
|
{
|
|
[BsonId] public string Id { get; set; } = "";
|
|
public string UserId { get; set; } = "";
|
|
public DateTime WeekStartUtc { get; set; }
|
|
public List<ProgressionSystemSnapshot> OpeningSystems { get; set; } = [];
|
|
public List<ProgressionSystemSnapshot> LatestSystems { get; set; } = [];
|
|
public int OpeningPendingReviews { get; set; }
|
|
public int LatestPendingReviews { get; set; }
|
|
public DateTime UpdatedUtc { get; set; }
|
|
}
|
|
|
|
public sealed class ProgressionSystemSnapshot
|
|
{
|
|
public string System { get; set; } = "";
|
|
public int StateOrdinal { get; set; }
|
|
public int MasteryScore { get; set; }
|
|
public int DistinctQuestions { get; set; }
|
|
}
|
|
|
|
public sealed class ProgressionRequirementResponse
|
|
{
|
|
public string Key { get; set; } = "";
|
|
public string Label { get; set; } = "";
|
|
public int Current { get; set; }
|
|
public int Required { get; set; }
|
|
public bool Complete => Current >= Required;
|
|
}
|
|
|
|
public sealed class ProgressionRecordResponse
|
|
{
|
|
public string Key { get; set; } = "";
|
|
public string Label { get; set; } = "";
|
|
public string Definition { get; set; } = "";
|
|
public int Value { get; set; }
|
|
public int SampleSize { get; set; }
|
|
public string Detail { get; set; } = "";
|
|
public DateTime? AchievedUtc { get; set; }
|
|
public bool TrackingFromLaunch { get; set; }
|
|
}
|
|
|
|
public sealed class ProgressionResponse
|
|
{
|
|
public int RankOrdinal { get; set; }
|
|
public int QualifiedRankOrdinal { get; set; }
|
|
public string RankName { get; set; } = "Case Scout";
|
|
public string Division { get; set; } = "III";
|
|
public string DisplayName => $"{RankName} {Division}";
|
|
public DateTime TrackingStartedUtc { get; set; }
|
|
public List<string> EarnedBadges { get; set; } = [];
|
|
public Dictionary<string, DateTime> EarnedRanksUtc { get; set; } = [];
|
|
public List<ProgressionRankResponse> Ladder { get; set; } = [];
|
|
public string? NextRankName { get; set; }
|
|
public string? NextDivision { get; set; }
|
|
public List<ProgressionRequirementResponse> NextRequirements { get; set; } = [];
|
|
public List<ProgressionRecordResponse> Records { get; set; } = [];
|
|
}
|
|
|
|
public sealed class ProgressionRankResponse
|
|
{
|
|
public int Ordinal { get; set; }
|
|
public string RankName { get; set; } = "";
|
|
public string Division { get; set; } = "";
|
|
public bool Earned { get; set; }
|
|
public DateTime? EarnedUtc { get; set; }
|
|
public string RequirementSummary { get; set; } = "";
|
|
}
|