Add interstitial endpoints and enhance media and template functionalities: implement MapInterstitialEndpoints in Program.cs, add preview functionality for media assets in MediaEndpoints, and introduce template preview capabilities in TemplateEndpoints. Remove obsolete bumper settings from Channel and related classes to streamline configuration.
This commit is contained in:
@@ -146,6 +146,39 @@ public sealed class GridScheduleGenerator(
|
||||
return new GenerationReport(added, result.Warnings);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сухой прогон: считает, каким получился бы эфир по текущим правилам, но ничего не пишет —
|
||||
/// ни ленты, ни курсоров слотов, ни отметки о применении. Заставки остаются резервом известной
|
||||
/// длины: рендер долгий и может упасть, поэтому он делается только при реальном применении.
|
||||
/// </summary>
|
||||
public async Task<PlanningResult?> PreviewAsync(
|
||||
Guid channelId,
|
||||
DateTimeOffset from,
|
||||
int days,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
var channel = await dbContext
|
||||
.Channels.AsNoTracking()
|
||||
.Include(c => c.BumperTemplates)
|
||||
.ThenInclude(t => t.Variants)
|
||||
.FirstOrDefaultAsync(c => c.Id == channelId, cancellationToken);
|
||||
if (channel is null || channel.TemplateId is null)
|
||||
return null;
|
||||
|
||||
var template = await dbContext
|
||||
.ScheduleTemplates.AsNoTracking()
|
||||
.Include(t => t.Layers)
|
||||
.ThenInclude(l => l.Slots)
|
||||
.FirstOrDefaultAsync(t => t.Id == channel.TemplateId, cancellationToken);
|
||||
if (template is null)
|
||||
return null;
|
||||
|
||||
var horizonEnd = from.AddDays(Math.Clamp(days, 1, Math.Max(1, _options.HorizonDays)));
|
||||
var input = await BuildInputAsync(channel, template, from, horizonEnd, cancellationToken);
|
||||
return Domain.Programming.Planning.SchedulePlanner.Plan(input, random);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Чистит прошлое сверх окна хранения. Окно должно покрывать самое долгое остывание среди правил —
|
||||
/// история показов берётся из самой ленты, отдельного журнала нет.
|
||||
|
||||
Reference in New Issue
Block a user