using Tiku.Domain.Learning; namespace Tiku.Application.Learning; public sealed record StudentTargetRegionItem( Guid MarketRegionId, string RegionCode, string RegionName, DateTimeOffset EffectiveAt, DateTimeOffset? NextChangeAllowedAt); public sealed record ChangeStudentTargetRegionCommand(Guid MarketRegionId); public sealed record OverrideStudentTargetRegionCommand( Guid UserId, Guid MarketRegionId, Guid ChangedBy, string Reason); public sealed record UpsertClassContentAssignmentCommand( Guid? Id, Guid ClassId, Guid ContentSliceId, LearningContentResourceType ResourceType, Guid ResourceId, DateTimeOffset? StartsAt, DateTimeOffset? EndsAt); public sealed record ClassContentAssignmentItem( Guid Id, Guid ClassId, Guid ContentSliceId, LearningContentResourceType ResourceType, Guid ResourceId, DateTimeOffset StartsAt, DateTimeOffset? EndsAt, ClassContentAssignmentStatus Status); public interface ILearningAccessAdministrationService { Task GetTargetRegionAsync( LearningActor actor, CancellationToken cancellationToken = default); Task ChangeTargetRegionAsync( LearningActor actor, ChangeStudentTargetRegionCommand command, CancellationToken cancellationToken = default); Task OverrideTargetRegionAsync( Guid tenantId, OverrideStudentTargetRegionCommand command, CancellationToken cancellationToken = default); Task> GetClassAssignmentsAsync( Guid tenantId, Guid classId, CancellationToken cancellationToken = default); Task UpsertClassAssignmentAsync( Guid tenantId, Guid actorUserId, UpsertClassContentAssignmentCommand command, CancellationToken cancellationToken = default); Task RevokeClassAssignmentAsync( Guid tenantId, Guid actorUserId, Guid assignmentId, string? reason, CancellationToken cancellationToken = default); }