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>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# LearnSpace
|
||||
|
||||
**Образовательная платформа с интерактивной онлайн-доской, системой тестирования, управлением классами и элементами геймификации.**
|
||||
**Образовательная платформа с интерактивной онлайн-доской, системой тестирования, учебниками, виртуальной лабораторией и геймификацией.**
|
||||
|
||||
Стек: Node.js · Express · SQLite · Vanilla JS · Canvas API · SSE · WebRTC
|
||||
Стек: Node.js · Express · SQLite (`node:sqlite` DatabaseSync) · Vanilla JS · Canvas API · SSE · WebRTC
|
||||
|
||||
---
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
- [Архитектура](#архитектура)
|
||||
- [API](#api)
|
||||
- [Роли пользователей](#роли-пользователей)
|
||||
- [Feature Flags](#feature-flags)
|
||||
- [Контент](#контент)
|
||||
|
||||
---
|
||||
|
||||
@@ -29,38 +31,60 @@
|
||||
- Маркер (highlighter) с настраиваемой прозрачностью
|
||||
- Лазерная указка (без сохранения)
|
||||
- Ластик
|
||||
- 11 фигур: прямоугольник, скруглённый прямоугольник, эллипс, линия, стрелка, треугольник, ромб, шестиугольник, звезда, облако, коннектор
|
||||
- Стикеры с редактированием
|
||||
- Текстовые блоки
|
||||
- Вставка изображений
|
||||
- Таблицы
|
||||
- Connector (линии со стрелками)
|
||||
- Стикеры с редактированием текста
|
||||
- Текстовые блоки (inline editing)
|
||||
- Вставка изображений (drag & drop + URL)
|
||||
- Таблицы (интерактивные)
|
||||
- LaTeX-формулы (KaTeX) с визуальным редактором и категориями символов
|
||||
- Система координат с построением графиков функций (встроенный парсер)
|
||||
- Система координат с построением графиков функций (встроенный парсер выражений)
|
||||
- Числовая ось для неравенств (точки, интервалы)
|
||||
- Циркуль с анимацией
|
||||
- Циркуль с трёхфазной state machine
|
||||
|
||||
**Фигуры (11):** прямоугольник, скруглённый прямоугольник, эллипс, линия, стрелка, треугольник, ромб, шестиугольник, звезда, облако, коннектор
|
||||
|
||||
**Инструмент выделения**
|
||||
- Перемещение и изменение размера всех объектов
|
||||
- Вращение объектов (handle над объектом)
|
||||
- Lasso multi-select (резиновая рамка)
|
||||
- Shift+click для добавления к выделению
|
||||
- Copy / Paste с автосмещением
|
||||
- Copy/Paste с автосмещением
|
||||
- Snap-гайды при выравнивании объектов
|
||||
- Delete, Bring to front, Send to back
|
||||
|
||||
**Навигация по холсту**
|
||||
- Zoom: колесо мыши к курсору, Ctrl+`+`/`-`/`0`, кнопки в тулбаре
|
||||
- Pan: зажатый пробел + перетаскивание
|
||||
- Minimap (192×108) в правом нижнем углу при zoom > 1 — клик/drag для прыжка по холсту
|
||||
- Minimap (192×108) в правом нижнем углу при zoom > 1 — клик/drag для прыжка
|
||||
|
||||
**Инструменты измерения**
|
||||
- Линейка: поворот (drag ↺), изменение длины (drag ↔), панель свойств (угол, длина)
|
||||
- Линейка: поворот, изменение длины, панель свойств (угол, длина)
|
||||
- Транспортир: поворот, изменение радиуса, панель свойств
|
||||
- Авто-измерения геометрических фигур (длины, углы, площадь)
|
||||
|
||||
**Планиметрия (геометрические построения)**
|
||||
- Середина отрезка, биссектриса, высота, описанная/вписанная окружность
|
||||
- Касательная, параллельный перенос, симметрия
|
||||
- Правильный n-угольник, параллелограмм, средняя линия треугольника
|
||||
- Метки параллельности, прямых углов, одинаковых отрезков
|
||||
- Дуги углов, засечки рёбер
|
||||
|
||||
**Стереометрия 3D**
|
||||
- Куб, прямоугольный параллелепипед, тетраэдр, октаэдр, пирамида, призма
|
||||
- Усечённая пирамида, правильные многогранники, конус, цилиндр, сфера
|
||||
- Скрещивающиеся прямые, производные точки 3D, длины рёбер
|
||||
- Вращение мышью, deep-link на конкретную фигуру (`openSim('stereo:cube')` / `?stereofig=`)
|
||||
|
||||
**Темы доски (4)**
|
||||
- **Chalkboard** — зелёный фон, меловая текстура
|
||||
- **Blackboard** — тёмно-синий, диагональная текстура
|
||||
- **Corkboard** — пробковый, волокна
|
||||
- **Whiteboard** — светло-серый, маркерная доска
|
||||
|
||||
**Страницы и шаблоны**
|
||||
- Неограниченное количество страниц на сессию
|
||||
- Боковая панель с миниатюрами страниц
|
||||
- Шаблоны: чистая страница, сетка, линейки, точки, координатные оси
|
||||
- Шаблоны: чистая, сетка, линованная, точки, координатные оси
|
||||
- Экспорт страницы в PNG
|
||||
|
||||
**Коммуникация**
|
||||
@@ -72,49 +96,203 @@
|
||||
- Курсор учителя виден ученикам в реальном времени
|
||||
- Выдача прав рисования отдельным ученикам
|
||||
- Личные заметки по уроку (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
|
||||
- Граф знаний — визуализация связей между темами
|
||||
- Интерактивные лабораторные работы (30+ симуляций): физика, химия, биология, математика
|
||||
- Сборники ЦТ/ЦЭ: физика 2019–2024, математика 2021–2024 (300+ вопросов)
|
||||
- Экзаменационные тесты (exam9): 80 вариантов по математике 9 класса
|
||||
|
||||
### Управление классом
|
||||
|
||||
- Создание классов, добавление учеников
|
||||
- Задания с дедлайнами, отслеживание сдачи
|
||||
- Журнал оценок
|
||||
- Объявления и лента активности (Google Classroom-стиль)
|
||||
- Шаблоны заданий для переиспользования
|
||||
- Live-викторины в реальном времени
|
||||
- Аналитика успеваемости
|
||||
---
|
||||
|
||||
### Специализированный контент
|
||||
|
||||
- **Биохимия**: интерактивные молекулы, реакции, метаболические пути, электрофорез
|
||||
- **Красная книга**: виды, биомы, экосистемы, пищевые сети, популяционные данные, квесты
|
||||
**Биохимия** — см. раздел выше
|
||||
|
||||
**Красная книга (4 страницы):**
|
||||
- Виды, биомы, экосистемы, пищевые сети
|
||||
- Популяционные данные, квесты
|
||||
|
||||
**Коллекции:** коллекционирование предметов с галереей
|
||||
|
||||
**Galaxy Map (`/sitemap`):** интерактивная Canvas-карта всех модулей платформы с feature flag фильтрацией
|
||||
|
||||
---
|
||||
|
||||
### Геймификация
|
||||
|
||||
- Опыт (XP) и уровни
|
||||
- Система достижений
|
||||
- Опыт (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 не начисляется
|
||||
- Сброс прогресса пользователя
|
||||
|
||||
---
|
||||
|
||||
### Администрирование
|
||||
|
||||
- Управление пользователями и ролями
|
||||
- Гранулярные разрешения (RBAC)
|
||||
- Feature flags (глобальные и per-class)
|
||||
- Журнал аудита
|
||||
- Кабинет родителя
|
||||
- Управление пользователями и ролями (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)
|
||||
- Вкладка звука и настроек в профиле
|
||||
|
||||
---
|
||||
|
||||
@@ -130,9 +308,9 @@ cp backend/.env.example .env
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Платформа будет доступна на `http://localhost:3000`.
|
||||
Платформа доступна на `http://localhost:3000`.
|
||||
|
||||
Первый пользователь с ролью `admin` создаётся через seed:
|
||||
Первый admin создаётся через seed:
|
||||
```bash
|
||||
docker compose exec app npm run seed
|
||||
```
|
||||
@@ -141,29 +319,24 @@ docker compose exec app npm run seed
|
||||
|
||||
## Ручная установка
|
||||
|
||||
**Требования:** Node.js 18+
|
||||
**Требования:** Node.js 22+
|
||||
|
||||
```bash
|
||||
# 1. Клонировать и установить зависимости
|
||||
git clone https://git.dolgolyov-family.by/maxim.dolgolyov/Learn_System.git
|
||||
cd Learn_System/backend
|
||||
npm install
|
||||
|
||||
# 2. Конфигурация
|
||||
cp .env.example .env
|
||||
# Отредактировать .env
|
||||
|
||||
# 3. Миграции и начальные данные
|
||||
npm run migrate
|
||||
npm run seed # опционально — тестовые вопросы и пользователи
|
||||
npm run migrate # применить все миграции (47 SQL-файлов)
|
||||
npm run seed # опционально — тестовые данные
|
||||
|
||||
# 4. Запуск
|
||||
npm start # production
|
||||
npm run dev # development (nodemon)
|
||||
npm start # production
|
||||
npm run dev # development (nodemon)
|
||||
```
|
||||
|
||||
Сервер запустится на `http://localhost:3000`.
|
||||
Фронтенд раздаётся Express-ом из папки `frontend/`.
|
||||
Сервер стартует на `http://localhost:3000`. Фронтенд раздаётся Express из `frontend/`.
|
||||
|
||||
---
|
||||
|
||||
@@ -189,28 +362,49 @@ npm run dev # development (nodemon)
|
||||
Learn_System/
|
||||
├── backend/
|
||||
│ ├── src/
|
||||
│ │ ├── server.js # Express app, 28 route groups
|
||||
│ │ ├── server.js # Express app, 40 route groups
|
||||
│ │ ├── config.js
|
||||
│ │ ├── sse.js # Server-Sent Events broadcast
|
||||
│ │ ├── controllers/ # 30 контроллеров
|
||||
│ │ ├── routes/ # 28 файлов маршрутов
|
||||
│ │ ├── middleware/ # auth, RBAC, rate limit, validate
|
||||
│ │ ├── 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/
|
||||
│ │ │ ├── migrate.js # Auto-migration при старте (76 таблиц)
|
||||
│ │ │ ├── db.js # better-sqlite3 singleton
|
||||
│ │ │ └── migrations/ # SQL-файлы схемы
|
||||
│ │ └── utils/
|
||||
│ │ │ ├── migrations-runner.js # Версионированный runner (47 миграций)
|
||||
│ │ │ ├── db.js # node:sqlite DatabaseSync singleton
|
||||
│ │ │ └── migrations/ # SQL-файлы схемы (000–046)
|
||||
│ │ └── utils/ # audit, sanitize, healthMonitor
|
||||
│ └── package.json
|
||||
├── frontend/
|
||||
│ ├── *.html # 43 страницы
|
||||
│ ├── css/ls.css # Общая дизайн-система
|
||||
│ ├── *.html # 60 страниц
|
||||
│ ├── css/ls.css # Общая дизайн-система
|
||||
│ └── js/
|
||||
│ ├── whiteboard.js # Движок доски (~3200 строк)
|
||||
│ ├── classroom-rtc.js # WebRTC модуль
|
||||
│ └── labs/ # 30+ физических симуляций
|
||||
│ ├── 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.* — клиентское API
|
||||
│ └── mobile.js # Мобильная адаптация
|
||||
│ ├── api.js # window.LS.* — 200+ клиентских методов
|
||||
│ ├── sidebar.js # Сайдбар с nav-avatar
|
||||
│ └── mobile.js # Мобильная адаптация
|
||||
├── plans/ # Планы фич (BIOCHEM_UPGRADE, STEREO_3D, ...)
|
||||
├── docs/ # Руководства и планы
|
||||
├── docker-compose.yml
|
||||
└── Dockerfile
|
||||
```
|
||||
@@ -219,26 +413,45 @@ Learn_System/
|
||||
|
||||
**Синхронизация доски**
|
||||
- Штрихи сохраняются батчами через `POST /api/classroom/:id/strokes`
|
||||
- Загрузка с `?since_seq=N` — клиент получает только новые штрихи
|
||||
- Live-превью через `POST /stroke-preview` → SSE `stroke_preview` событие
|
||||
- Двухслойный canvas: статический слой (_strokes) + динамический (_selection/guides/laser)
|
||||
- Загрузка с `?since_seq=N` — только новые штрихи
|
||||
- Live-превью через `POST /stroke-preview` → SSE `stroke_preview`
|
||||
- Двухслойный canvas: статический (_strokes) + динамический (_selection/guides/laser)
|
||||
|
||||
**Real-time (SSE)**
|
||||
- Один SSE-поток на пользователя: `GET /api/classroom/:id/events`
|
||||
- События: `stroke_batch`, `stroke_preview`, `stroke_deleted`, `page_changed`, `chat_message`, `cursor_move`, `hand_raised`, `screen_share`, и др.
|
||||
- Compression отключён для SSE-потоков
|
||||
- Один SSE-поток на пользователя
|
||||
- События: `stroke_batch`, `stroke_preview`, `stroke_deleted`, `page_changed`, `chat_message`, `cursor_move`, `hand_raised`, `screen_share` и др.
|
||||
|
||||
**База данных**
|
||||
- SQLite через `better-sqlite3` (синхронный API)
|
||||
- Автоматические миграции при каждом старте сервера
|
||||
- 76 таблиц, транзакционная запись батчей штрихов
|
||||
- SQLite через `node:sqlite` (`DatabaseSync`, встроенный в Node.js 22+)
|
||||
- Версионированные миграции (47 SQL-файлов, 000–046)
|
||||
- 106 таблиц
|
||||
- Транзакционная запись батчей штрихов
|
||||
|
||||
**Аутентификация**
|
||||
- JWT Bearer token
|
||||
- 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
|
||||
@@ -247,21 +460,41 @@ Learn_System/
|
||||
|
||||
Аутентификация: `Authorization: Bearer <token>`
|
||||
|
||||
| Группа | Базовый путь | Назначение |
|
||||
|--------|-------------|-----------|
|
||||
| Auth | `/auth` | Регистрация, вход, профиль |
|
||||
| Группа | Путь | Назначение |
|
||||
|--------|------|-----------|
|
||||
| Auth | `/auth` | Регистрация, вход, профиль, аватар |
|
||||
| Classroom | `/classroom` | Онлайн-урок, доска, чат, WebRTC |
|
||||
| Classes | `/classes` | Управление классами |
|
||||
| Assignments | `/assignments` | Задания и сдача работ |
|
||||
| Submissions | `/submissions` | Сдача работ, статусы, оценки |
|
||||
| Questions | `/questions` | Банк вопросов |
|
||||
| Sessions | `/sessions` | Тестовые сессии |
|
||||
| Courses | `/courses` | Теоретические курсы |
|
||||
| Lessons | `/lessons` | Уроки с блоками контента |
|
||||
| Gamification | `/gamification` | XP, ачивки, стрики |
|
||||
| Files | `/files` | Загрузка и хранение файлов |
|
||||
| Textbooks | `/textbooks` | Учебники, прогресс, закладки |
|
||||
| Lab | `/lab` | Симуляции: каталог, управление |
|
||||
| Biochem | `/biochem` | Молекулы, реакции, пути, analyze, validate |
|
||||
| Gamification | `/gamification` | XP, уровни, ачивки, стрики, admin |
|
||||
| Pet | `/pet` | Питомец, действия, магазин фонов |
|
||||
| Shop | `/shop` | Виртуальный магазин |
|
||||
| Live | `/live` | Live-викторины |
|
||||
| Analytics | `/analytics` | Статистика |
|
||||
| Admin | `/admin` | Управление платформой |
|
||||
| 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/`.
|
||||
|
||||
@@ -271,12 +504,54 @@ Learn_System/
|
||||
|
||||
| Роль | Доступ |
|
||||
|------|--------|
|
||||
| `admin` | Полный доступ ко всему, включая панель администратора |
|
||||
| `teacher` | Создание классов, уроков, заданий, проведение онлайн-уроков |
|
||||
| `student` | Прохождение тестов, участие в уроках, доступ к материалам |
|
||||
| `free_student` | Ограниченный доступ (настраивается feature flags) |
|
||||
| `admin` | Полный доступ, панель администратора, командный центр |
|
||||
| `teacher` | Классы, уроки, задания, учебники, проведение онлайн-уроков |
|
||||
| `student` | Тесты, уроки, учебники (по allowlist), лаборатория, питомец |
|
||||
| `free_student` | Ограниченный доступ (настраивается через feature flags) |
|
||||
|
||||
Разрешения настраиваются гранулярно через `/api/permissions`.
|
||||
Разрешения настраиваются гранулярно через `/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 | Структура + контент |
|
||||
|
||||
### Сборники ЦТ/ЦЭ
|
||||
|
||||
| Сборник | Вопросов |
|
||||
|---------|---------|
|
||||
| Физика 2019–2024 | 150+ |
|
||||
| Математика 2021–2024 | 150+ |
|
||||
| Экзамен-9 (математика) | 80 вариантов |
|
||||
|
||||
### Симуляции
|
||||
|
||||
40 симуляций в 5 категориях — см. раздел «Виртуальная лаборатория».
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user