using SameBeat.Application.DTO; using SameBeat.Application.Komendy; namespace SameBeat.Application.Interfejsy; /// /// Logika czatu na zywo (ETAP 6) -- dostepnego dla kazdego widza, nie tylko uczestnikow na scenie. /// Tozsamosc czatu (UczestnikCzatu) jest lekka i celowo osobna od poczekalni: bez sekretu sesji, bez /// LiveKit, tworzona przy pierwszym wejsciu na czat. /// public interface ISerwisCzatu { /// Tworzy nowa tozsamosc czatu dla biezacego wydarzenia. Task> DolaczAsync(DolaczDoCzatuKomenda komenda, CancellationToken token = default); /// /// Wysyla wiadomosc -- odmawia, gdy tozsamosc jest zbanowana, wyciszona, albo pisze za szybko /// (rate limit liczony z ostatniej wiadomosci w bazie, nie ze stanu w pamieci procesu). Zwraca /// wariant "hostowy" (z UczestnikCzatuId) -- to controller decyduje, ktora czesc rozglosic /// publicznie (bez ID), a ktora tylko do grupy "host" (z ID), patrz WiadomoscCzatuHostaDto. /// Task> WyslijWiadomoscAsync(WyslijWiadomoscKomenda komenda, CancellationToken token = default); /// Ostatnie wiadomosci NIE usuniete dla biezacego wydarzenia -- do zaladowania historii przed pierwszymi zdarzeniami SignalR. Task>> PobierzHistorieAsync(CancellationToken token = default); /// Jak PobierzHistorieAsync, ale z UczestnikCzatuId nadawcy kazdej wiadomosci -- wylacznie dla hosta, potrzebne do moderacji (wycisz/odcisz/zbanuj). Task>> PobierzHistorieDlaHostaAsync(CancellationToken token = default); /// Soft-delete wiadomosci przez hosta. Task UsunWiadomoscAsync(Guid wiadomoscId, CancellationToken token = default); Task WyciszAsync(Guid uczestnikCzatuId, CancellationToken token = default); Task OdciszAsync(Guid uczestnikCzatuId, CancellationToken token = default); Task ZbanujAsync(Guid uczestnikCzatuId, CancellationToken token = default); }