lct-hack/backend/app
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan Gerasimov 641e505c67 feat: АРМ администратора — записи, состояние стенда, аудит, копии (lct-24)
Целый раздел ТЗ, от которого не было ни одной функции.

- Учётные записи: завести, сменить роль и службу, заблокировать, сбросить
  пароль. Обучающемуся заводится и карточка курсанта — на ней висят профиль
  и проверка «это твой разбор».
- Состояние компонентов: база, модели речи, эмбеддинги, провайдер LLM, версия
  классификатора, число живых занятий. Отдельной строкой — секрет сессии:
  значение по умолчанию не ошибка запуска, но на стенде это дыра, и увидеть
  её должен администратор, а не проверяющий на защите.
- Журнал действий с фильтром, только на чтение.
- Резервные копии: кнопка и make backup для cron. pg_dump берётся локальный,
  а если его нет — из контейнера базы; если нет ни того ни другого,
  администратор видит, чего не хватает, а кнопка не молчит.

Границы роли выражены отсутствием маршрутов, а не проверками внутри них:
в разделе нет ни одной точки, трогающей оценки или пишущей в аудит. Два теста
проверяют это перебором маршрутов роутера — так запрет нельзя ослабить,
случайно добавив обработчик.

Найдено по ходу: тесты с базой падали в компании и проходили поодиночке.
Движок SQLAlchemy кэшировался на процесс, а каждый TestClient поднимает свой
событийный цикл — пул привязан к первому. Появился db.base.reset() и фикстура,
дающая движок на тест.

193 теста зелёных (12 новых).
2026-09-20 09:11:12 +03:00
..
admin feat: АРМ администратора — записи, состояние стенда, аудит, копии (lct-24) 2026-09-20 09:11:12 +03:00
api feat: АРМ администратора — записи, состояние стенда, аудит, копии (lct-24) 2026-09-20 09:11:12 +03:00
db feat: АРМ администратора — записи, состояние стенда, аудит, копии (lct-24) 2026-09-20 09:11:12 +03:00
dialog feat: уточнение адреса — место происшествия не равно адресу заявителя (lct-35) 2026-09-19 20:26:49 +03:00
domain feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
scenarios feat: исход вызова — не каждый звонок заканчивается карточкой (lct-36) 2026-09-20 08:33:30 +03:00
scoring feat: исход вызова — не каждый звонок заканчивается карточкой (lct-36) 2026-09-20 08:33:30 +03:00
session feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
voice lct-07 и lct-19: звонящий на LLM, офлайн-таблица, предгенерация 2026-09-17 23:50:19 +03:00
__init__.py каркас: домен, генерация типов фронта, стенд и карточки задач 2026-09-15 19:35:03 +03:00
config.py feat: вход, роли и аудит действий (lct-23) 2026-09-20 09:01:05 +03:00
main.py feat: АРМ администратора — записи, состояние стенда, аудит, копии (lct-24) 2026-09-20 09:11:12 +03:00