feat(content): 修复服务并添加chapters/knowledge-points/questions模块

- database.ts 导出db常量替代getDb()函数

- env.ts JWT_SECRET/ES_URL/NEO4J_URL改optional加DEV_MODE

- neo4j.ts driver惰性创建+try/catch+connectionTimeout:3000

- health/lifecycle改用Drizzle原生查询

- textbooks.schema修复integer到int+导出NewTextbook类型

- 新建chapters/knowledge-points/questions三模块CRUD

- knowledge-points含Neo4j前置依赖图非阻塞查询

- content-init.sql创建4张表

端到端验证: textbooks/chapters/knowledge-points/questions全CRUD通过
This commit is contained in:
SpecialX
2026-07-09 08:52:15 +08:00
parent 033c083619
commit 921fe82771
29 changed files with 1031 additions and 246 deletions

47
scripts/content-init.sql Normal file
View File

@@ -0,0 +1,47 @@
-- Content 服务数据库初始化脚本
-- 表content_textbooks / content_chapters / content_knowledge_points / content_questions
-- 表结构与 services/content/src 下的 Drizzle schema 对齐
CREATE TABLE IF NOT EXISTS content_textbooks (
id CHAR(36) NOT NULL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
subject_id CHAR(36) NOT NULL,
grade_id CHAR(36) NOT NULL,
version VARCHAR(50) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_textbooks_subject_id (subject_id),
INDEX idx_textbooks_grade_id (grade_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS content_chapters (
id CHAR(36) NOT NULL PRIMARY KEY,
textbook_id CHAR(36) NOT NULL,
title VARCHAR(200) NOT NULL,
order_num INT NOT NULL,
parent_id CHAR(36),
INDEX idx_chapters_textbook_id (textbook_id),
INDEX idx_chapters_parent_id (parent_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS content_knowledge_points (
id CHAR(36) NOT NULL PRIMARY KEY,
chapter_id CHAR(36) NOT NULL,
title VARCHAR(200) NOT NULL,
description TEXT,
INDEX idx_knowledge_points_chapter_id (chapter_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS content_questions (
id CHAR(36) NOT NULL PRIMARY KEY,
knowledge_point_id CHAR(36) NOT NULL,
type VARCHAR(50) NOT NULL,
content TEXT NOT NULL,
answer TEXT,
explanation TEXT,
difficulty INT DEFAULT 3,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_questions_knowledge_point_id (knowledge_point_id),
INDEX idx_questions_type (type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;