feat: YAML content importer + phys/ct-2024 collection (proof)

content/phys/ct-2024.yaml — 15 questions from ЦЭ,ЦТ 2024 across
6 topics (kinem, mol, emf, electro, magnet, optics) as proof of format.

backend/scripts/import-content.js — unified importer:
- Validates schema (subject, year, options, exactly-1-correct)
- Aliases (kinem, mol, ...) resolve to Russian topic names via get-or-create
- Deduplicates by first 80 chars of text (matches legacy seed_*.js behavior)
- Runs in a single transaction, idempotent re-runs

On fresh DB: 13 added (2 dedup collisions — same 80-char prefix, expected).
On prod DB: 0 added (all already exist from legacy seeds).
Second run on either: 0 added (dedup works).

Legacy seed_phys_ct2024.js kept as backup — see content/README.md
for migration guide.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-06 17:42:07 +03:00
parent 977e46e75b
commit 25489a733a
5 changed files with 481 additions and 0 deletions
+2
View File
@@ -10,6 +10,7 @@
"seed": "node src/db/seed.js",
"seed:permissions": "node src/db/seed-permissions.js",
"lint:routes": "node scripts/check-route-auth.js",
"import:content": "node scripts/import-content.js",
"test": "node --test tests/*.test.js"
},
"dependencies": {
@@ -18,6 +19,7 @@
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"express": "^4.18.3",
"js-yaml": "^4.1.1",
"jsonwebtoken": "^9.0.2",
"multer": "^2.1.1",
"sharp": "^0.34.5",