using SameBeat.Application.DTO; using SameBeat.Application.Interfejsy; using SameBeat.Domain.Enumy; namespace SameBeat.Application.Serwisy; public class SerwisWydarzen : ISerwisWydarzen { private readonly IRepozytoriumWydarzen _repozytorium; private readonly IRepozytoriumSceny _repozytoriumSceny; private readonly IRepozytoriumUtworow _repozytoriumUtworow; private readonly IRepozytoriumPoczekalni _repozytoriumPoczekalni; public SerwisWydarzen( IRepozytoriumWydarzen repozytorium, IRepozytoriumSceny repozytoriumSceny, IRepozytoriumUtworow repozytoriumUtworow, IRepozytoriumPoczekalni repozytoriumPoczekalni) { _repozytorium = repozytorium; _repozytoriumSceny = repozytoriumSceny; _repozytoriumUtworow = repozytoriumUtworow; _repozytoriumPoczekalni = repozytoriumPoczekalni; } public async Task PobierzBiezacyStatusAsync(CancellationToken token = default) { var wydarzenie = await _repozytorium.PobierzOstatnieAsync(token); // Brak jakiegokolwiek wydarzenia w bazie to normalny stan na starcie projektu (ETAP 1) -- // widz ma wtedy zobaczyc OFFLINE, a nie blad. if (wydarzenie is null) { var cisza = new StanMuzykiDto(null, null, null, null, null, 0, StanOdtwarzania.Zatrzymana, 0.9f); var brakMikrofonu = new StanMikrofonuDto(null, null, null); return new StatusWydarzeniaDto(Live: false, Nazwa: null, UkladSceny: UkladSceny.Grid4, Sloty: new List(), Muzyka: cisza, Mikrofon: brakMikrofonu); } // Widzowie na /party musza znac poczatkowy stan sceny, muzyki i mikrofonu od razu po wejsciu, // zanim przyjdzie pierwszy event SignalR (ScenaZmieniona/UkladScenyZmieniony/StanMuzykiZmieniony/ // MikrofonPrzyznany) -- stad dolaczamy wszystkie trzy tutaj. var sloty = await _repozytoriumSceny.PobierzZajeteZNickamiAsync(wydarzenie.Id, token); var muzyka = await BudowniczyStanuMuzyki.ZbudujAsync(wydarzenie, _repozytoriumUtworow, token); var mikrofon = await BudowniczyStanuMikrofonu.ZbudujAsync(wydarzenie, _repozytoriumPoczekalni, _repozytoriumSceny, token); return new StatusWydarzeniaDto( Live: wydarzenie.Status == StatusWydarzenia.Live, Nazwa: wydarzenie.Nazwa, UkladSceny: wydarzenie.UkladSceny, Sloty: sloty, Muzyka: muzyka, Mikrofon: mikrofon); } }