Enhance channel and settings functionalities: introduce viewer settings in ChannelEndpoints, update SiteSettings to include channel number toggling, and refactor related data structures. Implement new endpoints for validating templates and diffing scheduling changes, improving overall user experience and configuration management.
This commit is contained in:
@@ -31,6 +31,7 @@ public sealed class GridScheduleGenerator(
|
||||
IAppDbContext dbContext,
|
||||
GroupExpander expander,
|
||||
BumperResolver bumperResolver,
|
||||
PostCheckRunner postChecks,
|
||||
IRandomSource random,
|
||||
IOptions<SchedulerOptions> options,
|
||||
IOptions<StreamingOptions> streamingOptions
|
||||
@@ -105,6 +106,16 @@ public sealed class GridScheduleGenerator(
|
||||
);
|
||||
var result = Domain.Programming.Planning.SchedulePlanner.Plan(input, random);
|
||||
|
||||
// Пост-проверки считаются по готовой ленте и только предупреждают — переигрывать что-либо
|
||||
// по их итогу мы намеренно не будем (см. 3.8).
|
||||
var postWarnings = await postChecks.RunAsync(
|
||||
result.Items,
|
||||
PlanningRules.FromJson(template.RulesJson),
|
||||
channel.UtcOffsetMinutes,
|
||||
channel.DayStartTime,
|
||||
cancellationToken
|
||||
);
|
||||
|
||||
// Заставки резолвятся после сборки ленты: пара соседей известна только теперь.
|
||||
var bumperAssets = await bumperResolver.ResolveAsync(
|
||||
channel,
|
||||
@@ -143,7 +154,7 @@ public sealed class GridScheduleGenerator(
|
||||
|
||||
await dbContext.SaveChangesAsync(cancellationToken);
|
||||
await transaction.CommitAsync(cancellationToken);
|
||||
return new GenerationReport(added, result.Warnings);
|
||||
return new GenerationReport(added, [.. result.Warnings, .. postWarnings]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -176,7 +187,17 @@ public sealed class GridScheduleGenerator(
|
||||
|
||||
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);
|
||||
var result = Domain.Programming.Planning.SchedulePlanner.Plan(input, random);
|
||||
|
||||
var postWarnings = await postChecks.RunAsync(
|
||||
result.Items,
|
||||
PlanningRules.FromJson(template.RulesJson),
|
||||
channel.UtcOffsetMinutes,
|
||||
channel.DayStartTime,
|
||||
cancellationToken
|
||||
);
|
||||
|
||||
return result with { Warnings = [.. result.Warnings, .. postWarnings] };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user