namespace Tiku.Application.Learning; public interface ILearningAnalyticsService { Task GetStatsAsync(LearningActor actor, CancellationToken cancellationToken = default); Task> GetTrendAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task GetLeaderboardAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); } public interface IAnsweringService { Task SubmitAnswerAsync(LearningActor actor, SubmitAnswerCommand command, CancellationToken cancellationToken = default); } public interface IQuestionReviewService { Task> GetFavoriteQuestionsAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task ToggleFavoriteQuestionAsync(LearningActor actor, QuestionActionCommand command, CancellationToken cancellationToken = default); Task> GetWrongQuestionsAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task GetWrongQuestionReviewPlanAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task ResolveWrongQuestionAsync(LearningActor actor, ResolveWrongQuestionCommand command, CancellationToken cancellationToken = default); } public interface IWordLearningService { Task> GetWordProgressAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task GetWordReviewPlanAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task UpdateWordProgressAsync(LearningActor actor, WordProgressCommand command, CancellationToken cancellationToken = default); Task ReviewWordAsync(LearningActor actor, WordReviewCommand command, CancellationToken cancellationToken = default); Task GetWordStatsAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task> GetFavoriteWordsAsync(LearningActor actor, LearningLimitFilter filter, CancellationToken cancellationToken = default); Task ToggleFavoriteWordAsync(LearningActor actor, FavoriteWordCommand command, CancellationToken cancellationToken = default); } public interface IPracticeSessionService { Task CreatePracticeSessionAsync(LearningActor actor, PracticeSessionCommand command, CancellationToken cancellationToken = default); Task GetPracticeSessionDetailAsync(LearningActor actor, PracticeSessionFilter filter, CancellationToken cancellationToken = default); Task SubmitPracticeSessionAsync(LearningActor actor, SubmitPracticeSessionCommand command, CancellationToken cancellationToken = default); } public interface IPracticeReportService { Task GetPracticeSessionReportAsync(LearningActor actor, PracticeSessionFilter filter, CancellationToken cancellationToken = default); Task> GetPracticeReportsAsync(LearningActor actor, PracticeSessionFilter filter, CancellationToken cancellationToken = default); Task> GetPracticeHistoryAsync(LearningActor actor, PracticeSessionFilter filter, CancellationToken cancellationToken = default); }