8c4c9bf04c
- practiceVerify.js: грузит SimExpr в Node (require), verifyRoot подстановкой корня - practiceGenService.js: LLM (инъектируемый ask) → parse → validateAndVerify (SimExpr + подстановка + санитизация) → авторетрай по фидбэку; дефолт ask = assistantController.callLLMFailover - пул practice_problems (мигр.083); POST /api/practice/generate (учитель/админ) + GET /api/practice/pool - инвариант: невалидная/неверная задача в БД НЕ пишется → ученику не попадёт - клиент: LS.practicePool/Generate, тема «Текстовые задачи» (из пула; учителю кнопка «Сгенерировать») - тесты practice-gen.test.js 13/13 (verify, ретраи, off→503, 403 ученику, пул); смоуки страница 26/26; план P3 → DONE Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
21 lines
1019 B
JavaScript
21 lines
1019 B
JavaScript
'use strict';
|
|
/* /api/practice — прогресс ученика в ИИ-тренажёре (Фаза 0).
|
|
* Все роуты — auth-only (тренируются ученики). router.use(authMiddleware)
|
|
* → lint:routes baseline 0. Прогресс всегда принадлежит req.user — нет
|
|
* межпользовательских роутов, проверка владения не требуется. */
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const { authMiddleware, requireRole } = require('../middleware/auth');
|
|
const c = require('../controllers/practiceController');
|
|
|
|
router.use(authMiddleware);
|
|
|
|
router.get('/progress', c.listProgress);
|
|
router.post('/attempt', c.submitAttempt);
|
|
|
|
// Текстовые задачи (Уровень 1): пул читают все; генерирует учитель/админ.
|
|
router.get('/pool', c.listPool);
|
|
router.post('/generate', requireRole('teacher', 'admin'), c.generateProblem);
|
|
|
|
module.exports = router;
|