9509a67e25
Система «готовится к ЦТ»: флаг student_prep(user_id,track) открывает ученику ВЕСЬ контент трека (карточки + курс + пробники) динамически, без материализации. - мигр.078: таблица student_prep + flashcard_decks.collection + разметка ЦТ-колод 'ct-math' - services/prepTracks.js: реестр треков (трек→коллекция/курсы/экзамены), устойчив до миграции - contentAccess.resolve/allowedRefs: учитывают мастер-флаг (явный запрет ученика побеждает) - flashcardController.deckAccess/listDecks: колоды коллекции открыты по флагу - prepController + /api/prep: учитель (своим) и админ ставят/снимают флаг (ученику/классу) - js/api.js: LS.prep* обёртки Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
1.9 KiB
SQL
29 lines
1.9 KiB
SQL
-- 078_prep_tracks.sql
|
|
-- Система «подготовка к направлению» (ЦТ и др.): флаг ученика + коллекция колод.
|
|
--
|
|
-- МАСТЕР-ФЛАГ: запись student_prep(user_id, track) открывает ученику ВЕСЬ контент
|
|
-- трека сразу — коллекцию флешкарт (flashcard_decks.collection), курс и пробники
|
|
-- (content_type='course'/'exam'). Маппинг трек→контент — services/prepTracks.js;
|
|
-- динамический резолв доступа — services/contentAccess.js (без материализации
|
|
-- правил content_access) и flashcardController.deckAccess/listDecks.
|
|
--
|
|
-- Управление флагом — учитель (своим ученикам) и админ (см. prepController.js).
|
|
|
|
-- 1) Флаг подготовки ученика по треку. track — ключ направления ('ct-math', …).
|
|
CREATE TABLE IF NOT EXISTS student_prep (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
track TEXT NOT NULL,
|
|
created_by INTEGER REFERENCES users(id) ON DELETE SET NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
UNIQUE (user_id, track)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_student_prep_user ON student_prep(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_student_prep_track ON student_prep(track);
|
|
|
|
-- 2) Коллекция (папка/направление) колоды. NULL = вне коллекции (поведение как раньше).
|
|
ALTER TABLE flashcard_decks ADD COLUMN collection TEXT;
|
|
|
|
-- 3) Разметить существующие ЦТ-колоды коллекцией 'ct-math' (заголовки «ЦТ · …»).
|
|
UPDATE flashcard_decks SET collection = 'ct-math' WHERE title LIKE 'ЦТ ·%';
|