Files
tiku-backend.net/Tiku.Application/Profile/ProfileModels.cs
2026-07-26 18:36:28 +08:00

82 lines
2.3 KiB
C#

using System.Text.Json;
namespace Tiku.Application.Profile;
public sealed record ProfileActor(Guid TenantId, Guid UserId);
public sealed record ProfileQuery(int? RecentLimit = null, int? Limit = null);
public sealed record UpdateProfileCommand(
string? Name,
string? AvatarPreset,
Guid? RegionId,
Guid? SelectedSchoolId,
Guid? SelectedMajorId,
JsonElement? Stats,
JsonElement? Progress,
JsonElement? ModuleSelections,
JsonElement? RecentActivities);
public sealed record StudentProfileItem(
Guid ProfileId,
Guid UserId,
string? Username,
string? Phone,
string? Email,
string? Name,
string AvatarPreset,
string AvatarDisplayUrl,
string PrimaryRole,
int Score,
Guid? RegionId,
string? RegionName,
Guid? SelectedSchoolId,
string? SelectedSchoolName,
Guid? SelectedMajorId,
string? SelectedMajorName,
int QuestionsAnsweredToday,
int MasteredWordsCount,
DateOnly? LastCheckInDate,
JsonElement Stats,
JsonElement Progress,
JsonElement ModuleSelections,
JsonElement RecentActivities,
IReadOnlyCollection<RecentPracticeItem> RecentPractices,
StudentMembershipItem Membership);
public sealed record RecentPracticeItem(
Guid Id,
string? PracticeType,
string? TargetName,
int Progress,
DateTimeOffset? LastAccessAt,
DateTimeOffset? LastPracticeAt);
public sealed record StudentMembershipItem(bool IsSvip, DateTimeOffset? ExpiresAt);
public sealed record ExamCountdownItem(
Guid Id,
string? LegacyId,
Guid? RegionId,
Guid? SchoolId,
string ExamName,
DateTimeOffset? ExamAt,
string? ExamType,
string? Description,
JsonElement Metadata,
int Order,
bool IsActive,
int? DaysLeft);
public sealed record ExamCountdownList(
IReadOnlyCollection<ExamCountdownItem> Items,
Guid? RegionId,
Guid? SchoolId);
public interface IProfileService
{
Task<StudentProfileItem> GetMeAsync(ProfileActor actor, ProfileQuery query, CancellationToken cancellationToken = default);
Task<StudentProfileItem> UpdateMeAsync(ProfileActor actor, UpdateProfileCommand command, CancellationToken cancellationToken = default);
Task<ExamCountdownList> GetExamCountdownsAsync(ProfileActor actor, ProfileQuery query, CancellationToken cancellationToken = default);
}