using SameBeat.Domain.Wyjatki; namespace SameBeat.Domain.Encje; /// /// Pojedyncze wlaczenie transmisji live dla wydarzenia -- od momentu, gdy host wystartowal impreze, /// do jej zakonczenia. Jedno wydarzenie moze miec wiele sesji w czasie (kolejne "live"). /// public class SesjaWydarzenia { public Guid Id { get; private set; } public Guid WydarzenieId { get; private set; } public Guid HostId { get; private set; } public DateTime RozpoczetoUtc { get; private set; } /// Null dopoki sesja trwa -- to normalny stan, nie brak danych. public DateTime? ZakonczonoUtc { get; private set; } public bool CzyTrwa => ZakonczonoUtc is null; private SesjaWydarzenia() { } private SesjaWydarzenia(Guid id, Guid wydarzenieId, Guid hostId, DateTime rozpoczetoUtc) { Id = id; WydarzenieId = wydarzenieId; HostId = hostId; RozpoczetoUtc = rozpoczetoUtc; } public static SesjaWydarzenia Rozpocznij(Guid wydarzenieId, Guid hostId) { if (wydarzenieId == Guid.Empty) { throw new NieprawidlowyStanEncjiWyjatek("Sesja musi byc powiazana z konkretnym wydarzeniem."); } if (hostId == Guid.Empty) { throw new NieprawidlowyStanEncjiWyjatek("Sesja musi miec przypisanego hosta."); } return new SesjaWydarzenia(Guid.NewGuid(), wydarzenieId, hostId, DateTime.UtcNow); } public void Zakoncz() { if (ZakonczonoUtc is not null) { throw new NieprawidlowyStanEncjiWyjatek("Sesja jest juz zakonczona."); } ZakonczonoUtc = DateTime.UtcNow; } }