feat(access): Фаза 1c — видимость курсов по классам (Фаза 1 завершена)
Миграция 052: мост «открыть все опубликованные курсы всем существующим классам» (тип 'course' уже в CHECK из 051). courseController.list/search фильтруют курсы для НЕпривилегированных по allowedRefs(uid,'course') (content_ref = courses.id как TEXT); admin/teacher — все. /api/access/catalog отдаёт курсы; CONTENT_TYPES в админ-UI = textbook,exam,sim,course → курсы управляются во всех режимах «Доступ». Тест course-access 4/4 (allowlist+класс+privileged+каталог). Полный набор: 213 pass. ВАЖНО: новый опубликованный курс по умолчанию закрыт (allowlist) — открыть классам в админке. Мост сохранил видимость текущих опубликованных курсов у существующих классов. class_courses остаётся для назначений с дедлайном (сверх видимости). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -38,7 +38,16 @@ router.get('/catalog', (_req, res) => {
|
||||
ORDER BY sort_order, id
|
||||
`).all();
|
||||
} catch (_e) { /* lab_sims может отсутствовать на старом инстансе — деградация */ }
|
||||
res.json({ textbooks, exams, sims });
|
||||
let courses = [];
|
||||
try {
|
||||
courses = db.prepare(`
|
||||
SELECT CAST(id AS TEXT) AS id, title, subject_slug AS subject
|
||||
FROM courses
|
||||
WHERE is_published = 1
|
||||
ORDER BY subject_slug, order_index, id
|
||||
`).all();
|
||||
} catch (_e) { /* деградация */ }
|
||||
res.json({ textbooks, exams, sims, courses });
|
||||
});
|
||||
|
||||
/* ── Цели назначения: классы (+ученики) и отдельные ученики ────────────── */
|
||||
|
||||
Reference in New Issue
Block a user