Целый раздел ТЗ, от которого не было ни одной функции. - Учётные записи: завести, сменить роль и службу, заблокировать, сбросить пароль. Обучающемуся заводится и карточка курсанта — на ней висят профиль и проверка «это твой разбор». - Состояние компонентов: база, модели речи, эмбеддинги, провайдер LLM, версия классификатора, число живых занятий. Отдельной строкой — секрет сессии: значение по умолчанию не ошибка запуска, но на стенде это дыра, и увидеть её должен администратор, а не проверяющий на защите. - Журнал действий с фильтром, только на чтение. - Резервные копии: кнопка и make backup для cron. pg_dump берётся локальный, а если его нет — из контейнера базы; если нет ни того ни другого, администратор видит, чего не хватает, а кнопка не молчит. Границы роли выражены отсутствием маршрутов, а не проверками внутри них: в разделе нет ни одной точки, трогающей оценки или пишущей в аудит. Два теста проверяют это перебором маршрутов роутера — так запрет нельзя ослабить, случайно добавив обработчик. Найдено по ходу: тесты с базой падали в компании и проходили поодиночке. Движок SQLAlchemy кэшировался на процесс, а каждый TestClient поднимает свой событийный цикл — пул привязан к первому. Появился db.base.reset() и фикстура, дающая движок на тест. 193 теста зелёных (12 новых).
30 lines
481 B
Text
30 lines
481 B
Text
# IDE
|
||
.idea/
|
||
.vscode/
|
||
|
||
# Веса моделей (тянутся make models)
|
||
backend/models/
|
||
|
||
# Резервные копии базы (make backup)
|
||
backend/backups/
|
||
|
||
# Python
|
||
__pycache__/
|
||
*.pyc
|
||
.venv/
|
||
|
||
# Node
|
||
node_modules/
|
||
frontend/dist/
|
||
|
||
# Env: и .env, и .env.test, и всё, что рядом — там ключи
|
||
.env
|
||
.env.*
|
||
!.env.example
|
||
*.local
|
||
|
||
# Python
|
||
.pytest_cache/
|
||
|
||
# Артефакты Windows рядом со скачанными файлами
|
||
*:Zone.Identifier
|