e76485cadc
Полная инфраструктура: hub, 5 ch-скелетов, lab-скелет, миграция 039, расширение phys.js на 11 хелперов + 2 класса симуляций для новых тем 7-го класса. ФАЙЛЫ: - backend/src/db/migrations/039_physics_7_hub.sql — self-sufficient миграция (parent physics-7 + 6 children: ch1..ch5 + lab). Palette: sky/blue для hub, глав: indigo/violet/red/amber/emerald/cyan. - frontend/textbooks/physics_7_hub.html (862 строки) — hub с прогресс-картами 6 разделов, шпаргалкой курса в 5 mini-карточках, 10 интегрированных боссов финала курса (через ачивку «Магистр физики 7», +150 XP), темой/lang storage через ключи physics7_*. Sidebar-фикс на десктопе встроен. - frontend/textbooks/physics_7_ch1..ch5.html (350-390 строк каждый) — скелеты глав с header, paragraph selector, sidebar, прогресс/XP, goTo, search-модалом, KaTeX с delimiters, sidebar-фиксом, cache-busting ?v=20260530. Каждая глава имеет правильное число параграфов (7/6/14/8/7) + sec-finalN. - frontend/textbooks/physics_7_lab.html (306 строк) — скелет лаб. практикума на 6 ЛР с teal/cyan палитрой и ачивкой «Лаборант 7 класса» (+80 XP). - backend/scripts/gen_phys7_ch.js / gen_phys7_lab.js — генераторы из единого шаблона (для регенерации при правках инфраструктуры). PHYS.JS НОВЫЕ ХЕЛПЕРЫ (всё работает, smoke-test пройден): - forceVector(x,y,F,angle,color,label) — стрелка силы с подписью - dynamometer(x,y,h,Fmax,F) — динамометр с пружиной и шкалой - blockOnSurface(x,y,w,h,label,weights) — брусок со стопкой гирь - connectedVessels(x,y,kindA,kindB,levelY) — сообщающиеся сосуды - hydraulicPress(x,y,sSmall,sLarge,fSmall) — гидравлический пресс - mercuryBarometer(x,y,hMm) — ртутный барометр Торричелли - aneroidBarometer(cx,cy,r,p) — стрелочный барометр-анероид - uManometer(x,y,w,h,deltaH) — U-образный жидкостный манометр - rulerWithError(x,y,lenCm,mmPerDiv) — линейка со шкалой и ценой деления - bimetal(x,y,w,h,deltaT) — биметаллическая пластина (гнётся от ΔT) - expandingRod(x,y,l0,alpha,deltaT) — стержень с тепловым расширением - class HillSlideSim — тележка на горке (§42, закон сохранения; графики Ek/Ep/Etot) - class PendulumSim — математический маятник (§42, осцилляции) Все 13 экспортированы в window.PHYS, smoke-test показал физически разумные значения энергий. Parse-check + node --check проходят. Уроки phys 9 учтены сразу: cache-busting на phys.js, sidebar-фикс @media min-width:981px, delimiters для renderMathInElement. PHASE 0 DONE. Дальше: Phase 1 Wave 1 — §§1-2 (Физика как наука + Тело/явление/величина).
LearnSpace Backend — Фаза 1
Быстрый старт
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:
{
"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