using Microsoft.EntityFrameworkCore; using SameBeat.Application.Interfejsy; using SameBeat.Domain.Encje; using SameBeat.Infrastructure.BazaDanych; namespace SameBeat.Infrastructure.Repozytoria; public class RepozytoriumCzatu : IRepozytoriumCzatu { private readonly KontekstBazyDanych _kontekst; public RepozytoriumCzatu(KontekstBazyDanych kontekst) { _kontekst = kontekst; } public Task ZnajdzUczestnikaPoIdAsync(Guid id, CancellationToken token = default) => _kontekst.UczestnicyCzatu.SingleOrDefaultAsync(u => u.Id == id, token); public void DodajUczestnika(UczestnikCzatu uczestnik) => _kontekst.UczestnicyCzatu.Add(uczestnik); public void DodajWiadomosc(WiadomoscCzatu wiadomosc) => _kontekst.WiadomosciCzatu.Add(wiadomosc); public Task PobierzOstatniaWiadomoscUczestnikaAsync(Guid nadawcaTozsamoscId, CancellationToken token = default) => _kontekst.WiadomosciCzatu .Where(w => w.NadawcaTozsamoscId == nadawcaTozsamoscId) .OrderByDescending(w => w.WyslanoUtc) .FirstOrDefaultAsync(token); public async Task> PobierzHistorieAsync(Guid wydarzenieId, int liczbaWiadomosci, CancellationToken token = default) { var ostatnieOdNajnowszej = await _kontekst.WiadomosciCzatu .Where(w => w.WydarzenieId == wydarzenieId && !w.Usunieta) .OrderByDescending(w => w.WyslanoUtc) .Take(liczbaWiadomosci) .ToListAsync(token); // Odwrocenie do kolejnosci chronologicznej -- API zwraca historie od najstarszej do najnowszej, // gotowa do bezposredniego wyswietlenia w czacie. ostatnieOdNajnowszej.Reverse(); return ostatnieOdNajnowszej; } public Task ZnajdzWiadomoscPoIdAsync(Guid id, CancellationToken token = default) => _kontekst.WiadomosciCzatu.SingleOrDefaultAsync(w => w.Id == id, token); }