using MongoDB.Bson.Serialization.Attributes; namespace QuestionsApi.Models; public static class DailyMissionTypes { public const string DueReviews = "due_reviews"; public const string WeakSystemCorrect = "weak_system_correct"; public const string DifficultyFourCorrect = "difficulty_four_correct"; } public sealed class DailyMission { public string Id { get; set; } = Guid.NewGuid().ToString("N"); public string Type { get; set; } = ""; public string Title { get; set; } = ""; public string Step3System { get; set; } = ""; public int DifficultyMin { get; set; } public int Target { get; set; } public int Progress { get; set; } public DateTime StartsUtc { get; set; } public DateTime? CompletedUtc { get; set; } public List AppliedEventIds { get; set; } = []; } public sealed class DailyMissionSet { [BsonId] public string Id { get; set; } = ""; public string UserId { get; set; } = ""; public string DateUtc { get; set; } = ""; public List Missions { get; set; } = []; public List ReplacementCandidates { get; set; } = []; public bool ReplacementUsed { get; set; } public bool ExpirationRecorded { get; set; } public DateTime CreatedUtc { get; set; } public DateTime ExpiresUtc { get; set; } } public sealed class DailyMissionResponse { public string Id { get; set; } = ""; public string Type { get; set; } = ""; public string Title { get; set; } = ""; public string Step3System { get; set; } = ""; public int DifficultyMin { get; set; } public int Target { get; set; } public int Progress { get; set; } public bool Completed { get; set; } } public sealed class DailyMissionSetResponse { public string DateUtc { get; set; } = ""; public DateTime ExpiresUtc { get; set; } public bool ReplacementAvailable { get; set; } public List Missions { get; set; } = []; } public sealed class DailyMissionEnvelope { public DailyMissionSetResponse State { get; set; } = new(); public List CreditAwards { get; set; } = []; }