using DramaLing.Api.Models.Entities;
namespace DramaLing.Api.Repositories;
///
/// Flashcard 專門的 Repository 介面,包含業務特定的查詢方法
///
public interface IFlashcardRepository : IRepository
{
// 用戶相關查詢
Task> GetFlashcardsByUserIdAsync(Guid userId);
Task> GetFlashcardsByCardSetIdAsync(Guid cardSetId);
// 學習相關查詢
Task> GetDueFlashcardsAsync(Guid userId, DateTime dueDate);
Task> GetFlashcardsByDifficultyAsync(Guid userId, string difficultyLevel);
Task> GetRecentlyAddedAsync(Guid userId, int count);
Task> GetMostReviewedAsync(Guid userId, int count);
// 統計查詢
Task GetTotalFlashcardsCountAsync(Guid userId);
Task GetMasteredFlashcardsCountAsync(Guid userId);
Task> GetFlashcardsByDifficultyStatsAsync(Guid userId);
// 搜尋功能
Task> SearchFlashcardsAsync(Guid userId, string searchTerm);
Task> GetFavoriteFlashcardsAsync(Guid userId);
Task> GetArchivedFlashcardsAsync(Guid userId);
// 批次操作
Task BulkUpdateMasteryLevelAsync(IEnumerable flashcardIds, int newMasteryLevel);
Task BulkUpdateNextReviewDateAsync(IEnumerable flashcardIds, DateTime newDate);
// 性能優化查詢
Task> GetFlashcardsWithIncludesAsync(Guid userId,
bool includeTags = false,
bool includeStudyRecords = false);
}