using System.ComponentModel.DataAnnotations; namespace DramaLing.Api.Models.DTOs; /// /// 複習請求 DTO /// public class ReviewRequest { /// /// 信心度等級 (1=模糊, 2=一般, 3=熟悉) /// [Required] [Range(0, 3, ErrorMessage = "信心度必須在 0-3 之間")] public int Confidence { get; set; } /// /// 是否答對 (基於 confidence >= 2 判斷,或由前端直接提供) /// public bool? IsCorrect { get; set; } /// /// 複習類型 (flip-memory 或 vocab-choice) /// public string? ReviewType { get; set; } = "flip-memory"; /// /// 回應時間 (毫秒) /// public int? ResponseTimeMs { get; set; } /// /// 是否跳過 /// public bool WasSkipped { get; set; } = false; /// /// 會話中的跳過次數 (前端統計) /// public int SessionSkipCount { get; set; } = 0; /// /// 會話中的錯誤次數 (前端統計) /// public int SessionWrongCount { get; set; } = 0; } /// /// 複習結果響應 DTO /// public class ReviewResult { /// /// 詞卡ID /// public Guid FlashcardId { get; set; } /// /// 新的連續成功次數 /// public int NewSuccessCount { get; set; } /// /// 下次複習日期 /// public DateTime NextReviewDate { get; set; } /// /// 間隔天數 /// public int IntervalDays { get; set; } /// /// 熟練度變化 (可選) /// public double MasteryLevelChange { get; set; } = 0.0; /// /// 是否為新記錄 /// public bool IsNewRecord { get; set; } = false; } /// /// 待複習詞卡查詢參數 DTO /// public class DueFlashcardsQuery { /// /// 限制數量 (默認 10) /// [Range(1, 100, ErrorMessage = "限制數量必須在 1-100 之間")] public int Limit { get; set; } = 10; /// /// 包含今天到期的卡片 /// public bool IncludeToday { get; set; } = true; /// /// 包含過期的卡片 /// public bool IncludeOverdue { get; set; } = true; /// /// 只返回用戶收藏的卡片 /// public bool FavoritesOnly { get; set; } = false; } /// /// 複習統計 DTO /// public class ReviewStats { /// /// 今日複習數量 /// public int TodayReviewed { get; set; } /// /// 今日到期數量 /// public int TodayDue { get; set; } /// /// 過期未複習數量 /// public int Overdue { get; set; } /// /// 總複習次數 /// public int TotalReviews { get; set; } /// /// 平均正確率 /// public double AverageAccuracy { get; set; } /// /// 學習連續天數 /// public int StudyStreak { get; set; } }