Видно, изменился ли файл при обновлении (sha256 + отметка в админке)

Просьба с эксплуатации: после «Обновить сейчас» непонятно, подхватились ли
правки таблицы. Теперь кэш считает sha256 скачанного файла и сравнивает с
предыдущим чтением:

- в логе: «Расписание загружено: N групп …; файл изменился/не изменился
  (sha256 ab12cd34)»;
- состояние для админки дополнено полями changed / changed_at / content_hash;
- в панели чипы «Файл при последнем обновлении», «Содержимое менялось»,
  «sha256 файла», а после кнопки — понятное сообщение: «обнаружены изменения»
  либо «файл не изменился (на Диске та же версия)» с подсказкой про задержку
  публикации у Яндекса;
- ответы API отдаются с Cache-Control: no-store, чтобы браузер не показывал
  закэшированные данные после обновления;
- запросы к Яндекс.Диску идут с no-cache заголовками и меткой времени —
  меньше шансов получить закэшированную версию файла.

Тест: test_state_reports_file_changes (первая загрузка, изменение файла,
повторное чтение без изменений).
This commit is contained in:
2026-09-29 15:27:01 +03:00
parent d4b47c30bf
commit d177560f7d
6 changed files with 96 additions and 8 deletions

View File

@@ -103,6 +103,13 @@ nginx (https://schedule.our-place.ru) → 127.0.0.1:8090
фонового обновления (интервал и так перечитывает таблицу целиком);
- **задать интервал обновления** в минутах (`1…1440`).
Каждое обновление (и по кнопке, и по интервалу) **всегда перечитывает таблицу**,
а в панели и в логе видно, изменился ли файл на Диске: `sha256`, время
последнего изменения содержимого и отметка «изменился / без изменений».
Если вы поправили таблицу, а после обновления написано «без изменений» — значит
публичная ссылка Яндекса отдаёт прежнюю версию файла (бывает с задержкой),
стоит повторить обновление через минуту.
Как это устроено:
- вход — `POST /api/admin/login`, сессия в подписанной HMAC-cookie