be4d43105e
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>
91 lines
3.0 KiB
Markdown
91 lines
3.0 KiB
Markdown
# 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
|
||
```
|