using MongoDB.Bson.Serialization.Attributes; namespace QuestionsApi.Models; public static class WeeklyRemediationTypes { public const string Reviews = "reviews"; public const string HardCorrect = "hard_correct"; } public sealed class WeeklyGoal { [BsonId] public string Id { get; set; } = ""; public string UserId { get; set; } = ""; public DateTime WeekStartUtc { get; set; } public DateTime ExpiresUtc { get; set; } public string RemediationType { get; set; } = WeeklyRemediationTypes.Reviews; public int RemediationTarget { get; set; } public List EligibleSystems { get; set; } = []; public DateTime CreatedUtc { get; set; } public DateTime? CompletedUtc { get; set; } public bool RewardIssued { get; set; } public int RewardAmount { get; set; } public bool ExpirationRecorded { get; set; } } public sealed class WeeklyGoalComponentResponse { public string Type { get; set; } = ""; public string Label { get; set; } = ""; public int Progress { get; set; } public int Target { get; set; } public bool Completed { get; set; } } public sealed class WeeklyGoalResponse { public DateTime WeekStartUtc { get; set; } public DateTime ExpiresUtc { get; set; } public bool Completed { get; set; } public string RemediationType { get; set; } = ""; public List EligibleSystems { get; set; } = []; public string SuggestedSystem { get; set; } = ""; public int RewardAmount { get; set; } public int RewardMaximum { get; set; } = 10; public List Components { get; set; } = []; } public sealed class WeeklyGoalEnvelope { public WeeklyGoalResponse State { get; set; } = new(); public CreditStatusResponse? Credits { get; set; } public List CreditAwards { get; set; } = []; }