feat(lessons): «Мои материалы» — ученик сохраняет материалы урока к себе
Ученик на странице «Мои уроки» может сохранить к себе страницу доски (PNG) и свою заметку из прошлой онлайн-сессии. Копия хранится у ученика и переживает удаление сессии учителем. - Миграция 060: student_materials (kind board/note/link/image, denormalized source_title, source_session_id ON DELETE SET NULL). - API /api/materials (GET/POST/DELETE, авторизация + проверка владельца) + helpers в js/api.js. - my-lessons.html: кнопки «К себе» на доске и заметке (Whiteboard.exportBlob → /api/files → saveMaterial). - Новая страница /my-materials (просмотр/открыть/скачать/удалить) + пункт сайдбара (ученик). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
-- ═══════════════════════════════════════════════════════════════
|
||||
-- 060: Student-owned personal materials ("Мои материалы")
|
||||
--
|
||||
-- A student can save items from a live lesson (a board page image, their
|
||||
-- note, a chat attachment/link) into their OWN collection. The copy is
|
||||
-- independent of the session: it survives even if the teacher later deletes
|
||||
-- the session history. source_session_id is a soft reference (SET NULL on
|
||||
-- delete); source_title is denormalized so it stays readable afterwards.
|
||||
-- ═══════════════════════════════════════════════════════════════
|
||||
|
||||
CREATE TABLE student_materials (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
kind TEXT NOT NULL CHECK (kind IN ('board','note','link','image')),
|
||||
title TEXT NOT NULL DEFAULT '',
|
||||
body TEXT, -- note text (kind='note')
|
||||
url TEXT, -- file/image/link url (board/image/link)
|
||||
source_session_id INTEGER REFERENCES classroom_sessions(id) ON DELETE SET NULL,
|
||||
source_title TEXT, -- denormalized session title (survives deletion)
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE INDEX idx_student_materials_user ON student_materials(user_id, created_at DESC);
|
||||
Reference in New Issue
Block a user