feat(biochem): Фаза 4 (4.1-4.3) — пути метаболизма из БД (API), хардкод убран

Перенос данных путей из ~700 строк инлайн-объекта PATHWAYS в biochem-pathways.html
в БД. Document-подход: каждый путь — самодостаточный документ data_json (граф
узлов/рёбер + шаги с квизами); путь всегда читается целиком, реляционных
запросов нет — нормализация не нужна.

- migration 045_bio_pathways: таблица bio_pathways(slug, name, color, ord, data_json).
- backend/scripts/biochem_pathways_data.js: данные 4 путей (извлечены из инлайн-
  объекта, теперь самодостаточный источник правды).
- seed_biochem_pathways.js: идемпотентный upsert по slug.
- biochemController.getPathways + GET /biochem/pathways (карта slug->данные).
- js/api.js: biochemGetPathways.
- biochem-pathways.html: инлайн PATHWAYS (-238 строк) заменён на загрузку из API
  в init (loadPathways); форма данных идентична — рендер не изменён.

Проверено: API отдаёт 4 пути в форме фронта, сидер идемпотентен.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-30 17:39:36 +03:00
parent e2ff28a482
commit b29b395a96
7 changed files with 1372 additions and 240 deletions
@@ -0,0 +1,15 @@
-- 045_bio_pathways.sql
-- Метаболические пути как данные (вместо ~700 строк хардкода в
-- biochem-pathways.html). Каждый путь — самодостаточный документ (граф узлов
-- и рёбер + шаги Learn-режима с квизами) в data_json; страница грузит их через
-- API. Document-подход выбран намеренно: путь всегда читается целиком,
-- реляционных запросов к узлам/рёбрам нет.
CREATE TABLE IF NOT EXISTS bio_pathways (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
color TEXT NOT NULL DEFAULT '#9B5DE5',
ord INTEGER NOT NULL DEFAULT 0,
data_json TEXT NOT NULL DEFAULT '{}'
);