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; }
}