feat: add student engagement endpoints

This commit is contained in:
xiong
2026-07-26 18:39:55 +08:00
parent 387b85342a
commit 89e1f2a4df
5 changed files with 547 additions and 0 deletions

View File

@@ -73,9 +73,85 @@ public sealed record ExamCountdownList(
Guid? RegionId,
Guid? SchoolId);
public sealed record ProfileNotificationQuery(string? Status = null, int? Limit = null);
public sealed record ProfileNotificationItem(
Guid Id,
string NotificationType,
string Status,
string Severity,
string Title,
string Message,
string? ActionLabel,
string? ActionPath,
string? SourceType,
Guid? SourceId,
JsonElement Metadata,
DateTimeOffset? ReadAt,
DateTimeOffset CreatedAt);
public sealed record ProfileNotificationList(
IReadOnlyCollection<ProfileNotificationItem> Items,
IReadOnlyDictionary<string, int> Summary);
public sealed record UpdateNotificationStatusCommand(
IReadOnlyCollection<Guid> NotificationIds,
string? Status);
public sealed record BadgeQuery(bool IncludeLocked = false, string? Category = null, int? Limit = null);
public sealed record BadgeItem(
Guid Id,
string Name,
string? Description,
string? Category,
string? IconUrl,
int? Level,
string? UnlockType,
JsonElement ConditionExtra,
bool IsUnlocked,
DateTimeOffset? GrantedAt,
string? Note,
int Order);
public sealed record BadgeList(IReadOnlyCollection<BadgeItem> Items, int Total, int Unlocked, bool IncludeLocked);
public sealed record FeedbackQuery(string? Status = null, string? Type = null, int? Limit = null);
public sealed record FeedbackItem(
Guid Id,
Guid? QuestionId,
string? Type,
string? Title,
string? Category,
string? Description,
string Status,
string Priority,
string? Contact,
JsonElement Attachments,
JsonElement Metadata,
DateTimeOffset CreatedAt,
DateTimeOffset UpdatedAt);
public sealed record SubmitFeedbackCommand(
Guid? QuestionId,
string? Type,
string? Category,
string? Title,
string Description,
string? Priority,
string? Contact,
JsonElement Attachments,
JsonElement Metadata);
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);
Task<ProfileNotificationList> GetNotificationsAsync(ProfileActor actor, ProfileNotificationQuery query, CancellationToken cancellationToken = default);
Task<ProfileNotificationList> UpdateNotificationStatusAsync(ProfileActor actor, UpdateNotificationStatusCommand command, CancellationToken cancellationToken = default);
Task<BadgeList> GetBadgesAsync(ProfileActor actor, BadgeQuery query, CancellationToken cancellationToken = default);
Task<IReadOnlyCollection<FeedbackItem>> GetFeedbacksAsync(ProfileActor actor, FeedbackQuery query, CancellationToken cancellationToken = default);
Task<FeedbackItem> SubmitFeedbackAsync(ProfileActor actor, SubmitFeedbackCommand command, CancellationToken cancellationToken = default);
}