namespace Tiku.Application.Learning; public sealed record EffectiveLearningAccessSnapshot( Guid TenantId, Guid UserId, Guid BusinessLineId, Guid PrimaryProfileVersionId, IReadOnlySet AlternateProfileVersionIds, IReadOnlySet ContentReleaseIds, IReadOnlySet AudienceSegmentIds, IReadOnlySet ManifestVersionIds, long GrantVersion, long ContentVersion, long StrongRevocationVersion, DateTimeOffset ValidUntil, DateTimeOffset CompiledAt); public interface IEffectiveLearningAccessService { Task GetSnapshotAsync( LearningActor actor, Guid businessLineId, CancellationToken cancellationToken = default); Task InvalidateAsync( Guid tenantId, Guid userId, Guid businessLineId, CancellationToken cancellationToken = default); } public interface ILearningStrongRevocationService { Task EnsureVersionAsync( LearningActor actor, long expectedVersion, CancellationToken cancellationToken = default); Task InvalidateAsync( Guid tenantId, Guid userId, CancellationToken cancellationToken = default); }