#if NET using System.Text.Json; using Microsoft.Extensions.Caching.Distributed; using EnvelopeGenerator.Application.Common.Dto; using EnvelopeGenerator.Application.Common.Interfaces.Services; namespace EnvelopeGenerator.Infrastructure; /// /// Implements user preferences storage using the distributed cache (dbo.TBDD_CACHE). /// No DB schema changes required — uses the existing SQL Server distributed cache table. /// Cache key schema: "signflow.user-preferences:{username}" /// Expiration: indefinite (no TTL) — preferences persist until explicitly overwritten. /// public sealed class UserPreferencesService(IDistributedCache cache) : IUserPreferencesService { private const string KeyPrefix = "signflow.user-preferences:"; private static string BuildKey(string username) => $"{KeyPrefix}{username}"; /// public async Task GetAsync(string username, CancellationToken ct = default) { var json = await cache.GetStringAsync(BuildKey(username), ct); if (json is null) return new UserPreferencesDto(); return JsonSerializer.Deserialize(json) ?? new UserPreferencesDto(); } /// public async Task SaveAsync(string username, UserPreferencesDto preferences, CancellationToken ct = default) { var json = JsonSerializer.Serialize(preferences); // No expiration — preferences are stored indefinitely. await cache.SetStringAsync(BuildKey(username), json, new DistributedCacheEntryOptions(), ct); } } #endif