using SameBeat.Domain.Wyjatki; namespace SameBeat.Domain.Encje; /// /// Jedna pozycja w kolejce odtwarzania konkretnego wydarzenia -- prosta, uporzadkowana kolejka /// (Kolejnosc rosnie od 0). MVP na ETAPIE 4 ma wylacznie dodaj-na-koniec / usun -- zmiana kolejnosci /// (drag&drop) to swiadome uproszczenie, moze dojsc w kolejnym etapie, ale nie jest tu potrzebna, /// zeby playlista dzialala. /// public class PozycjaPlaylisty { public Guid Id { get; private set; } public Guid WydarzenieId { get; private set; } public Guid UtworId { get; private set; } public int Kolejnosc { get; private set; } // Prywatny konstruktor bez parametrow -- wymagany przez EF Core do materializacji encji z bazy. private PozycjaPlaylisty() { } private PozycjaPlaylisty(Guid id, Guid wydarzenieId, Guid utworId, int kolejnosc) { Id = id; WydarzenieId = wydarzenieId; UtworId = utworId; Kolejnosc = kolejnosc; } public static PozycjaPlaylisty Utworz(Guid wydarzenieId, Guid utworId, int kolejnosc) { if (wydarzenieId == Guid.Empty) { throw new NieprawidlowyStanEncjiWyjatek("Pozycja playlisty musi byc powiazana z konkretnym wydarzeniem."); } if (utworId == Guid.Empty) { throw new NieprawidlowyStanEncjiWyjatek("Pozycja playlisty musi wskazywac na konkretny utwor."); } if (kolejnosc < 0) { throw new NieprawidlowyStanEncjiWyjatek("Kolejnosc pozycji playlisty nie moze byc ujemna."); } return new PozycjaPlaylisty(Guid.NewGuid(), wydarzenieId, utworId, kolejnosc); } }