using System.Text.Json; using RecNet.Application.Common.Interfaces; using RecNet.Domain.Repositories; namespace RecNet.Infrastructure.Services.Configuration; public class ConfigService(IServerConfigRepository repository) : IConfigService { private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web); public async Task GetAsync(string key, CancellationToken ct = default) { var config = await repository.GetAsync(key, ct); if (config == null) return default; return JsonSerializer.Deserialize(config.Value, JsonOptions); } public async Task GetAsync( string key, T defaultValue, CancellationToken ct = default) { var config = await repository.GetAsync(key, ct); if (config == null) return defaultValue; return JsonSerializer.Deserialize(config.Value, JsonOptions) ?? defaultValue; } public async Task SetAsync( string key, T value, CancellationToken ct = default) { var json = JsonSerializer.Serialize(value, JsonOptions); await repository.SetAsync(key, json, ct); await repository.SaveChangesAsync(ct); } }