fix(admin): список сессий показывает и незавершённые (зависшие), +фильтр ?status
Корень бага «зависший тест есть в алерте, но нет в списке»: getAllSessions жёстко фильтровал WHERE status='completed' → in_progress (зависшие) сессии в списке /admin#sessions не появлялись. Теперь по умолчанию показываются все статусы (UI sessions.js уже null-safe: percent/score/duration рисуются как «—»), плюс опциональный ?status=completed|in_progress|abandoned для сужения. Зависшая сессия теперь находится и в списке, и открывается по deep-link из алерта. admin-sessions.test.js 4/4; node --check OK. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -295,13 +295,18 @@ function getUserSessions(req, res) {
|
||||
|
||||
/* ── GET /api/admin/sessions ─────────────────────────────────────────── */
|
||||
function getAllSessions(req, res) {
|
||||
const { subject, user_id } = req.query;
|
||||
const { subject, user_id, status } = req.query;
|
||||
const limit = Math.min(500, Math.max(1, Number(req.query.limit) || 200));
|
||||
const offset = Math.max(0, Number(req.query.offset) || 0);
|
||||
|
||||
const where = ['ts.status = \'completed\''];
|
||||
// По умолчанию показываем и завершённые, и НЕзавершённые (in_progress) — иначе зависшие
|
||||
// сессии не находились в списке (см. алерт «Зависла»). Опционально сужаем по ?status=.
|
||||
const where = [];
|
||||
const params = [];
|
||||
|
||||
if (status && ['completed', 'in_progress', 'abandoned'].includes(status)) {
|
||||
where.push('ts.status = ?'); params.push(status);
|
||||
}
|
||||
if (subject) { where.push('s.slug = ?'); params.push(subject); }
|
||||
if (user_id) { where.push('ts.user_id = ?'); params.push(Number(user_id)); }
|
||||
|
||||
@@ -317,7 +322,7 @@ function getAllSessions(req, res) {
|
||||
FROM test_sessions ts
|
||||
LEFT JOIN subjects s ON s.id = ts.subject_id
|
||||
JOIN users u ON u.id = ts.user_id
|
||||
WHERE ${where.join(' AND ')}
|
||||
${where.length ? 'WHERE ' + where.join(' AND ') : ''}
|
||||
ORDER BY ts.started_at DESC
|
||||
LIMIT ? OFFSET ?
|
||||
`).all(...params);
|
||||
|
||||
Reference in New Issue
Block a user