Files
Edu/scripts/core-edu-init.sql
SpecialX 4533da6484 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 表
2026-07-09 08:02:22 +08:00

66 lines
2.5 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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;