feat(content): v2 扩展 Elective/LessonPlan/CoursePlan 三业务域
新增 3 个业务域(10 RPC): - ElectiveService: 选修课列表/学生选课记录/选课/退课(含容量与重复校验) - LessonPlanService: 教师备课列表/学生备课列表(仅 published)/详情 - CoursePlanService: 学生课程计划列表/详情 - KnowledgeGraphService.GetKnowledgePath: 与 GetLearningPath 同实现 新增 4 张 MySQL 表(elective_courses/selections/lesson_plans/course_plans),含完整索引。 新增 11 个权限点,覆盖 admin/teacher/student/parent 四角色。 proto 由 4 Service/22 RPC 扩展至 7 Service/32 RPC,v1 全部 RPC 保持向后兼容。 修复 logger.ts pino 导入: default import 在 NodeNext ESM 下不可调用, 改用 named import(与 iam/msg/core-edu 对齐)。 Docker 本地测试全部通过(HTTP + gRPC 双协议),健康检查、 Elective/LessonPlan/CoursePlan CRUD、4 个新 gRPC Service 全部验证通过。 nextstep-v2.md 已创建,记录上下游依赖与 6 项联调待办。
This commit is contained in:
@@ -527,6 +527,78 @@ CREATE TABLE IF NOT EXISTS `content_outbox_events` (
|
||||
INDEX `idx_outbox_aggregate` (`aggregate_type`, `aggregate_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 4.6 选修课目录表(v2 新增)
|
||||
CREATE TABLE IF NOT EXISTS `content_elective_courses` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`title` VARCHAR(255) NOT NULL,
|
||||
`subject_id` VARCHAR(32) NOT NULL,
|
||||
`teacher_id` VARCHAR(32) NOT NULL,
|
||||
`capacity` INT NOT NULL DEFAULT 30,
|
||||
`enrolled_count` INT NOT NULL DEFAULT 0,
|
||||
`status` VARCHAR(32) NOT NULL DEFAULT 'open',
|
||||
`description` TEXT NULL,
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_elective_subject` (`subject_id`),
|
||||
INDEX `idx_elective_teacher` (`teacher_id`),
|
||||
INDEX `idx_elective_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 4.7 学生选课记录表(v2 新增)
|
||||
CREATE TABLE IF NOT EXISTS `content_elective_selections` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`student_id` VARCHAR(32) NOT NULL,
|
||||
`course_id` VARCHAR(32) NOT NULL,
|
||||
`status` VARCHAR(32) NOT NULL DEFAULT 'selected',
|
||||
`selected_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`dropped_at` TIMESTAMP NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_selection_student` (`student_id`),
|
||||
INDEX `idx_selection_course` (`course_id`),
|
||||
INDEX `idx_selection_student_course` (`student_id`, `course_id`),
|
||||
INDEX `idx_selection_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 4.8 备课计划表(v2 新增)
|
||||
CREATE TABLE IF NOT EXISTS `content_lesson_plans` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`teacher_id` VARCHAR(32) NOT NULL,
|
||||
`class_id` VARCHAR(32) NOT NULL,
|
||||
`subject_id` VARCHAR(32) NOT NULL,
|
||||
`title` VARCHAR(255) NOT NULL,
|
||||
`content` TEXT NOT NULL,
|
||||
`status` VARCHAR(32) NOT NULL DEFAULT 'draft',
|
||||
`metadata` JSON NULL,
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_lesson_plan_teacher` (`teacher_id`),
|
||||
INDEX `idx_lesson_plan_class` (`class_id`),
|
||||
INDEX `idx_lesson_plan_subject` (`subject_id`),
|
||||
INDEX `idx_lesson_plan_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- 4.9 课程计划表(v2 新增)
|
||||
CREATE TABLE IF NOT EXISTS `content_course_plans` (
|
||||
`id` VARCHAR(32) NOT NULL,
|
||||
`student_id` VARCHAR(32) NOT NULL,
|
||||
`class_id` VARCHAR(32) NOT NULL,
|
||||
`subject_id` VARCHAR(32) NOT NULL,
|
||||
`title` VARCHAR(255) NOT NULL,
|
||||
`plan_type` VARCHAR(32) NOT NULL DEFAULT 'default',
|
||||
`content` TEXT NOT NULL,
|
||||
`status` VARCHAR(32) NOT NULL DEFAULT 'active',
|
||||
`metadata` JSON NULL,
|
||||
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `idx_course_plan_student` (`student_id`),
|
||||
INDEX `idx_course_plan_class` (`class_id`),
|
||||
INDEX `idx_course_plan_student_type` (`student_id`, `plan_type`),
|
||||
INDEX `idx_course_plan_status` (`status`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
|
||||
-- ============================================================
|
||||
-- 5. MSG 服务(services/msg/src/**/*.schema.ts)
|
||||
|
||||
Reference in New Issue
Block a user