using Microsoft.EntityFrameworkCore; using SameBeat.Application.DTO; using SameBeat.Application.Interfejsy; using SameBeat.Domain.Encje; using SameBeat.Infrastructure.BazaDanych; namespace SameBeat.Infrastructure.Repozytoria; public class RepozytoriumSceny : IRepozytoriumSceny { private readonly KontekstBazyDanych _kontekst; public RepozytoriumSceny(KontekstBazyDanych kontekst) { _kontekst = kontekst; } public Task ZnajdzPoNumerzeAsync(Guid wydarzenieId, int numerSlotu, CancellationToken token = default) => _kontekst.SlotySceny.SingleOrDefaultAsync(s => s.WydarzenieId == wydarzenieId && s.NumerSlotu == numerSlotu, token); public Task ZnajdzPoUczestnikuAsync(Guid wydarzenieId, Guid uczestnikOczekujacyId, CancellationToken token = default) => _kontekst.SlotySceny.SingleOrDefaultAsync(s => s.WydarzenieId == wydarzenieId && s.UczestnikOczekujacyId == uczestnikOczekujacyId, token); public Task> PobierzZajeteDlaWydarzeniaAsync(Guid wydarzenieId, CancellationToken token = default) => _kontekst.SlotySceny .Where(s => s.WydarzenieId == wydarzenieId && s.UczestnikOczekujacyId != null) .ToListAsync(token); public Task> PobierzZajeteZNickamiAsync(Guid wydarzenieId, CancellationToken token = default) => _kontekst.SlotySceny .Where(s => s.WydarzenieId == wydarzenieId && s.UczestnikOczekujacyId != null) .Join(_kontekst.UczestnicyOczekujacy, slot => slot.UczestnikOczekujacyId, uczestnik => uczestnik.Id, (slot, uczestnik) => new SlotScenyDto(slot.NumerSlotu, uczestnik.Nick)) .OrderBy(s => s.NumerSlotu) .ToListAsync(token); public void Dodaj(SlotSceny slot) => _kontekst.SlotySceny.Add(slot); }