using SameBeat.Application.DTO; using SameBeat.Application.Interfejsy; using SameBeat.Domain.Encje; namespace SameBeat.Application.Serwisy; /// /// Buduje StanMikrofonuDto z aktualnego stanu Wydarzenie -- wspolne dla SerwisMikrofonu (po kazdej /// akcji hosta / GET stanu) i SerwisWydarzen (GET /api/events/current), zeby ksztalt danych zawsze byl /// identyczny w obu miejscach. Dokladnie ten sam powod, dla ktorego istnieje juz BudowniczyStanuMuzyki. /// public static class BudowniczyStanuMikrofonu { public static async Task ZbudujAsync( Wydarzenie wydarzenie, IRepozytoriumPoczekalni repozytoriumPoczekalni, IRepozytoriumSceny repozytoriumSceny, CancellationToken token) { if (wydarzenie.AktywnyMikrofonUczestnikId is not Guid uczestnikId) { return new StanMikrofonuDto(null, null, null); } var uczestnik = await repozytoriumPoczekalni.ZnajdzPoIdAsync(uczestnikId, token); var slot = await repozytoriumSceny.ZnajdzPoUczestnikuAsync(wydarzenie.Id, uczestnikId, token); return new StanMikrofonuDto(slot?.NumerSlotu, uczestnik?.Nick, wydarzenie.AktywnyMikrofonKoniecUtc); } }