Files
Maxim Dolgolyov be4d43105e 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>
2026-04-12 10:10:37 +03:00

91 lines
3.0 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 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
```