Enhance template and scheduling functionalities: add PlanningRules to template endpoints and commands, implement repeat limits and audience filtering in scheduling logic, and update related data structures. Refactor frontend components to support new rules and improve user experience in channel management.
This commit is contained in:
@@ -258,7 +258,19 @@ public sealed class GridScheduleGenerator(
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
var elementsByGroup = await expander.ExpandAsync(groupIds, channel.Id, cancellationToken);
|
||||
// Правила канала: детское время резолвится на каждый слот по его времени, а под потолок
|
||||
// повторов нужна история показов — её глубина и задаётся окном правила.
|
||||
var rules = PlanningRules.FromJson(template.RulesJson);
|
||||
var repeatLimit = rules?.MaxRepeatsInWindow is { WindowDays: > 0, Max: > 0 } limit
|
||||
? new RepeatLimit(limit.WindowDays, limit.Max)
|
||||
: null;
|
||||
|
||||
var elementsByGroup = await expander.ExpandAsync(
|
||||
groupIds,
|
||||
channel.Id,
|
||||
cancellationToken,
|
||||
repeatLimit is null ? null : startUtc.AddDays(-repeatLimit.WindowDays)
|
||||
);
|
||||
|
||||
var slotIds = scheduled.Select(s => s.Slot.Id).Distinct().ToList();
|
||||
var states = await dbContext
|
||||
@@ -308,7 +320,13 @@ public sealed class GridScheduleGenerator(
|
||||
junctions,
|
||||
elementsByGroup,
|
||||
channel
|
||||
)
|
||||
),
|
||||
rules?.AudienceAt(
|
||||
TimeOnly.FromDateTime(
|
||||
item.StartUtc.ToOffset(TimeSpan.FromMinutes(channel.UtcOffsetMinutes)).DateTime
|
||||
)
|
||||
),
|
||||
repeatLimit
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user