Files
Maxim Dolgolyov 8c44115d32 docs(readme): полное обновление документации
Добавлено/обновлено:
- Учебники: 18 учебников (химия/физика/алгебра/геометрия 7-11), движок Химии 7/8
- Лаборатория: 40 симуляций по категориям, Lab Content Engine, LabRegistry
- Биохимия: biochem-core dual-export, services/chem.js, /analyze, valency
- Dashboard: карточки учебника/лабы/питомца, командный центр админа
- Геймификация: панель начисления XP, питомец с pet-sprite.js
- Архитектура: node:sqlite, 47 миграций, 106 таблиц, 60 страниц, 40 routes
- Feature flags: таблица флагов
- Content access allowlist, galaxy map, планиметрия/стереометрия, System Health
- Shared модули: pet-sprite.js, lab-previews.js
- API: полная таблица 33 групп маршрутов

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 08:22:32 +03:00

561 lines
30 KiB
Markdown
Raw Permalink 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.
# LearnSpace
**Образовательная платформа с интерактивной онлайн-доской, системой тестирования, учебниками, виртуальной лабораторией и геймификацией.**
Стек: Node.js · Express · SQLite (`node:sqlite` DatabaseSync) · Vanilla JS · Canvas API · SSE · WebRTC
---
## Содержание
- [Возможности](#возможности)
- [Быстрый старт](#быстрый-старт)
- [Ручная установка](#ручная-установка)
- [Переменные окружения](#переменные-окружения)
- [Архитектура](#архитектура)
- [API](#api)
- [Роли пользователей](#роли-пользователей)
- [Feature Flags](#feature-flags)
- [Контент](#контент)
---
## Возможности
### Онлайн-урок (Classroom)
Полнофункциональная интерактивная доска с синхронизацией в реальном времени через SSE.
**Инструменты рисования**
- Карандаш со сглаживанием Catmull-Rom
- Маркер (highlighter) с настраиваемой прозрачностью
- Лазерная указка (без сохранения)
- Ластик
- Connector (линии со стрелками)
- Стикеры с редактированием текста
- Текстовые блоки (inline editing)
- Вставка изображений (drag & drop + URL)
- Таблицы (интерактивные)
- LaTeX-формулы (KaTeX) с визуальным редактором и категориями символов
- Система координат с построением графиков функций (встроенный парсер выражений)
- Числовая ось для неравенств (точки, интервалы)
- Циркуль с трёхфазной state machine
**Фигуры (11):** прямоугольник, скруглённый прямоугольник, эллипс, линия, стрелка, треугольник, ромб, шестиугольник, звезда, облако, коннектор
**Инструмент выделения**
- Перемещение и изменение размера всех объектов
- Вращение объектов (handle над объектом)
- Lasso multi-select (резиновая рамка)
- Shift+click для добавления к выделению
- Copy/Paste с автосмещением
- Snap-гайды при выравнивании объектов
- Delete, Bring to front, Send to back
**Навигация по холсту**
- Zoom: колесо мыши к курсору, Ctrl+`+`/`-`/`0`, кнопки в тулбаре
- Pan: зажатый пробел + перетаскивание
- Minimap (192×108) в правом нижнем углу при zoom > 1 — клик/drag для прыжка
**Инструменты измерения**
- Линейка: поворот, изменение длины, панель свойств (угол, длина)
- Транспортир: поворот, изменение радиуса, панель свойств
- Авто-измерения геометрических фигур (длины, углы, площадь)
**Планиметрия (геометрические построения)**
- Середина отрезка, биссектриса, высота, описанная/вписанная окружность
- Касательная, параллельный перенос, симметрия
- Правильный n-угольник, параллелограмм, средняя линия треугольника
- Метки параллельности, прямых углов, одинаковых отрезков
- Дуги углов, засечки рёбер
**Стереометрия 3D**
- Куб, прямоугольный параллелепипед, тетраэдр, октаэдр, пирамида, призма
- Усечённая пирамида, правильные многогранники, конус, цилиндр, сфера
- Скрещивающиеся прямые, производные точки 3D, длины рёбер
- Вращение мышью, deep-link на конкретную фигуру (`openSim('stereo:cube')` / `?stereofig=`)
**Темы доски (4)**
- **Chalkboard** — зелёный фон, меловая текстура
- **Blackboard** — тёмно-синий, диагональная текстура
- **Corkboard** — пробковый, волокна
- **Whiteboard** — светло-серый, маркерная доска
**Страницы и шаблоны**
- Неограниченное количество страниц на сессию
- Боковая панель с миниатюрами страниц
- Шаблоны: чистая, сетка, линованная, точки, координатные оси
- Экспорт страницы в PNG
**Коммуникация**
- Чат с реакциями и закреплёнными сообщениями
- Загрузка файлов в чат
- Поднятие руки учеником
- WebRTC аудио/видео
- Трансляция экрана учителя
- Курсор учителя виден ученикам в реальном времени
- Выдача прав рисования отдельным ученикам
- Личные заметки по уроку (per user)
- Режим аннотации поверх симуляции
---
### Учебники (Textbooks)
Интерактивные параграф-по-параграфу учебники с прогрессом чтения.
**Доступный контент (18 учебников)**
| Предмет | Классы |
|---------|--------|
| Химия | 7, 8, 9 |
| Физика | 7, 8, 9, 10, 11 |
| Алгебра | 7, 8, 9, 10, 11 |
| Геометрия | 7, 8, 9, 10, 11 |
**Функции:**
- Параграф-по-параграф навигация с прогресс-баром и `last_para` (последнее место)
- Задания на чтение: учитель назначает конкретные §, система проверяет выполнение
- Кнопка «В лабораторию» — ссылки на связанные симуляции (`lab_sim_links`)
- Чип «Связано с программой» (курикулумная привязка)
- Хабы глав: агрегированный прогресс по всем главам учебника
- Закладки с заметками и цветами
- Просмотр прогресса учеников класса (teacher view)
- Прогресс хранится в `textbook_progress` (JSON массив прочитанных §)
**Контент-движок Химии 7 и 8:**
- 26 параграфов (Химия 7), 52 параграфа (Химия 8) с интерактивными виджетами
- Canvas-анимации (реакции, осадки, горение, электролиз, индикаторы)
- 3D-модели молекул (ball-and-stick, VSEPR-геометрия)
- Интегрированные задания и лабораторные работы
- Карты связей понятий, глоссарий в финалах глав
---
### Виртуальная лаборатория (40 симуляций)
Canvas-движок без внешних зависимостей (по аналогу three.js — всё сделано вручную).
**Физика (14):**
projectile, waves, hydrostatics, race, dynamics, isoprocess, pendulum, opticsbench, radioactive, collision, heatengine, circuit, emfield, logic
**Химия (14):**
titration, bohratom, qualanalysis, crystal, molphys, orbitals, organic, periodic, solutions, stoichiometry, chemsandbox, chemistry, equilibrium, electrolysis
**Математика (9):**
graph, triangle, quadratic, normaldist, geometry (планиметрия), stereo (стереометрия 3D), probability, graphtransform, trigcircle
**Биология (2):**
celldivision, photosynthesis
**Игры (1):**
angrybirds
**Lab Content Engine (LabRegistry):**
- Все симуляции зарегистрированы в `window.LabRegistry` через data-driven манифест
- Каталог в БД (`lab_sims`): включение/отключение отдельных симуляций, featured, теги
- Ленивая загрузка кода симуляций (Phase 3)
- Связь симуляций с параграфами учебников (`lab_sim_links`)
- Deep-link `?sim=<id>` открывает конкретную симуляцию
- Курикулумная привязка: subject/grade/topics в манифесте
- Управление в админке: включение симуляций, редактор связей с учебниками
**Оптическая скамья (opticsbench) — режим «Конструктор»:**
- 2D-трассировщик лучей (линза, зеркало, преломление)
- Характеристические лучи предмета, дисперсия, ПВО
- Алиасы deep-link: `thinlens`, `mirrors`, `refraction`
---
### Биохимия (5 страниц)
Интерактивный модуль без тяжёлых зависимостей (только Canvas).
**Молекулярный редактор (`biochem.html`):**
- 2D и настоящая 3D-геометрия по VSEPR (ОЭПВО)
- Тумблер δ± — тепловая карта частичных зарядов (синий δ+/красный δ−), стрелка диполя
- Гибридизация, форма молекулы, валентный угол в панели свойств
- Импорт SMILES (учебное подмножество), экспорт PNG/JSON
- Химический движок `BIO` (window.BIO, dual-export browser+Node): `analyze`, `partialCharges`, `dipole`, `polarity`, `functionalGroups`, `balance`, `vsepr`, `render3D`, `parseSmiles`, `valency`
- Расширенная валидация валентности: подсказки («Углерод (C): занято 5 связей, максимум 4 — убери 1»)
**Серверный химический слой (`services/chem.js`):**
- Переиспользует то же ядро `biochem-core.js` (без дублирования) через dual-export
- `POST /api/biochem/analyze` → {formula, mass, dbe, geometry, polarity, dipole, charges, groups, massFractions, valency}
- `/validate` переведён на ядро (единые подсказки валентности на клиенте и сервере)
- `LS.biochemAnalyze(atoms, bonds)` в api.js
**Библиотека (`biochem-library.html`):** 105+ молекул, 2D/3D-превью, сравнение
**Реакции (`biochem-reactions.html`):** 27 реакций, `BIO.balance` (Гаусс+НОК), энергодиаграмма (canvas: реагенты→продукты, стрелка ΔH, экзо/эндо), коэффициенты
**Метаболические пути (`biochem-pathways.html`):** пути из БД (`bio_pathways`), прогресс Learn-режима, награда XP
**Свойства (`biochem-properties.html`):** сравнение молекул, столбчатый график молярных масс, экспорт CSV
---
### Управление классом
- Создание классов, добавление учеников
- Задания с дедлайнами и прикреплёнными файлами
- Отслеживание сдачи: статусы new/reviewed/accepted/revision
- Текстовые задания с прикреплением файлов учеником
- Журнал оценок
- Объявления и лента активности (Google Classroom-стиль)
- Шаблоны заданий для переиспользования
- Live-викторины в реальном времени (SSE)
- Аналитика успеваемости
- Назначение ученикам без класса (teacherStudents)
- Назначение чтения конкретных § учебника как домашнего задания
---
### Учебные материалы
- Банк вопросов с уровнями сложности, тематиками, поддержкой HTML/KaTeX
- Конструктор тестов с перемешиванием вопросов
- Многошаговые уроки с блоками: текст, медиа, формулы, код, викторина
- Курсы с прогрессом прохождения
- Карточки (flashcards) со spaced repetition
- Граф знаний — визуализация связей между темами
- Сборники ЦТ/ЦЭ: физика 2019–2024, математика 2021–2024 (300+ вопросов)
- Экзаменационные тесты (exam9): 80 вариантов по математике 9 класса
---
### Специализированный контент
**Биохимия** — см. раздел выше
**Красная книга (4 страницы):**
- Виды, биомы, экосистемы, пищевые сети
- Популяционные данные, квесты
**Коллекции:** коллекционирование предметов с галереей
**Galaxy Map (`/sitemap`):** интерактивная Canvas-карта всех модулей платформы с feature flag фильтрацией
---
### Геймификация
- Опыт (XP) и уровни (8 уровней эволюции, визуальная модель с VSEPR-геометрией)
- 38+ достижений в 6 группах (onboarding, streak, lab, exam, biochem, leaderboard)
- Стрики (серии дней)
- Ежедневные цели (easy/medium/hard тиры) с кольцом прогресса
- Виртуальный питомец: эволюция по уровням, 6 цветов, аксессуары (шляпа, очки, корона), радужный ошейник при streak ≥ 7, автономное настроение
- Магазин с внутренней валютой (монеты), фоны для питомца
- Коллекционирование предметов
**Панель администратора геймификации:**
- Статистика: суммарный XP, монеты, средний уровень, достижения, покупки
- Топ-10 по XP, последние начисления XP с читаемыми подписями
- Начисление XP/монет: select с полным списком пользователей + фильтр, пресеты (0/+10/+25/+50/+100/+250), пресеты причин, fix: 0 XP не начисляется
- Сброс прогресса пользователя
---
### Администрирование
- Управление пользователями и ролями (student, teacher, admin, free_student)
- Гранулярные разрешения (RBAC) — per-role и per-user
- Feature flags: включение/отключение модулей (biochem, textbooks, flashcards, board, live_quiz, exam9)
- Управление симуляциями: каталог в БД, включение/отключение, редактор связей с учебниками
- Доступ к контенту (allowlist): учебники и экзамены по классам и ученикам (`content_access`)
- Журнал аудита (`admin_audit_log`)
- System Health: реальное время метрики (CPU, RAM, event loop lag), HTTP-статистика запросов, тренды (canvas-графики), журнал последних ошибок
- Кабинет родителя с аналитикой по ученику
- Аватары с crop/zoom — ученик загружает, учитель/админ модерирует
- Панель «Обзор» (командный центр): KPI 24ч, лента завершений, триаж событий, распределение по предметам
- KaTeX рендеринг в секции «Вопросы»
- Глобальный поиск (command palette): пользователи, тесты, классы
---
### Дашборд (Главная)
**Для ученика:**
- Карточка «Продолжить/Начать чтение» с обложкой учебника (цветная, по теме)
- Карточка «Лаборатория дня» с превью симуляции на фоне блока + deep-link
- Карточка питомца с реальными данными из `/api/pet` (имя, модель, цвет, уровень XP, настроение)
- Активность (тепловая карта / streak-календарь), слабые темы, задания
**Для администратора:**
- Командный центр: pulse KPIs с count-up анимацией, attention inbox, лента завершений, health-плитки контента, топ/антирейтинг дня
**Шапка (dash-header):** увеличенная (76px), аватарка 46px, Unbounded 1.15rem, кольца ученика 48px, чипы администратора крупные
---
### Профиль и настройки
- Звуковая система (12 звуков на Web Audio API): достижения, уровень, XP, монеты, тесты, доска
- Настройки предпочтений на сервере (dashboard widget visibility, whiteboard defaults)
- Вкладка звука и настроек в профиле
---
## Быстрый старт
**Требования:** Docker, Docker Compose
```bash
git clone https://git.dolgolyov-family.by/maxim.dolgolyov/Learn_System.git
cd Learn_System
cp backend/.env.example .env
# Отредактировать .env — задать JWT_SECRET и CLIENT_ORIGIN
docker compose up -d
```
Платформа доступна на `http://localhost:3000`.
Первый admin создаётся через seed:
```bash
docker compose exec app npm run seed
```
---
## Ручная установка
**Требования:** Node.js 22+
```bash
git clone https://git.dolgolyov-family.by/maxim.dolgolyov/Learn_System.git
cd Learn_System/backend
npm install
cp .env.example .env
# Отредактировать .env
npm run migrate # применить все миграции (47 SQL-файлов)
npm run seed # опционально — тестовые данные
npm start # production
npm run dev # development (nodemon)
```
Сервер стартует на `http://localhost:3000`. Фронтенд раздаётся Express из `frontend/`.
---
## Переменные окружения
Файл: `backend/.env` (шаблон: `backend/.env.example`)
| Переменная | Описание | По умолчанию |
|---|---|---|
| `PORT` | Порт сервера | `3000` |
| `JWT_SECRET` | Секрет для подписи токенов | **обязательно** |
| `JWT_EXPIRES_IN` | Срок жизни токена | `7d` |
| `CLIENT_ORIGIN` | CORS — адрес фронтенда | `http://localhost:3000` |
| `DB_PATH` | Путь к файлу БД | `./backend/data/learnspace.db` |
| `UPLOADS_DIR` | Папка для загруженных файлов | `./backend/uploads` |
| `NODE_ENV` | Окружение (`production`/`development`) | `development` |
---
## Архитектура
```
Learn_System/
├── backend/
│ ├── src/
│ │ ├── server.js # Express app, 40 route groups
│ │ ├── config.js
│ │ ├── sse.js # Server-Sent Events broadcast
│ │ ├── controllers/ # 40+ контроллеров
│ │ │ ├── gamification/ # _shared, service, admin, achievements (split)
│ │ │ ├── classroom/ # 7 domain-файлов (split)
│ │ │ └── biochemController.js
│ │ ├── routes/ # 40 файлов маршрутов
│ │ ├── services/
│ │ │ ├── chem.js # Серверный химический движок (dual-export с BIO)
│ │ │ └── contentAccess.js # Allowlist учебников и экзаменов
│ │ ├── middleware/ # auth, RBAC, rate limit, validate
│ │ ├── db/
│ │ │ ├── migrations-runner.js # Версионированный runner (47 миграций)
│ │ │ ├── db.js # node:sqlite DatabaseSync singleton
│ │ │ └── migrations/ # SQL-файлы схемы (000046)
│ │ └── utils/ # audit, sanitize, healthMonitor
│ └── package.json
├── frontend/
│ ├── *.html # 60 страниц
│ ├── css/ls.css # Общая дизайн-система
│ └── js/
│ ├── whiteboard.js # Движок доски (~3500+ строк)
│ ├── classroom-rtc.js # WebRTC модуль
│ ├── biochem-core.js # Химическое ядро BIO (dual-export)
│ ├── pet-sprite.js # Рендерер питомца (dual-export, shared)
│ ├── lab-previews.js # SVG-превью симуляций для дашборда
│ ├── labs/ # 40 симуляций + LabRegistry
│ │ ├── _registry.js # LabRegistry — единый реестр
│ │ ├── _register-all.js # Data-driven регистрация всех симуляций
│ │ ├── lab-glue.js # Каталог SIMS, THEORY, preview SVG
│ │ ├── lab-init.js # openSim dispatcher
│ │ └── *.js # 34 движка симуляций
│ └── admin/ # Секции admin.html
│ ├── admin.js # Оркестратор + роутер
│ ├── router.js # Hash-based router
│ └── sections/ # overview, users, sessions, gam, ...
├── js/
│ ├── api.js # window.LS.* — 200+ клиентских методов
│ ├── sidebar.js # Сайдбар с nav-avatar
│ └── mobile.js # Мобильная адаптация
├── plans/ # Планы фич (BIOCHEM_UPGRADE, STEREO_3D, ...)
├── docs/ # Руководства и планы
├── docker-compose.yml
└── Dockerfile
```
### Ключевые технические решения
**Синхронизация доски**
- Штрихи сохраняются батчами через `POST /api/classroom/:id/strokes`
- Загрузка с `?since_seq=N` — только новые штрихи
- Live-превью через `POST /stroke-preview` → SSE `stroke_preview`
- Двухслойный canvas: статический (_strokes) + динамический (_selection/guides/laser)
**Real-time (SSE)**
- Один SSE-поток на пользователя
- События: `stroke_batch`, `stroke_preview`, `stroke_deleted`, `page_changed`, `chat_message`, `cursor_move`, `hand_raised`, `screen_share` и др.
**База данных**
- SQLite через `node:sqlite` (`DatabaseSync`, встроенный в Node.js 22+)
- Версионированные миграции (47 SQL-файлов, 000046)
- 106 таблиц
- Транзакционная запись батчей штрихов
**Аутентификация**
- JWT Bearer token, bcryptjs
- Роли: `admin`, `teacher`, `student`, `free_student`
- RBAC middleware с кешированием разрешений
- Rate limiting: 6000 req/min для classroom, 600 req/min для остальных
**Химическое ядро (BIO)**
- `frontend/js/biochem-core.js` — dual-export: `window.BIO` в браузере, `module.exports` в Node
- `backend/src/services/chem.js` — переиспользует ядро без дублирования
- VSEPR-геометрия, частичные заряды, дипольный момент, баланс уравнений (Гаусс+НОК)
**Доступ к контенту (content_access)**
- allowlist учебников и экзаменов по классам и конкретным ученикам
- `services/contentAccess.js`: `canAccessTextbook`, `filterTextbooks`, `allowedRefs`
- `/api/access` — admin CRUD
**Lab Content Engine (LabRegistry)**
- Все симуляции: data-driven манифесты в `LabRegistry`
- Ленивая загрузка через `LabLoader.ensure(simId)`
- Каталог в БД (`lab_sims`): включение, featured, теги, привязка к учебникам
**Shared модули (pet-sprite.js, lab-previews.js)**
- `pet-sprite.js` — канонический рендерер питомца, используется и на `/pet`, и на дашборде
- `lab-previews.js` — SVG-превью 6 симуляций для карточки «Лаборатория дня»
---
## API
Базовый URL: `http://localhost:3000/api`
Аутентификация: `Authorization: Bearer <token>`
| Группа | Путь | Назначение |
|--------|------|-----------|
| Auth | `/auth` | Регистрация, вход, профиль, аватар |
| Classroom | `/classroom` | Онлайн-урок, доска, чат, WebRTC |
| Classes | `/classes` | Управление классами |
| Assignments | `/assignments` | Задания и сдача работ |
| Submissions | `/submissions` | Сдача работ, статусы, оценки |
| Questions | `/questions` | Банк вопросов |
| Sessions | `/sessions` | Тестовые сессии |
| Courses | `/courses` | Теоретические курсы |
| Lessons | `/lessons` | Уроки с блоками контента |
| Textbooks | `/textbooks` | Учебники, прогресс, закладки |
| Lab | `/lab` | Симуляции: каталог, управление |
| Biochem | `/biochem` | Молекулы, реакции, пути, analyze, validate |
| Gamification | `/gamification` | XP, уровни, ачивки, стрики, admin |
| Pet | `/pet` | Питомец, действия, магазин фонов |
| Shop | `/shop` | Виртуальный магазин |
| Live | `/live` | Live-викторины |
| Analytics | `/analytics` | Статистика |
| Admin | `/admin` | Управление платформой, overview |
| Access | `/access` | Allowlist контента |
| Exam9 | `/exam9` | Экзаменационные тесты |
| Files | `/files` | Загрузка и хранение файлов |
| Notifications | `/notifications` | Уведомления |
| Permissions | `/permissions` | RBAC правила |
| Search | `/search` | Глобальный поиск |
| Preferences | `/preferences` | Пользовательские настройки |
| Parent | `/parent` | Кабинет родителя |
| Red Book | `/red-book` | Красная книга |
| Collection | `/collection` | Коллекции предметов |
| Games | `/games` | Игры (виселица, кроссворд) |
| Knowledge Map | `/knowledge-map` | Граф знаний |
| Flashcards | `/flashcards` | Флэшкарты |
| Templates | `/templates` | Шаблоны заданий |
| Teacher Students | `/teacher-students` | Ученики учителя без класса |
Полная документация по endpoint'ам — в `backend/src/routes/`.
---
## Роли пользователей
| Роль | Доступ |
|------|--------|
| `admin` | Полный доступ, панель администратора, командный центр |
| `teacher` | Классы, уроки, задания, учебники, проведение онлайн-уроков |
| `student` | Тесты, уроки, учебники (по allowlist), лаборатория, питомец |
| `free_student` | Ограниченный доступ (настраивается через feature flags) |
Разрешения настраиваются гранулярно через `/api/permissions` (per-role и per-user).
---
## Feature Flags
Управляются через `app_settings` и API `/api/admin` (только admin).
| Флаг | Назначение | По умолчанию |
|------|-----------|-------------|
| `feature_biochem_enabled` | Модуль биохимии | вкл |
| `feature_textbooks_enabled` | Модуль учебников | вкл |
| `feature_flashcards_enabled` | Флэшкарты | вкл |
| `feature_board_enabled` | Доска (board) | вкл |
| `feature_live_quiz_enabled` | Live-викторины | выкл |
| `feature_exam9_enabled` | Экзаменационные тесты | вкл |
| `sim_module_disabled` | Весь модуль симуляций | выкл |
| `sim_disabled_ids` | JSON-массив отключённых симуляций | `[]` |
---
## Контент
### Учебники
| Предмет | Классы | Статус |
|---------|--------|--------|
| Химия | 7, 8, 9 | Полный курс с виджетами и анимациями |
| Физика | 7, 8, 9, 10, 11 | Структура + контент |
| Алгебра | 7, 8, 9, 10, 11 | Структура + контент |
| Геометрия | 7, 8, 9, 10, 11 | Структура + контент |
### Сборники ЦТ/ЦЭ
| Сборник | Вопросов |
|---------|---------|
| Физика 20192024 | 150+ |
| Математика 20212024 | 150+ |
| Экзамен-9 (математика) | 80 вариантов |
### Симуляции
40 симуляций в 5 категориях — см. раздел «Виртуальная лаборатория».
---
## Лицензия
Частный проект. Все права защищены.