feat(trainer): P6 — учительская аналитика класса + общий прогресс

- GET /api/practice/class-stats (classStats): агрегаты по навыкам + матрица ученик×навык; доступ владелец класса/админ
- клиент: кнопка «Аналитика класса» (учителю) → модалка с тепловой картой (точность/освоено) + пикер классов; LS.practiceClassStats
- лёгкая геймификация: строка «Освоено навыков M из N · решено всего K» из агрегатов practice_progress
- тесты practice.test.js +4 (владелец видит; чужой/ученик → 403; без class_id → 400); смоук страницы 27/27; план P6 → DONE

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-25 14:24:05 +03:00
parent 7cc2a9d526
commit d003a0e100
6 changed files with 222 additions and 6 deletions
+12 -1
View File
@@ -128,8 +128,19 @@ T13 latex). **Осталось (стретч):** неравенства (нуж
- **Acceptance:** квадратное уравнение принимает оба корня в любом порядке; `(x+1)^2`
`x^2+2x+1` через сэмплинг; неравенство принимает `x>3` и эквивалент.
## Phase 6 — Геймификация, аналитика, UX
## Phase 6 — Геймификация, аналитика, UX — DONE (частично)
**Сделано:** **учительская аналитика**`GET /api/practice/class-stats?class_id=`
(`classStats`, владелец класса/админ): агрегаты по навыкам (attempted/mastered/accuracy)
+ матрица ученик×навык. Клиент: кнопка «Аналитика класса» (учителю) → модалка с
**тепловой картой** (ученики × навыки, цвет по точности, ✓ освоено) + пикер классов.
`LS.practiceClassStats`. **Лёгкая геймификация**: строка общего прогресса «Освоено
навыков M из N · решено всего K» (из агрегатов `practice_progress`), бейджи мастерства
на чипах (P2). Тесты practice.test.js +4 (владелец видит, чужой/ученик→403, без id→400).
Смоук страницы 27/27. **Осталось (стретч):** XP в общую геймификацию, виртуальная
клавиатура, сократические подсказки — не вошло (отдельные крупные направления).
Изначальный список:
- XP/энергия/стрики (reuse инфраструктуры Квантика), бейджи мастерства на чипах (есть основа).
- Учительская аналитика: кто на каком навыке застрял, тепловая карта класса, отчёты.
- UX: виртуальная клавиатура для дробей/степеней, «почему неверно» (разбор ошибки),