feat(core-edu): 修复服务启动并打通考试作业成绩端到端链路
database.ts 导出 db 常量替代 getDb() env.ts JWT_SECRET 改 optional 并新增 DEV_MODE kafka.ts connectKafka 加 try/catch 不阻塞启动 main.ts 去全局前缀 connectKafka 改非阻塞 app.module 移除未用模块加 HealthModule controller 路由去前缀去 UseGuards 从 x-user-id 读身份 service datetime ISO 字符串转 Date 修复 drizzle 错误 修正相对 import 路径 health/lifecycle 改用 Drizzle 原生查询 新增 core-edu-init.sql 初始化 4 张表 端到端验证: exams/homework/grades 全部 201/200 Outbox 事件正确写入 core_edu_outbox 表
This commit is contained in:
65
scripts/core-edu-init.sql
Normal file
65
scripts/core-edu-init.sql
Normal file
@@ -0,0 +1,65 @@
|
||||
-- CoreEdu 服务数据库初始化脚本
|
||||
-- 表:core_edu_exams / core_edu_homework / core_edu_grades / core_edu_outbox
|
||||
|
||||
CREATE TABLE IF NOT EXISTS core_edu_exams (
|
||||
id CHAR(36) NOT NULL PRIMARY KEY,
|
||||
class_id CHAR(36) NOT NULL,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
exam_date DATETIME NOT NULL,
|
||||
duration VARCHAR(50) NOT NULL,
|
||||
total_score VARCHAR(10) NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'draft',
|
||||
created_by CHAR(36) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_exams_class_id (class_id),
|
||||
INDEX idx_exams_status (status),
|
||||
INDEX idx_exams_created_by (created_by)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS core_edu_homework (
|
||||
id CHAR(36) NOT NULL PRIMARY KEY,
|
||||
class_id CHAR(36) NOT NULL,
|
||||
title VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
due_date DATETIME NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'assigned',
|
||||
created_by CHAR(36) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_homework_class_id (class_id),
|
||||
INDEX idx_homework_status (status),
|
||||
INDEX idx_homework_created_by (created_by)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS core_edu_grades (
|
||||
id CHAR(36) NOT NULL PRIMARY KEY,
|
||||
student_id CHAR(36) NOT NULL,
|
||||
exam_id CHAR(36),
|
||||
homework_id CHAR(36),
|
||||
score VARCHAR(10) NOT NULL,
|
||||
feedback TEXT,
|
||||
graded_by CHAR(36) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_grades_student_id (student_id),
|
||||
INDEX idx_grades_exam_id (exam_id),
|
||||
INDEX idx_grades_homework_id (homework_id),
|
||||
INDEX idx_grades_graded_by (graded_by)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS core_edu_outbox (
|
||||
id CHAR(36) NOT NULL PRIMARY KEY,
|
||||
aggregate_id CHAR(36) NOT NULL,
|
||||
aggregate_type VARCHAR(50) NOT NULL,
|
||||
event_type VARCHAR(100) NOT NULL,
|
||||
payload TEXT NOT NULL,
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'pending',
|
||||
retry_count BIGINT NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
processed_at TIMESTAMP NULL,
|
||||
INDEX idx_outbox_status (status),
|
||||
INDEX idx_outbox_aggregate (aggregate_type, aggregate_id),
|
||||
INDEX idx_outbox_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
Reference in New Issue
Block a user