Enhance GridScheduleGenerator to prevent reopening aired slots during rebuilds
ci / build-backend (push) Successful in 1m31s
ci / build-frontend (push) Successful in 39s
ci / tests (push) Successful in 1m26s
ci / sonar (push) Successful in 3m57s

Updated the GridScheduleGenerator to include logic that checks if a slot has already aired before planning it again, preventing duplicate scheduling of programs. Introduced a new method, LoadAiredSlotWindowsAsync, to retrieve aired time windows and updated the planning logic accordingly. Added integration tests to verify that slots that have already aired are not reopened during rebuilds, ensuring accurate scheduling behavior. Updated documentation to reflect these changes.
This commit is contained in:
Leonid Pershin
2026-07-30 23:09:39 +03:00
parent e983374dec
commit b9d96c915c
3 changed files with 168 additions and 1 deletions
+9
View File
@@ -453,6 +453,15 @@ SlotState
готовым) — остаётся сохранённое состояние: слот в эфире уже был, и откат в начало группы виден
зрителю.
**Выход, который уже состоялся, не переигрывается.** Курсора для этого мало: он говорит, на чём
слот остановился, но не говорит, что этот его выход уже был. Пересборка посреди длинного фильма
попадала ровно в эту щель — кино объявленных 21:00 идёт до 23:14, окно слота 21:00–23:15, точка
продолжения 23:14 внутри окна, и планировщик открывал слот заново, ставя вторую полнометражку
подряд. Поэтому экземпляры слотов, чьи отрезки уже заняты записями в уцелевшей ленте, из плана
выбрасываются: сравниваются отрезки, а не старты (сетка эластичная, и кино законно начинается
в 20:55), а вид записи не важен — слот, чьё время закрыл фон, свой выход тоже отработал.
Фоновых слотов это не касается: они играют не по своему окну, а в чужих паузах.
Из этого следует: `SchedulerOptions.RetentionHours` (сейчас 24 часа) заменяется на `RetentionDays`,
дефолт 90. Значение обязано покрывать максимальный `cooldownDays` среди правил канала и максимальный
`daysAgo` среди слотов повтора — иначе остывание начнёт врать, а повторы находить нечего. Валидация