using Flaro.Data; using Flaro.Metadata; using Microsoft.EntityFrameworkCore; namespace Flaro.Api; /// Holt die Metadaten-Einstellungen aus der Datenbank. /// /// /// Hier und nicht in Flaro.Data: sonst müsste die Datenschicht /// den Metadaten-Anbieter kennen. So zeigen beide Richtungen auf den Kern und /// keine aufeinander. /// /// Je Anfrage einmal gelesen und dann gemerkt. Ohne das fragte ein Scan über /// tausend Titel tausendmal dieselbe Zeile ab. /// public sealed class DatabaseTmdbSettings(FlaroContext db) : ITmdbSettingsSource { public const string ApiKeyName = "metadata.tmdb.apiKey"; public const string LanguageName = "metadata.language"; private TmdbSettings? _gemerkt; public async Task GetAsync(CancellationToken ct = default) { if (_gemerkt is not null) return _gemerkt; var zeilen = await db.Settings .AsNoTracking() .Where(s => s.Key == ApiKeyName || s.Key == LanguageName) .ToDictionaryAsync(s => s.Key, s => s.Value, ct); return _gemerkt = TmdbSettings.Resolve( zeilen.GetValueOrDefault(ApiKeyName), zeilen.GetValueOrDefault(LanguageName)); } }