Files
Learn_System/.claude/memory/reference_student_materials.md
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

5.4 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
reference_student_materials «Мои материалы» — ученик сохраняет к себе материалы онлайн-урока (доска/заметка), копия переживает удаление сессии
node_type type originSessionId
memory reference 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-интеграция.