8a7091ddec
Копия пользовательской автопамяти (29 фактов + индекс MEMORY.md) в .claude/memory/, чтобы переносить между машинами через git. README.md — как восстановить в пользовательскую папку на другой машине. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
207 lines
10 KiB
Markdown
207 lines
10 KiB
Markdown
---
|
||
name: LearnSpace — полная карта реализованных функций
|
||
description: Что уже сделано в проекте: все страницы, API, таблицы БД, инструменты доски, стек, деплой
|
||
type: project
|
||
originSessionId: 1959f491-c6c4-4d6b-9081-0b09298d1699
|
||
---
|
||
# LearnSpace — реализованный функционал (апрель 2026)
|
||
|
||
**Why:** Чтобы не переоткрывать то, что уже есть, при планировании новых фич.
|
||
**How to apply:** Перед реализацией любой фичи — сверяться, чтобы не дублировать.
|
||
|
||
---
|
||
|
||
## Frontend pages (43 HTML-файла в frontend/)
|
||
|
||
| Файл | Назначение |
|
||
|------|-----------|
|
||
| login.html | Split-layout авторизация, canvas neural-network анимация |
|
||
| dashboard.html | Главная ученика — задания, прогресс, gamification |
|
||
| admin.html | Панель администратора |
|
||
| profile.html | Профиль пользователя |
|
||
| classes.html | Google Classroom-стиль карточки классов |
|
||
| board.html | Лента класса (анонсы, задания, активность) |
|
||
| classroom.html | Онлайн-урок (доска + чат + видео/аудио) |
|
||
| live-quiz.html | Live-викторина в реальном времени |
|
||
| test-run.html | Прохождение теста |
|
||
| test-result.html | Результат теста |
|
||
| question-bank.html | Банк вопросов |
|
||
| homework.html | Задания студента |
|
||
| course.html | Прохождение курса |
|
||
| lesson.html | Просмотр урока |
|
||
| lesson-editor.html | Редактор уроков с блоками |
|
||
| theory.html | Теоретические материалы |
|
||
| library.html | Библиотека файлов |
|
||
| analytics.html | Аналитика/отчёты |
|
||
| flashcards.html | Карточки с интервальным повторением |
|
||
| knowledge-map.html | Граф знаний |
|
||
| crossword.html | Кроссворд |
|
||
| hangman.html | Виселица |
|
||
| biochem*.html (5) | Интерактивная биохимия: молекулы, реакции, пути |
|
||
| red-book*.html (4) | Красная книга: виды, биомы, экосистемы, игры |
|
||
| collection*.html (2) | Коллекции предметов |
|
||
| gradebook.html | Журнал оценок |
|
||
| parent.html | Кабинет родителя |
|
||
| pet.html | Виртуальный питомец |
|
||
| lab.html | Интерактивные лабораторные работы (30+ симуляций) |
|
||
| 403/404/500.html | Страницы ошибок |
|
||
|
||
---
|
||
|
||
## Backend API (28 групп маршрутов)
|
||
|
||
```
|
||
/api/auth — JWT авторизация, регистрация, профиль
|
||
/api/subjects — Предметы
|
||
/api/sessions — Тестовые сессии
|
||
/api/admin — Управление платформой, feature flags
|
||
/api/questions — Банк вопросов
|
||
/api/classes — Классы
|
||
/api/assignments — Задания, дедлайны
|
||
/api/files — Загрузка файлов, папки
|
||
/api/tests — Тесты/квизы
|
||
/api/notifications — Уведомления
|
||
/api/permissions — RBAC
|
||
/api/submissions — Сдача работ, оценки
|
||
/api/courses — Курсы (теория)
|
||
/api/lessons — Уроки с блоками
|
||
/api/gamification — XP, уровни, ачивки, стрики
|
||
/api/shop — Виртуальный магазин, монеты
|
||
/api/templates — Шаблоны заданий
|
||
/api/bookmarks — Закладки
|
||
/api/search — Поиск контента
|
||
/api/flashcards — Флэшкарты со spaced repetition
|
||
/api/settings — Настройки
|
||
/api/analytics — Аналитика и отчёты
|
||
/api/live — Live-квизы (real-time)
|
||
/api/classroom — Онлайн-урок (SSE, доска, чат, WebRTC)
|
||
/api/games — Игры (виселица, кроссворд)
|
||
/api/knowledge-map — Граф знаний
|
||
/api/pet — Виртуальный питомец
|
||
/api/collection — Коллекционирование
|
||
/api/red-book — Красная книга
|
||
/api/biochem — Биохимия
|
||
```
|
||
|
||
---
|
||
|
||
## Classroom API (детально)
|
||
|
||
- POST/GET/DELETE сессий
|
||
- JOIN/LEAVE участников, attendance log
|
||
- Чат: отправка, получение, реакции, закрепление, загрузка файлов
|
||
- Strokes: batch save, load (с пагинацией + since_seq), update, delete, preview (SSE)
|
||
- Страницы: add, change_current, set_template, clear
|
||
- Поднятая рука: raise/lower/list
|
||
- Разрешения рисования: grant/revoke per user
|
||
- WebRTC: signaling relay, cursor broadcast, mute, screen share
|
||
- Notes: get/save per user per session
|
||
- Templates: save/load session как шаблон
|
||
|
||
---
|
||
|
||
## БД — 76 таблиц SQLite (better-sqlite3, sync)
|
||
|
||
Ключевые группы:
|
||
- **users** + role_permissions + user_permissions
|
||
- **test_sessions** + session_questions + user_answers
|
||
- **subjects** + topics + questions + options + tests + test_questions
|
||
- **classes** + class_members
|
||
- **classroom_sessions** + classroom_pages + classroom_strokes + classroom_chat + classroom_chat_reactions + classroom_attendance + classroom_invites + classroom_draw_permissions + classroom_notes
|
||
- **courses** + course_sections + lessons + lesson_blocks + lesson_progress + lesson_notes + class_courses
|
||
- **assignments** + assignment_sessions + assignment_templates + submissions + submission_log
|
||
- **files** + file_access + folders + folder_access
|
||
- **xp_log** + achievements + user_achievements + daily_goals + challenges
|
||
- **announcements** + notifications + bookmarks
|
||
- **live_sessions** + live_answers
|
||
- **shop_items** + user_purchases
|
||
- **flashcard_decks** + flashcard_cards + flashcard_reviews
|
||
- **bio_elements/molecules/reactions/...** (5 биохим-таблицы)
|
||
- **rb_species/habitats/groups/...** (9 красная книга)
|
||
- **app_settings** + error_log + admin_audit_log
|
||
|
||
---
|
||
|
||
## Whiteboard (frontend/js/whiteboard.js ~3200 строк)
|
||
|
||
### Инструменты рисования
|
||
- Pencil (Catmull-Rom сглаживание)
|
||
- Highlighter (полупрозрачный маркер)
|
||
- Laser (без сохранения)
|
||
- Eraser
|
||
- Connector (линии со стрелками)
|
||
- Sticky notes
|
||
- Text (inline editing)
|
||
- Image (вставка + upload)
|
||
- Formula / LaTeX (KaTeX, modal editor с категориями)
|
||
- Table (интерактивная)
|
||
- Coordinate system (с графиками функций, парсер выражений)
|
||
- Number line (для неравенств, точки + интервалы)
|
||
- Compass: трёхфазная state machine (idle → setting-radius → waiting-arc → drawing-arc), сохраняется как `{cx, cy, radius, arcStart, arcSweep, color, lineWidth, showLegs}`, live preview в `_renderDynamic` с ногами компаса и меткой угла
|
||
|
||
### Shapes (11)
|
||
rect, ellipse, line, arrow, triangle, diamond, hexagon, star, roundedrect, callout, connector
|
||
|
||
### Инструмент выделения
|
||
- Move + resize всех объектов (bbox handles)
|
||
- Rotation handle (purple) для объектов
|
||
- Lasso multi-select (резиновая рамка)
|
||
- Shift+click добавить к выделению
|
||
- Copy/Paste с offset
|
||
- Snap guides при перемещении
|
||
- Delete / Bring to front / Send to back
|
||
|
||
### Zoom / Pan
|
||
- Wheel zoom (к курсору)
|
||
- Space+drag = pan
|
||
- Ctrl+0/+/- hotkeys
|
||
- clampPan() — ограничение выхода за пределы
|
||
- Minimap: 192×108 overlay bottom-right (показывается при zoom>1)
|
||
- Viewport indicator на minimap; клик/drag = прыжок
|
||
|
||
### Оверлеи (не сохраняются)
|
||
- Ruler: вращение (drag ↺), resize (drag ↔), свойства-панель (угол + длина)
|
||
- Protractor: вращение, resize (radius), свойства-панель
|
||
|
||
### Прочее
|
||
- Двухслойный canvas: static (strokes) + dynamic (selection/guides/live)
|
||
- Шаблоны страниц: blank, grid, lined, dots, coordinate
|
||
- Multi-page с thumbnail sidebar (renderThumbnail)
|
||
- Export PNG (с сохранением zoom/pan)
|
||
- Auto-measurements (длины/углы/площадь для shape)
|
||
- Real-time sync: SSE + HTTP polling (since_seq)
|
||
- Live strokes preview через /stroke-preview
|
||
- Cursor broadcast (teacher position visible to students)
|
||
|
||
### Темы доски (4)
|
||
- **Chalkboard** (по умолчанию): зелёный (#213d26), меловая текстура, горизонтальные смазки
|
||
- **Blackboard** (классная): тёмно-синий (#1a1a2e), диагональная текстура, chalk-grain
|
||
- **Corkboard** (пробка): коричневый (#7a5c1e), диагональные волокна, случайные узлы-пятна
|
||
- **Whiteboard** (маркерная): светло-серый градиент, minimal grain, тёмные линии шаблонов
|
||
- Переключатель: `setBoardTheme(name)` + `wbSetBoardTheme()` + `<select id="wb-theme-select">`
|
||
- Текстуры кешируются в `_bgNoiseCache` (Map по имени темы)
|
||
|
||
---
|
||
|
||
## Tech stack
|
||
|
||
- **Backend**: Node.js 22, Express 4.18, better-sqlite3 (sync), JWT, bcryptjs, multer, sharp, compression
|
||
- **Frontend**: Vanilla JS ES6+, HTML/CSS без бандлера, Canvas API, SSE, WebRTC
|
||
- **Иконки**: inline SVG `.ic` класс (НЕ эмоджи), Lucide CDN на некоторых страницах
|
||
- **Шрифты**: Google Fonts (Unbounded, Manrope)
|
||
- **Деплой**: Docker multi-stage Alpine, docker-compose, tini init, 3 named volumes
|
||
- **Репо**: https://git.dolgolyov-family.by/maxim.dolgolyov/Learn_System (ветка master)
|
||
|
||
---
|
||
|
||
## Env vars (backend/.env.example)
|
||
|
||
```
|
||
PORT=3000
|
||
JWT_SECRET=...
|
||
JWT_EXPIRES_IN=7d
|
||
CLIENT_ORIGIN=http://localhost:3000
|
||
DB_PATH=/app/backend/data/learnspace.db
|
||
UPLOADS_DIR=/app/backend/uploads
|
||
```
|