feat: migrate direct tenant content and learning endpoints

This commit is contained in:
xiong
2026-07-26 17:57:03 +08:00
parent 1d7e09b1f0
commit 91a4162908
18 changed files with 4079 additions and 0 deletions

View File

@@ -28,6 +28,62 @@ public sealed record FavoriteWordCommand(Guid WordId, bool? Favorite, string? No
public sealed record LearningLimitFilter(int? Limit = null, string? Status = null, Guid? UnitId = null);
public sealed record LearningStatsItem(
int AnswerCount,
int CorrectCount,
int WrongCount,
int FavoriteQuestionCount,
int FavoriteWordCount,
int WordProgressCount,
int PracticeSessionCount,
int PracticeReportCount);
public sealed record LearningTrendItem(DateOnly Date, int AnswerCount, int CorrectCount, int WrongCount);
public sealed record LearningLeaderboardItem(
Guid UserId,
string? DisplayName,
int AnswerCount,
int CorrectCount,
int WrongCount,
decimal Accuracy);
public sealed record LearningLeaderboardResult(
string Metric,
string Period,
IReadOnlyCollection<LearningLeaderboardItem> Items,
LearningLeaderboardItem? CurrentUser,
DateTimeOffset GeneratedAt);
public sealed record WrongQuestionReviewPlanItem(Guid QuestionId, int WrongCount, DateTimeOffset LastWrongAt);
public sealed record WrongQuestionReviewPlan(
IReadOnlyCollection<WrongQuestionReviewPlanItem> Items,
JsonElement NextAction);
public sealed record WordReviewPlanItem(
Guid WordId,
WordProgressStatus Status,
DateTimeOffset? NextReviewAt,
int CorrectCount,
int WrongCount,
WordDueLevel DueLevel);
public sealed record WordReviewPlan(
IReadOnlyCollection<WordReviewPlanItem> Items,
JsonElement NextAction);
public sealed record WordReviewCommand(Guid WordId, string? Result, DateTimeOffset? NextReviewAt);
public sealed record WordStatsItem(
int Total,
int NewCount,
int LearningCount,
int ReviewingCount,
int MasteredCount,
int DueCount,
int FavoriteCount);
public sealed record PracticeSessionCommand(
string? Mode,
string? TargetType,