using Luna.Identity.Abstractions; namespace Luna.Identity; public class PairingCodeGenerator : IPairingCodeGenerator { private const int TimeToLiveMinutes = 5; private static readonly char[] CodeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".ToCharArray(); public PairingCode Generate(string channelType, string userId) => new( Code: GenerateCode(), ChannelType: channelType, UserId: userId, CreatedAt: DateTimeOffset.UtcNow, TimeToLive: TimeSpan.FromMinutes(TimeToLiveMinutes)); private string GenerateCode() => new(Enumerable.Range(0, 6) .Select(_ => CodeAlphabet[Random.Shared.Next(CodeAlphabet.Length)]) .ToArray()); }