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