using Microsoft.Extensions.Logging; using SameBeat.Application.DTO; using SameBeat.Application.Interfejsy; using SameBeat.Application.Walidacja; using SameBeat.Application.Zapytania; namespace SameBeat.Application.Serwisy; /// /// Cienka warstwa orkiestracji nad -- oddziela walidacje /// wejscia (Application) od szczegolow podpisu JWT LiveKit (Infrastructure). /// public sealed class SerwisDostepuLiveKit : ISerwisDostepuLiveKit { private readonly ISerwisTokenowLiveKit _serwisTokenowLiveKit; private readonly string _urlLiveKit; private readonly string _nazwaPokojuGlowna; private readonly ILogger _logger; public SerwisDostepuLiveKit( ISerwisTokenowLiveKit serwisTokenowLiveKit, string urlLiveKit, string nazwaPokojuGlowna, ILogger logger) { _serwisTokenowLiveKit = serwisTokenowLiveKit; _urlLiveKit = urlLiveKit; _nazwaPokojuGlowna = nazwaPokojuGlowna; _logger = logger; } public WynikOperacji WygenerujDostep(WygenerujTokenLiveKitZapytanie zapytanie) { var bladWalidacji = WalidatorWygenerujTokenLiveKitZapytanie.Waliduj(zapytanie); if (bladWalidacji is not null) { return WynikOperacji.Niepowodzenie(bladWalidacji); } if (string.IsNullOrWhiteSpace(_urlLiveKit)) { // Brak konfiguracji LiveKit nie moze objawic sie NullReferenceException u klienta -- // to normalny stan na swiezo postawionym srodowisku, dopoki ktos nie uzupelni ustawien. _logger.LogWarning("Zadanie tokenu LiveKit odrzucone -- adres serwera LiveKit nie jest skonfigurowany."); return WynikOperacji.Niepowodzenie("Usluga LiveKit nie jest jeszcze skonfigurowana na serwerze."); } var token = _serwisTokenowLiveKit.WygenerujToken(zapytanie.Nick, zapytanie.Nick, zapytanie.Rola, _nazwaPokojuGlowna); return WynikOperacji.Ok(new OdpowiedzTokenuLiveKitDto(token, _urlLiveKit)); } }