Files
Learn_System/.claude/memory/reference_student_materials.md
T
Maxim Dolgolyov 8a7091ddec chore(memory): снимок файлов памяти Claude в репозиторий для переноса
Копия пользовательской автопамяти (29 фактов + индекс MEMORY.md) в
.claude/memory/, чтобы переносить между машинами через git.
README.md — как восстановить в пользовательскую папку на другой машине.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 08:32:16 +03:00

49 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: reference_student_materials
description: "«Мои материалы» — ученик сохраняет к себе материалы онлайн-урока (доска/заметка), копия переживает удаление сессии"
metadata:
node_type: memory
type: reference
originSessionId: 60467058-b40e-4bd9-9f7f-d1e362e8039a
---
Личная коллекция ученика «Мои материалы» (сделано 2026-06-04, commit 44ab5e0). Контекст:
живой урок (классрум) уже персистит доску/чат/заметки, и ученик их видит на `my-lessons.html`
(только ученик; учителя редиректит на `/lesson-history`). Но всё привязано к сессии — учитель
может `DELETE /api/classroom/:id/history` и стереть. Решение — независимая копия у ученика.
- Миграция **060**: `student_materials(user_id, kind CHECK board|note|link|image, title, body,
url, source_session_id FK→classroom_sessions ON DELETE SET NULL, source_title denormalized, created_at)`.
- API **/api/materials** (`routes/materials.js` + `studentMaterialsController.js`): GET list (свои),
POST create (валидация kind/обязательных полей), DELETE /:id (проверка владельца). Любой
авторизованный (в осн. ученики). Хелперы `LS.listMaterials/saveMaterial/deleteMaterial` в js/api.js.
- Доска: добавлен `Whiteboard.exportBlob(cb)` (как exportPNG, но отдаёт Blob). Кнопка «К себе» на
доске → exportBlob → `LS.uploadFile` (/api/files) → saveMaterial(kind:'board', url). Кнопка «К себе»
на заметке → saveMaterial(kind:'note', body). Обе в `my-lessons.html` (страница ученика).
- Новая страница **/my-materials** (`frontend/my-materials.html`): сетка карточек (доска=картинка
открыть/скачать, заметка=текст, ссылка), удаление. Пункт сайдбара «Мои материалы» (только ученик,
js/sidebar.js, группа «Учебный процесс»).
- **Сохранение ЧАСТИ доски** (commit 116876d→fcb8ef7): логика вынесена в общий **`/js/board-clip.js`**
(`BoardClip.savePage(wb,meta,btn)` / `saveRegion(...)` + кроп-оверлей; meta={sourceSessionId,sourceTitle,pageNum}).
Кроп: exportBlob снимка → выделение прямоугольника → обрезка (offscreen canvas, коорд × naturalW/displayedW)
→ /api/files → saveMaterial(kind:'image'). Подключён И в **my-lessons.html** (просмотр), И в **classroom.html**
(ЖИВОЙ урок): кнопки «Область»/«К себе» в ученической панели `#cr-student-nav`, обёртки
crSaveBoardPage/crSaveBoardRegion над `_wb`+`_session`. Инстанс живой доски в классруме — `_wb`.
**План развития:** `plans/my-materials/PLAN.md` (6 фаз). Сделано:
- **Ф1** (fd3e5c4): `PATCH /api/materials/:id` (title/body), кнопка «+Заметка» (личный блокнот), «Изменить» на карточках.
- **Ф2** (2c7e974): миграция **061** `material_collections`(папки) + `student_materials.collection_id`(ON DELETE SET NULL)+`tags`;
CRUD коллекций `/api/materials/collections`; GET /materials отдаёт {materials, collections}; на странице — бар папок,
поиск, фильтр по типу, перенос в папку (select на карточке).
- **Ф6a** (9c95dc8): кнопки «К себе»/«Область» учителю в `lesson-history.html`; пункт сайдбара «Мои материалы» виден всем.
- **Ф3** (61e30be+43fe90d): `js/material-save.js` (MaterialSave.note/link/image); кнопка «В мои материалы»
на задачах экзамена (task-card.js, заметка=условие+ответ+решение); на учебнике — `js/textbook-clip.js`
(плавающая кнопка, сохраняет § ссылкой), инжектится сервером в /textbook/:slug рядом с deep-link.
- **Ф4** (d3a64ac): svg-draw `opts.bgImage` + `exportFlatBlob()` (растер подложка+вектор→PNG); на странице —
«Рисунок» (с нуля) и «Аннотировать» (поверх board/image) через модалку SvgDraw.
- **Ф5** (e793b4e): «В флешкарты» на заметке → выбор/создание колоды → карточка (front=заголовок, back=текст);
хелперы fcListDecks/fcCreateDeck/fcAddCard.
- **Ф6b** (f7357ad): `POST /api/materials/:id/share {classId|userId}` (teacher/admin) — независимая КОПИЯ
каждому ученику (source_title «Раздатка: <учитель>») + SSE-уведомление; кнопка «Раздать» (учителю).
- ПЛАН ЗАВЕРШЁН (все 6 фаз). Не делалось из обсуждения: теги-UI (поле tags есть, UI нет), экспорт PDF/ZIP,
«учить из материалов», SRS-интеграция.