Files
tiku-backend.net/Tiku.Application/Learning/LearningTargetModels.cs
xiong 3f5957d744
Some checks failed
ci / release-gate (push) Has been cancelled
feat(content): establish v2 learning delivery foundation
2026-08-06 09:52:18 +08:00

110 lines
3.2 KiB
C#

using Tiku.Domain.Learning;
namespace Tiku.Application.Learning;
public sealed record LearningBusinessContextItem(
Guid BusinessLineId,
string BusinessCode,
string BusinessName,
Guid TenantBusinessLicenseId,
DateTimeOffset? LicenseEndsAt,
Guid? PrimaryProfileVersionId,
IReadOnlyCollection<Guid> AlternateProfileVersionIds,
int MaxActiveTargets,
int MaxAlternateTargets,
int TargetChangeCooldownDays);
public sealed record LearningContextItem(IReadOnlyCollection<LearningBusinessContextItem> Businesses);
public sealed record LearningTargetItem(
Guid ExamTargetProfileVersionId,
string ProfileCode,
string DisplayName,
int? ExamYear,
bool IsBaseTarget,
bool MayBePrimary,
bool MayBeAlternate,
bool IsPrimary,
bool IsAlternate);
public sealed record LearningTargetSelectionItem(
Guid BusinessLineId,
Guid PrimaryProfileVersionId,
IReadOnlyCollection<Guid> AlternateProfileVersionIds,
DateTimeOffset ChangedAt,
DateTimeOffset? NextChangeAllowedAt);
public sealed record ChangeLearningTargetsCommand(
Guid PrimaryProfileVersionId,
IReadOnlyCollection<Guid> AlternateProfileVersionIds);
public interface IStudentLearningTargetService
{
Task<LearningContextItem> GetContextAsync(
LearningActor actor,
CancellationToken cancellationToken = default);
Task<IReadOnlyCollection<LearningTargetItem>> GetTargetsAsync(
LearningActor actor,
Guid businessLineId,
CancellationToken cancellationToken = default);
Task<LearningTargetSelectionItem> ChangeTargetsAsync(
LearningActor actor,
Guid businessLineId,
ChangeLearningTargetsCommand command,
CancellationToken cancellationToken = default);
Task<LearningTargetSelectionItem> OverrideTargetsAsync(
LearningActor student,
Guid businessLineId,
ChangeLearningTargetsCommand command,
Guid changedBy,
string reason,
CancellationToken cancellationToken = default);
}
public sealed record UpsertClassAssignmentGrantCommand(
Guid? Id,
Guid ClassId,
Guid ProductAccessManifestVersionId,
AccessResourceType ResourceType,
Guid ResourceId,
DateTimeOffset? StartsAt,
DateTimeOffset? EndsAt);
public sealed record ClassAssignmentGrantItem(
Guid Id,
Guid ClassId,
Guid ProductAccessManifestVersionId,
AccessResourceType ResourceType,
Guid ResourceId,
DateTimeOffset StartsAt,
DateTimeOffset? EndsAt,
ClassAssignmentGrantStatus Status,
Guid? CreatedBy,
Guid? RevokedBy,
string? RevokedReason);
public interface IV2LearningAccessAdministrationService
{
Task<IReadOnlyCollection<ClassAssignmentGrantItem>> GetClassGrantsAsync(
Guid tenantId,
Guid classId,
CancellationToken cancellationToken = default);
Task<ClassAssignmentGrantItem> UpsertClassGrantAsync(
Guid tenantId,
Guid actorUserId,
UpsertClassAssignmentGrantCommand command,
CancellationToken cancellationToken = default);
Task<ClassAssignmentGrantItem> RevokeClassGrantAsync(
Guid tenantId,
Guid actorUserId,
Guid classId,
Guid grantId,
string reason,
CancellationToken cancellationToken = default);
}