Files
Learn_System/backend/src/db/migrations/004_textbooks.sql
T
Maxim Dolgolyov c0af5502bf chore(textbooks): убрать сторонних авторов — все учебники наши (author=LearnSpace)
Политика «все учебники наши»: нигде не упоминаются сторонние авторы.
- Миграции (15 файлов): колонка author → 'LearnSpace'; из описаний убран оборот
  «по учебнику <автор>:»; авторские фамилии вычищены из комментариев. Покрыты
  Арефьева/Пирютко, Казаков, Латотин/Чеботаревский/Горбунова/Цыбулько, Исаченкова,
  Жилко/Маркович/Сокольский, Герасимов/Лобанов.
- HTML: physics_9_ch5 («по канве учебника Исаченковой» → «по учебной программе»),
  physics_11_hub (hdr-sub с авторами → описание курса), mocks-redesign (карточки-авторы → LearnSpace).
- Генераторы gen_phys9_ch.js/gen_phys11_stubs.js — шаблоны без авторов.
- НОВОЕ: update_textbook_authors.js — идемпотентный апдейтер ЖИВОЙ БД (миграции уже
  применены): author→'LearnSpace' у всех 107 учебников + чистка описаний. DRY-RUN по умолч.

⚠️ Живую БД правит ПОЛЬЗОВАТЕЛЬ: node backend/scripts/update_textbook_authors.js --apply
(в БД сейчас author пуст у всех, видимые упоминания были в описаниях «по учебнику …»).
review_geom10/11.js не тронуты — там фамилии как поисковые шаблоны детектора, не атрибуция.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 11:52:06 +03:00

43 lines
2.7 KiB
SQL
Raw 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.
-- Feature flag for textbooks module
INSERT OR IGNORE INTO app_settings (key, value) VALUES ('feature_textbooks_enabled', '1');
-- Catalog of textbooks (admin-editable; html_path is relative to /frontend/textbooks/)
CREATE TABLE textbooks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT UNIQUE NOT NULL,
subject TEXT NOT NULL, -- 'chemistry', 'physics', 'math', 'biology', ...
grade INTEGER NOT NULL, -- 9, 10, 11, ...
title TEXT NOT NULL,
author TEXT NOT NULL DEFAULT '',
description TEXT NOT NULL DEFAULT '',
html_path TEXT NOT NULL, -- relative filename: 'chemistry_9.html'
para_count INTEGER NOT NULL DEFAULT 0, -- total paragraphs (for progress %)
color TEXT NOT NULL DEFAULT 'violet',-- visual theme: 'amber','blue','violet','green',...
sort_order INTEGER NOT NULL DEFAULT 0,
is_active INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- Per-user reading progress (one row per (user, textbook))
CREATE TABLE textbook_progress (
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
textbook_id INTEGER NOT NULL REFERENCES textbooks(id) ON DELETE CASCADE,
paragraphs_read TEXT NOT NULL DEFAULT '[]', -- JSON array of para keys like ["p1","p3","p7"]
last_para TEXT, -- last opened paragraph key (e.g. 'p15')
last_at TEXT NOT NULL DEFAULT (datetime('now')),
PRIMARY KEY (user_id, textbook_id)
);
-- Assignment extension: link to textbook + paragraph range string ("1-5" or "1,3,5")
ALTER TABLE assignments ADD COLUMN textbook_id INTEGER REFERENCES textbooks(id) ON DELETE SET NULL;
ALTER TABLE assignments ADD COLUMN textbook_paragraphs TEXT;
-- Seed: chemistry 9 + physics 9 (the two files we just copied)
INSERT INTO textbooks (slug, subject, grade, title, author, description, html_path, para_count, color, sort_order) VALUES
('chemistry-9', 'chemistry', 9, 'Химия — 9 класс', 'Шиманович Е. Я.',
'Полный курс химии за 9 класс. §1–60: строение атома, химическая связь, классы соединений, ОВР, металлы и их соединения, электролиз.',
'chemistry_9.html', 60, 'amber', 1),
('physics-9', 'physics', 9, 'Физика — 9 класс', 'LearnSpace',
'Полный курс физики за 9 класс: §1–38. Механика, кинематика, динамика, статика, законы сохранения, импульс, работа и энергия.',
'physics_9.html', 38, 'blue', 2);