Enhance channel management: add support for preferred weight multipliers and preferred hours in channel shows, update related data models and API endpoints, and implement validation for new properties. Refactor scheduling logic to utilize preferred hours for weight adjustments during show planning.

This commit is contained in:
Leonid Pershin
2026-07-25 18:44:28 +03:00
parent 358adbff21
commit 8718e8b6bf
36 changed files with 2921 additions and 97 deletions
@@ -0,0 +1,32 @@
namespace TeleWave.Domain.Broadcast;
/// <summary>
/// Окно предпочтительных часов для шоу на канале: полуинтервал часов суток [StartHour, EndHour)
/// в UTC. В эти часы вес шоу в ротации умножается на <see cref="ChannelShow.PreferredWeightMultiplier"/>.
/// Ночные окна задаются двумя записями (напр. 22–24 и 0–2), заворот через полночь не поддерживается.
/// </summary>
public class ChannelShowHour
{
public Guid Id { get; private set; }
public Guid ChannelShowId { get; private set; }
/// <summary>Начало окна — час суток (0..23).</summary>
public int StartHour { get; private set; }
/// <summary>Конец окна (исключительно) — час суток (1..24).</summary>
public int EndHour { get; private set; }
private ChannelShowHour() { }
internal static ChannelShowHour Create(Guid channelShowId, int startHour, int endHour) =>
new()
{
Id = Guid.NewGuid(),
ChannelShowId = channelShowId,
StartHour = startHour,
EndHour = endHour,
};
/// <summary>Попадает ли час суток (0..23) в это окно.</summary>
public bool Contains(int hour) => hour >= StartHour && hour < EndHour;
}