Skip to content

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ạy npm 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ộtKiểuRàng buộc / ghi chú
idTEXTPRIMARY KEY
kindTEXTNOT NULL CHECK (kind IN ('lx','assessment'))
name_viTEXTNOT NULL
descriptionTEXT—
target_selector_jsonTEXTNOT NULL
spec_jsonTEXTNOT NULL
versionINTEGERNOT NULL DEFAULT 1
statusTEXTNOT NULL DEFAULT 'draft' CHECK (status IN ('draft','active','deprecated'))
created_byTEXT—
created_atTEXTNOT 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ộtKiểuRàng buộc / ghi chú
idTEXTPRIMARY KEY
target_typeTEXTNOT NULL, -- item | exam | interaction | forum_topic | experience
target_idTEXTNOT NULL
reasonTEXTNOT NULL, -- vì sao vào hàng đợi (mã lỗi máy hoặc lời learner)
reported_byTEXT, -- user id; NULL = do máy sàng lọc
statusTEXTNOT NULL DEFAULT 'open'
—table constraintCHECK (status IN ('open','in_review','resolved','dismissed'))
created_atTEXTNOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))
resolved_atTEXT—
resolutionTEXT-- 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ộtKiểuRàng buộc / ghi chú
idTEXTPRIMARY KEY
blueprint_idTEXTNOT NULL REFERENCES content_blueprints(id)
blueprint_versionINTEGERNOT NULL
input_jsonTEXT—
statusTEXTNOT NULL DEFAULT 'queued' CHECK (status IN ('queued','running','review','done','failed'))
progress_doneINTEGERNOT NULL DEFAULT 0
progress_totalINTEGERNOT NULL DEFAULT 0
stats_jsonTEXT—
started_atTEXT—
finished_atTEXT—

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ộtKiểuRàng buộc / ghi chú
idTEXTPRIMARY KEY
item_idTEXTNOT NULL
versionINTEGERNOT NULL
payload_jsonTEXTNOT NULL, -- snapshot đầy đủ: prompt, options, correct_index, misconception…
quality_jsonTEXT, -- hồ sơ chất lượng 8 chiều tại đúng version này
statusTEXTNOT NULL DEFAULT 'candidate'
—table constraintCHECK (status IN ('candidate','published','rejected','superseded'))
created_atTEXTNOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))
created_byTEXT—
—table constraintUNIQUE (item_id, version)

Index: idx_item_versions_item(item_id, version DESC) · idx_item_versions_status(status, created_at DESC)