feat(education): complete Flyway migration and atomic submit

This commit is contained in:
2026-07-30 12:06:55 +08:00
parent ce02f8acb4
commit 79a5799502
228 changed files with 32551 additions and 1376 deletions

84
CLAUDE.md Normal file
View File

@@ -0,0 +1,84 @@
# CLAUDE.md — 恭学教育
## 项目定位
恭学教育是基于 RuoYi-Vue-Pro 的教育 SaaS 平台,后端技术栈为 Spring Boot 4、MyBatis-Plus、PostgreSQL、Redis。
主要开发入口:
- `yudao-module-education/`:教育业务模块
- `yudao-server/`:应用启动模块,默认端口 `48080`
- `sql/postgresql/`PostgreSQL 初始化与历史 SQL
- `tools/education-student-harness/`:学生端 Playwright E2E 测试
分支、工作区状态、运行中的容器和临时任务属于动态信息;执行任务时从 Git、配置文件和运行环境读取不在本文档固化。
## 工作方式
### Serena 优先
编码任务开始前调用 Serena `initial_instructions` 并激活项目。优先使用 Serena 完成符号检索、引用分析和结构化编辑Serena 不可用或不适合时再使用通用文件与命令工具。互不依赖的查询或编辑应批量调用。
### 遵循现有代码
- 修改前检查工作区,保留用户已有的未提交修改。
- 代码风格、命名、注释密度和分层方式与相邻代码保持一致。
- 优先复用框架现有能力,避免为单一场景建立平行抽象。
- 只修改当前任务需要的文件;发现相邻问题时先判断是否影响本次交付。
### Skills
项目级 Skills 位于 `.claude/skills/`,已有规范索引见 `.claude/skills/index.yaml`
数据库结构、索引、约束、数据回填、必要种子数据、基线或 Flyway 配置发生变化时,使用项目 Skill
```text
/flyway-postgresql
```
Flyway 的版本分配、接管策略、验证步骤以 `.claude/skills/flyway-postgresql/SKILL.md` 为唯一事实来源。
## 架构约束
### Education 模块
- `yudao.education.catalog-mode` 控制目录数据源:
- `SCALAR_READ`:通过 `ScalarCatalogProvider` 访问 HTTP 数据源。
- `JAVA_READ`:通过 `JavaCatalogProvider` 直连 PostgreSQL。
- `QuestionCatalogServiceImpl` 返回前端前必须剥离答案与解析等敏感字段。
- 题目不可见或数据源不可用时采用 fail-closed不进行静默降级。
- 多租户业务 DO 继承 `TenantBaseDO`,由 MyBatis-Plus 注入 `tenant_id`
### PostgreSQL
项目运行数据库为 PostgreSQL。Java 注解 SQL、MyBatis XML、测试 SQL 和运行配置均使用 PostgreSQL 方言。
- 主键:`BIGINT GENERATED BY DEFAULT AS IDENTITY`
- 时间:`TIMESTAMP`,默认当前时间使用 `CURRENT_TIMESTAMP`
- 布尔:`BOOLEAN`,按需使用 `NOT NULL DEFAULT false`
- 幂等插入:`ON CONFLICT ... DO NOTHING`
- Upsert`ON CONFLICT (...) DO UPDATE SET ... EXCLUDED.column`
- 空值兜底:`COALESCE`;时间格式化:`TO_CHAR`;日期字段提取:`EXTRACT`
- 有界删除使用有序、限量的主键子查询或 CTE。
- DO 主键遵循项目既有的 `@TableId``@KeySequence("{table}_seq")` 模式。
### Flyway
运行时 migration 放在所属模块:
```text
<module>/src/main/resources/db/migration/<module>/
```
已在共享环境执行的 migration 是不可变发布历史。数据库修复通过更高版本的向前 migration 完成,生产环境保持 `clean-disabled: true`
## 验证
按改动范围执行最小充分验证。后端主链路至少运行:
```bash
git diff --check
mvn -pl yudao-server -am -DskipTests clean compile
```
涉及行为变化时运行对应模块的聚焦测试;涉及数据库 migration 时还要确认脚本被打包到模块的 `target/classes/db/migration/`。只有实际执行过 PostgreSQL migration才能报告数据库迁移成功否则明确说明仅完成静态检查或编译验证。