74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
using System.ComponentModel.DataAnnotations;
|
||
|
||
namespace DramaLing.Api.Models.Entities;
|
||
|
||
/// <summary>
|
||
/// 詞卡複習記錄實體 - 支援間隔重複系統
|
||
/// </summary>
|
||
public class FlashcardReview
|
||
{
|
||
public Guid Id { get; set; }
|
||
|
||
/// <summary>
|
||
/// 詞卡ID (外鍵)
|
||
/// </summary>
|
||
[Required]
|
||
public Guid FlashcardId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 用戶ID (外鍵)
|
||
/// </summary>
|
||
[Required]
|
||
public Guid UserId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 連續成功次數 - 用於間隔重複算法 (2^n 天數計算)
|
||
/// 答對時增加,答錯時重置為0
|
||
/// </summary>
|
||
public int SuccessCount { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 下次複習日期 - 基於間隔重複算法計算
|
||
/// 公式: 今天 + 2^SuccessCount 天
|
||
/// </summary>
|
||
public DateTime NextReviewDate { get; set; } = DateTime.UtcNow.AddDays(1);
|
||
|
||
/// <summary>
|
||
/// 最後複習日期
|
||
/// </summary>
|
||
public DateTime? LastReviewDate { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最後成功複習日期 (答對的日期)
|
||
/// </summary>
|
||
public DateTime? LastSuccessDate { get; set; }
|
||
|
||
/// <summary>
|
||
/// 累計跳過次數 (統計用)
|
||
/// </summary>
|
||
public int TotalSkipCount { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 累計錯誤次數 (統計用)
|
||
/// </summary>
|
||
public int TotalWrongCount { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 累計正確次數 (統計用)
|
||
/// </summary>
|
||
public int TotalCorrectCount { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 創建時間
|
||
/// </summary>
|
||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||
|
||
/// <summary>
|
||
/// 更新時間
|
||
/// </summary>
|
||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||
|
||
// Navigation Properties
|
||
public virtual Flashcard Flashcard { get; set; } = null!;
|
||
public virtual User User { get; set; } = null!;
|
||
} |