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:
@@ -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
|
||||
```
|
||||
Reference in New Issue
Block a user