95 lines
2.7 KiB
C#
95 lines
2.7 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
|
|
namespace DramaLing.Api.Models.Entities;
|
|
|
|
/// <summary>
|
|
/// 學習會話中的詞卡進度追蹤
|
|
/// </summary>
|
|
public class StudyCard
|
|
{
|
|
public Guid Id { get; set; }
|
|
|
|
public Guid StudySessionId { get; set; }
|
|
|
|
public Guid FlashcardId { get; set; }
|
|
|
|
[Required]
|
|
[MaxLength(100)]
|
|
public string Word { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 該詞卡預定的測驗類型列表 (JSON序列化)
|
|
/// 例如: ["flip-memory", "vocab-choice", "sentence-fill"]
|
|
/// </summary>
|
|
[Required]
|
|
public string PlannedTestsJson { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// 詞卡在會話中的順序
|
|
/// </summary>
|
|
public int Order { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否已完成所有測驗
|
|
/// </summary>
|
|
public bool IsCompleted { get; set; } = false;
|
|
|
|
/// <summary>
|
|
/// 詞卡學習開始時間
|
|
/// </summary>
|
|
public DateTime StartedAt { get; set; } = DateTime.UtcNow;
|
|
|
|
/// <summary>
|
|
/// 詞卡學習完成時間
|
|
/// </summary>
|
|
public DateTime? CompletedAt { get; set; }
|
|
|
|
// Navigation Properties
|
|
public virtual StudySession StudySession { get; set; } = null!;
|
|
public virtual Flashcard Flashcard { get; set; } = null!;
|
|
public virtual ICollection<TestResult> TestResults { get; set; } = new List<TestResult>();
|
|
|
|
// Helper Properties (不映射到資料庫)
|
|
public List<string> PlannedTests
|
|
{
|
|
get => string.IsNullOrEmpty(PlannedTestsJson)
|
|
? new List<string>()
|
|
: System.Text.Json.JsonSerializer.Deserialize<List<string>>(PlannedTestsJson) ?? new List<string>();
|
|
set => PlannedTestsJson = System.Text.Json.JsonSerializer.Serialize(value);
|
|
}
|
|
|
|
public int CompletedTestsCount => TestResults?.Count ?? 0;
|
|
public int PlannedTestsCount => PlannedTests.Count;
|
|
public bool AllTestsCompleted => CompletedTestsCount >= PlannedTestsCount;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 詞卡內的測驗結果記錄
|
|
/// </summary>
|
|
public class TestResult
|
|
{
|
|
public Guid Id { get; set; }
|
|
|
|
public Guid StudyCardId { get; set; }
|
|
|
|
[Required]
|
|
[MaxLength(50)]
|
|
public string TestType { get; set; } = string.Empty; // flip-memory, vocab-choice, etc.
|
|
|
|
public bool IsCorrect { get; set; }
|
|
|
|
public string? UserAnswer { get; set; }
|
|
|
|
/// <summary>
|
|
/// 信心等級 (1-5, 主要用於翻卡記憶測驗)
|
|
/// </summary>
|
|
[Range(1, 5)]
|
|
public int? ConfidenceLevel { get; set; }
|
|
|
|
public int ResponseTimeMs { get; set; }
|
|
|
|
public DateTime CompletedAt { get; set; } = DateTime.UtcNow;
|
|
|
|
// Navigation Properties
|
|
public virtual StudyCard StudyCard { get; set; } = null!;
|
|
} |