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.
build / backend (push) Successful in 1m54s
build / frontend (push) Successful in 43s
tests / backend-tests (push) Successful in 2m4s

This commit is contained in:
Leonid Pershin
2026-07-26 14:50:32 +03:00
parent 8494eb5e6a
commit f699576582
54 changed files with 5857 additions and 1631 deletions
+19 -13
View File
@@ -23,7 +23,14 @@
и растягиваются мышью, день копируется на другие дни. Добавлены жёсткие фильтры кандидатов —
детское время и потолок повторов.
**Срез 4** не начинался.
**Срез 4 закрыт целиком.** Проверки по правилам показываются прямо в редакторе, пост-проверки
дают предупреждения по готовой ленте, у предпросмотра появилась вкладка «Проблемы» с тепловой
картой повторов, у каждой записи — трейс «почему это здесь», применение идёт через диф
с подсветкой ближайших суток, сетка копируется на другой канал.
**Смежная зрительская часть закрыта.** Номера каналов с сортировкой публичного списка,
переключение по номерам стрелками (глобальный флаг рядом с флагом регистрации), логотип-оверлей,
часы, плашка «Далее» и аналоговый фильтр. Всё опционально и по умолчанию выключено.
Ничего из этого не проверялось на живой базе: только сборка, юнит-тесты и typecheck.
@@ -356,36 +363,36 @@ N новых позиций по фильтру».
## Срез 4 — эксплуатация
#### [ ] 4.1. Валидация до генерации
#### [x] 4.1. Валидация до генерации
`Application` `Api` `Frontend`
Проверки из 5.1: нехватка контента, пустая группа, дыра в сетке, пересечение слотов, недостижимый
кулдаун, возрастной конфликт. Отдаются вместе с шаблоном, показываются в редакторе.
#### [ ] 4.2. Пост-проверки
#### [x] 4.2. Пост-проверки
`Application`
Потолок врезок в час, доля жанра за сутки, превышение дрейфа, доля эфира у фона (см. 3.8, 5.2).
Предупреждения, не ошибки — ничего не переигрывается.
#### [ ] 4.3. Вкладка «Проблемы» и тепловая карта
#### [x] 4.3. Вкладка «Проблемы» и тепловая карта
`Frontend`
Сгруппированные предупреждения с переходом к источнику; матрица «элемент × день» с яркостью
по числу показов.
#### [ ] 4.4. «Почему это здесь»
#### [x] 4.4. «Почему это здесь»
`Api` `Frontend`
Отдача `trace` записи и экран цепочки происхождения (см. 6.5).
#### [ ] 4.5. Диф перед применением
#### [x] 4.5. Диф перед применением
`Application` `Api` `Frontend`
Сравнение текущего хвоста с пересчитанным, список изменений, отдельная подсветка ближайших суток
(см. 6.6).
#### [ ] 4.6. Копирование шаблона
#### [x] 4.6. Копирование шаблона
`Application` `Api` `Frontend`
Глубокая копия шаблона, слоёв и слотов на другой канал; группы не копируются, они общие.
@@ -397,31 +404,30 @@ N новых позиций по фильтру».
От планировщика не зависит, делается параллельно в любой момент. Всё опционально и по умолчанию
выключено (см. 6.8).
#### [~] V.1. Номер канала
#### [x] V.1. Номер канала
`Domain` `Application` `Api` `Frontend`
> Частично: поле, уникальность и правка в настройках канала готовы; сортировки публичного списка нет.
`Channel.number`, уникальность, сортировка публичного списка по номеру.
#### [ ] V.2. Переключение по номерам
#### [x] V.2. Переключение по номерам
`Frontend`
Вверх-вниз по номерам, короткий чёрный кадр, номер в углу на секунду. Включается глобальным флагом
в `AppSetting` рядом с флагом регистрации. Сетка каналов остаётся вторым способом навигации.
#### [ ] V.3. Логотип канала
#### [x] V.3. Логотип канала
`Domain` `Api` `Frontend`
`logoImageId` (реестр изображений), угол и прозрачность. Оверлей поверх `<video>`, без касания
ffmpeg.
#### [ ] V.4. Часы и плашка «Далее»
#### [x] V.4. Часы и плашка «Далее»
`Frontend`
Часы — опция канала. Плашка в конце программы по данным EPG.
#### [ ] V.5. Аналоговый фильтр
#### [x] V.5. Аналоговый фильтр
`Domain` `Frontend`
`analogFilterStrength` на канале, CSS-фильтр или шейдер, по умолчанию выключен.