Data Dictionary · Nội dung (Coral)
⚙️ Trang này sinh tự động từ source code bằng
scripts/gen-reference.mjs— đừng sửa tay, sửa code rồi chạynpm run gen:reference.
Thuộc Data Dictionary. 4 bảng, content_blueprints tới item_versions.
content_blueprints
Migration 0016 — Content blueprint registry (LX / Assessment). SDD-013 §3, REQ-CNT-05/09/11. Tên content_blueprints (không phải blueprints như bản đầu SDD-013 §3) vì blueprints đã là bảng goal blueprint (SDD-002 §12, migration 0002) — hai nghĩa khác nhau, SDD-013 §1.5. DDL thuần, không data (RISK-014): row vào bằng scripts/seed-blueprints.mjs hoặc API.
migration: 0016_content_blueprints.sql
| Cột | Kiểu | Ràng buộc / ghi chú |
|---|---|---|
id | TEXT | PRIMARY KEY |
kind | TEXT | NOT NULL CHECK (kind IN ('lx','assessment')) |
name_vi | TEXT | NOT NULL |
description | TEXT | — |
target_selector_json | TEXT | NOT NULL |
spec_json | TEXT | NOT NULL |
version | INTEGER | NOT NULL DEFAULT 1 |
status | TEXT | NOT NULL DEFAULT 'draft' CHECK (status IN ('draft','active','deprecated')) |
created_by | TEXT | — |
created_at | TEXT | NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')) |
Index: idx_content_blueprints(kind, status)
content_review_queue
--------------------------------------------------------------------------- 3. content_review_queue — learner báo sai thì đi về đâu (AS-06.2.5, AS-10.4.5) --------------------------------------------------------------------------- Hai nguồn đổ vào: báo cáo của người (bảng content_reports) và sàng lọc máy (screen_flags_json). Có hàng đợi thì báo cáo không rơi vào hư vô — Coral xử lý, ghi lại đã kết luận ra sao.
migration: 0032_content_lifecycle.sql
| Cột | Kiểu | Ràng buộc / ghi chú |
|---|---|---|
id | TEXT | PRIMARY KEY |
target_type | TEXT | NOT NULL, -- item | exam | interaction | forum_topic | experience |
target_id | TEXT | NOT NULL |
reason | TEXT | NOT NULL, -- vì sao vào hàng đợi (mã lỗi máy hoặc lời learner) |
reported_by | TEXT | , -- user id; NULL = do máy sàng lọc |
status | TEXT | NOT NULL DEFAULT 'open' |
| — | table constraint | CHECK (status IN ('open','in_review','resolved','dismissed')) |
created_at | TEXT | NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')) |
resolved_at | TEXT | — |
resolution | TEXT | -- kết luận: sửa gì, hoặc vì sao không sửa |
Index: idx_review_queue_status(status, created_at DESC) · idx_review_queue_target(target_type, target_id)
generation_runs
migration: 0016_content_blueprints.sql
| Cột | Kiểu | Ràng buộc / ghi chú |
|---|---|---|
id | TEXT | PRIMARY KEY |
blueprint_id | TEXT | NOT NULL REFERENCES content_blueprints(id) |
blueprint_version | INTEGER | NOT NULL |
input_json | TEXT | — |
status | TEXT | NOT NULL DEFAULT 'queued' CHECK (status IN ('queued','running','review','done','failed')) |
progress_done | INTEGER | NOT NULL DEFAULT 0 |
progress_total | INTEGER | NOT NULL DEFAULT 0 |
stats_json | TEXT | — |
started_at | TEXT | — |
finished_at | TEXT | — |
Khóa ngoại: blueprint_id → content_blueprints
Index: idx_generation_runs(blueprint_id, status)
item_versions
--------------------------------------------------------------------------- 2. item_versions — nội dung production không sửa trực tiếp (AS-06.3.1 🔴, AS-06.3.5) --------------------------------------------------------------------------- Mọi thay đổi tạo một version mới ở trạng thái candidate; publish là hành động đổi con trỏ. Rollback = publish lại một version cũ, không sửa tay DB.
migration: 0032_content_lifecycle.sql
| Cột | Kiểu | Ràng buộc / ghi chú |
|---|---|---|
id | TEXT | PRIMARY KEY |
item_id | TEXT | NOT NULL |
version | INTEGER | NOT NULL |
payload_json | TEXT | NOT NULL, -- snapshot đầy đủ: prompt, options, correct_index, misconception… |
quality_json | TEXT | , -- hồ sơ chất lượng 8 chiều tại đúng version này |
status | TEXT | NOT NULL DEFAULT 'candidate' |
| — | table constraint | CHECK (status IN ('candidate','published','rejected','superseded')) |
created_at | TEXT | NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')) |
created_by | TEXT | — |
| — | table constraint | UNIQUE (item_id, version) |
Index: idx_item_versions_item(item_id, version DESC) · idx_item_versions_status(status, created_at DESC)