LearnSpace: full-stack educational whiteboard platform

Node.js/Express backend + vanilla JS frontend.
Features: real-time collaborative whiteboard (SSE), multi-page support,
LaTeX formulas, shapes/connectors, coordinate systems, number lines,
compass, zoom/pan, Catmull-Rom pencil smoothing, ruler/protractor with
rotation & resize controls, minimap navigation overlay, auto-measurements,
multi-page thumbnails sidebar, PNG export, page templates.
Student/teacher workflows: classes, assignments, library, dashboard.
Mobile responsive. SQLite (better-sqlite3).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-04-12 10:10:37 +03:00
commit be4d43105e
204 changed files with 118117 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
# LearnSpace Backend — Фаза 1
## Быстрый старт
```bash
cd backend
npm install
# 1. Скопировать и заполнить переменные окружения
cp .env.example .env
# 2. Создать базу данных в PostgreSQL
createdb learnspace
# 3. Применить миграции (создать таблицы)
npm run migrate
# 4. Загрузить тестовые вопросы
npm run seed
# 5. Запустить сервер
npm run dev
```
## API
### Auth
| Метод | URL | Тело | Описание |
|-------|-----|------|----------|
| POST | `/api/auth/register` | `{ email, password, name }` | Регистрация |
| POST | `/api/auth/login` | `{ email, password }` | Вход |
| GET | `/api/auth/me` | — | Текущий пользователь |
### Предметы
| Метод | URL | Описание |
|-------|-----|----------|
| GET | `/api/subjects` | Список предметов |
| GET | `/api/subjects/:slug/topics` | Темы предмета |
### Сессии тестирования
| Метод | URL | Тело | Описание |
|-------|-----|------|----------|
| POST | `/api/sessions` | `{ subject_slug, mode, count, topic_id? }` | Начать тест |
| POST | `/api/sessions/:id/answer` | `{ question_id, option_id, time_spent_sec? }` | Отправить ответ |
| POST | `/api/sessions/:id/finish` | — | Завершить тест + разбор |
| GET | `/api/sessions/:id/result` | — | Результат завершённого теста |
| GET | `/api/sessions/history` | — | История тестов |
Все `/api/sessions/*` требуют заголовок:
```
Authorization: Bearer <token>
```
## Добавление вопросов
Создать JSON-файл в `data/` по образцу `questions-bio.json`:
```json
{
"subject": "chem",
"topics": [{ "name": "Органическая химия", "order": 1 }],
"questions": [
{
"topic": "Органическая химия",
"difficulty": 2,
"text": "Текст вопроса",
"options": ["А", "Б", "В", "Г"],
"answer": 0,
"explanation": "Объяснение правильного ответа"
}
]
}
```
Затем повторно запустить `npm run seed`.
## Структура проекта
```
backend/
├── data/ ← JSON с вопросами
├── src/
│ ├── server.js ← точка входа
│ ├── middleware/auth.js ← JWT верификация
│ ├── db/
│ │ ├── pool.js ← соединение с PostgreSQL
│ │ ├── migrate.js ← запуск миграций
│ │ ├── seed.js ← загрузка вопросов
│ │ └── migrations/ ← SQL-файлы схемы
│ ├── routes/ ← маршруты
│ └── controllers/ ← бизнес-логика
└── .env.example
```