namespace TeleWave.Domain.Broadcast; /// /// Материализованная запись расписания канала: конкретный ассет в конкретное время. Программы и /// реклама идут встык ( одной равен следующей). /// public class ScheduleEntry { public Guid Id { get; private set; } public Guid ChannelId { get; private set; } public Guid MediaAssetId { get; private set; } public ScheduleEntryKind Kind { get; private set; } public DateTimeOffset StartsAtUtc { get; private set; } public DateTimeOffset EndsAtUtc { get; private set; } /// Шоу (для ) — для EPG. public Guid? ShowId { get; private set; } /// Индекс серии в упорядоченном списке шоу (для EPG). public int? EpisodeIndex { get; private set; } private ScheduleEntry() { } public static ScheduleEntry Program( Guid channelId, Guid mediaAssetId, DateTimeOffset startsAtUtc, DateTimeOffset endsAtUtc, Guid showId, int episodeIndex ) => new() { Id = Guid.NewGuid(), ChannelId = channelId, MediaAssetId = mediaAssetId, Kind = ScheduleEntryKind.Program, StartsAtUtc = startsAtUtc, EndsAtUtc = endsAtUtc, ShowId = showId, EpisodeIndex = episodeIndex, }; public static ScheduleEntry Ad( Guid channelId, Guid mediaAssetId, DateTimeOffset startsAtUtc, DateTimeOffset endsAtUtc ) => new() { Id = Guid.NewGuid(), ChannelId = channelId, MediaAssetId = mediaAssetId, Kind = ScheduleEntryKind.Ad, StartsAtUtc = startsAtUtc, EndsAtUtc = endsAtUtc, }; }