cat-shark and Claude Opus 4.8
4f99f31475
fix(ci): 绑定分支与部署环境并加固 IMAGE_TAG 传递
...
- dev 仅允许 dev 分支,prod 仅允许 master/main
- IMAGE_TAG 写 env 文件 + image_tag.txt 兜底
- checkout 时确保 maven 容器内安装 git
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-20 22:46:17 +08:00
cat-shark and Claude Opus 4.8
43580dd1fd
Add Kubernetes deployment configurations
...
- Add deployment.yaml with imagePullSecrets and env configuration
- Add service.yaml with NodePort configuration
- Configure Spring Boot environment variables from ConfigMap and Secrets
- Ensures proper image pull authentication from private registry
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-20 21:23:59 +08:00
cat-shark
d5d9b7aa99
feat(ci): 添加 imagePullSecret 自动创建步骤
2026-07-19 22:45:59 +08:00
cat-shark
6eca6de249
feat(ci): 添加部署失败时的调试输出
2026-07-19 22:27:12 +08:00
cat-shark
a42df9d521
feat(ci): 使用时间戳标签确保每次部署都触发更新
2026-07-19 21:56:14 +08:00
cat-shark
015ecd13d8
fix(ci): 使用命名 volume 避免挂载冲突
2026-07-19 21:31:18 +08:00
cat-shark
8abd750dfb
debug(ci): 添加 Docker 安装调试信息
2026-07-19 21:24:03 +08:00
cat-shark
f8e24ffdf0
fix(ci): 挂载 Docker socket 并安装 Docker CLI
2026-07-19 21:18:47 +08:00
cat-shark
688be6b65f
feat(ci): 缓存 Maven 本地仓库,避免重复下载依赖
2026-07-19 21:17:45 +08:00
cat-shark
a6e75f6e97
fix(ci): 使用容器自带的 mvn 替代 mvnw
2026-07-19 21:14:01 +08:00
cat-shark
6cc5212eba
fix(ci): 使用 maven 容器镜像,移除手动安装依赖
2026-07-19 20:56:30 +08:00
cat-shark
2d87b96a09
fix(ci): 使用绝对路径调用 apt-get (host 模式)
2026-07-19 20:49:55 +08:00
cat-shark
eb2869a71d
fix(ci): 移除 sudo - runner 以 root 运行
2026-07-19 20:41:58 +08:00
cat-shark
1789141a7b
fix: 解决 deploy.yml 冲突
2026-07-19 20:13:05 +08:00
cat-shark
b80e4c01f5
fix: Alpine compatibility - apk, docker login, /tmp/kubeconfig
2026-07-19 19:27:44 +08:00
cat-shark and Claude Opus 4.8
b70d90d18a
fix(ci): 修复部署流水线配置
...
- 使用 Git commit hash 作为镜像标签
- 修复 Docker 网络配置(先连接 traefik-public,再附加 mysql 网络)
- 增加健康检查超时到 120 秒
- 添加镜像清理阶段(保留 7 天)
- 修复 Gitea Actions: github.sha → gitea.sha
- 添加 Docker Registry 认证
- kubectl 版本修正为 v1.30.0
- JDK 安装添加 sudo 权限
- 添加部署失败自动回滚机制
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-19 19:12:21 +08:00
cat-shark
73fdaf82e7
fix: add docker.io install for step container (no docker CLI in runner image)
2026-07-19 19:02:23 +08:00
cat-shark
5418f23111
ci: replace actions/checkout with git clone (no Node.js in runner)
2026-07-19 18:56:02 +08:00
cat-shark
58e9e4db22
ci: add kubectl setup step with secret
2026-07-19 18:50:39 +08:00
cat-shark
a6dab438d5
ci: use unique image tags (git sha)
2026-07-19 18:49:23 +08:00
cat-shark
174b4265d7
Switch to manual trigger (workflow_dispatch)
2026-07-19 18:14:06 +08:00
cat-shark
3d157ed30c
Add CI/CD pipeline
lpt-be Build & Deploy / build-and-deploy (push) Failing after 4s
2026-07-19 18:07:50 +08:00
cat-shark
b18f8b4d1c
feat(复习): 节点级 focusPath + findNode,回退 session 维度
...
- 移除 MindMapNode.sessionNum、filterBySession、getTaskSessions
- 新增 MindMapTreeTool.extractSubtree() 按路径提取子树作为对比基准
- 新增 findClosestNode/getPath/similarityScore 支持节点匹配
- 新增 POST /review/standard-mind-map/{taskNum}/find-node
- recallCompare 使用 focusPath 替代 sessionNum
- ReviewRecallRecordEntity.focusPath 替代 sessionNum
- Flyway V20260706_1: review_recall_records 加 focus_path 列
2026-07-05 18:12:32 +08:00
cat-shark
3c3f682b2b
feat(导图): 防并发生成 + 增量合并 + mergeTrees 工具
...
- MindMapTreeTool.mergeTrees() 按标准化标题合并新旧树节点
- StandardMindServiceImpl 防并发生成(ConcurrentHashMap 锁)
- incrementalGenerate() 保留用户编辑节点 + 追加新节点
- regenerate 端点接受 mode 参数(full/incremental)
2026-07-05 15:19:03 +08:00
cat-shark
a636e516d1
feat(复习): 支持会话维度复习 + 标准导图按会话过滤(后端)
...
- MindMapNode 新增 sessionNum 字段
- BuiltinMindMapGenerator 生成节点时填充 sessionNum
- MindMapTreeTool.filterBySession() 按会话过滤标准导图
- recallCompare 接受 sessionNum 参数
- ReviewRecallRecordEntity 新增 sessionNum 字段
- Flyway V20260705_1: review_recall_records 加 session_num 列
- 新增 GET /study-sessions/tasks/{taskNum}/sessions 端点
2026-07-05 14:40:38 +08:00
cat-shark
22cc5dc871
feat(历史报告): 展示学习预期目标以区分各会话
...
StudyReportsEntity 新增 sessionExpectation 字段(非数据库),
getTaskReports() 查询后自动填充对应会话的预期描述,
前端报告条目显示 sessionNum + 预期目标。
2026-07-05 12:35:25 +08:00
cat-shark
3a30b746f5
fix(分页): MybatisPlusConfig 缺少 PaginationInnerInterceptor 导致 selectPage 不分页
...
PaginationInnerInterceptor 负责为 selectPage 生成 LIMIT/COUNT 查询,
缺失时返回全部记录且 total=0,前端分页控件因此不显示。
2026-07-05 11:43:13 +08:00
cat-shark
0a866bde14
feat(会话):新增活跃会话查询接口
...
StudySessionsServiceImpl.getActiveSession(excludeTaskNum):
- 查询所有 ONGOING/PAUSED 状态的 session
- 如果活跃会话属于 excludeTaskNum 则返回 null(同一任务继续)
- 否则返回活跃会话的 StudySessionResponse
Controller 新增 GET /study-sessions/active?excludeTaskNum=
用于前端页面恢复 + 阻止多任务同时开始
2026-07-05 11:05:01 +08:00
cat-shark
c1385911c6
feat(会话):分页查询任务的历史残片/报告接口
...
StudySessionsService 新增:
- getTaskFragments(taskNum, page, size, keyword) → Page<FragmentsEntity>
- getTaskReports(taskNum, page, size, keyword) → Page<ReportsEntity>
通过子查询 session_num in (select session_num from study_sessions
where task_num = ?) 实现跨 session 聚合,keyword 支持 content
字段 LIKE 搜索。接口使用 MyBatis-Plus Page 分页。
控制器新增两个 GET 端点:
- /study-sessions/tasks/{taskNum}/fragments
- /study-sessions/tasks/{taskNum}/reports
2026-07-05 10:35:45 +08:00
cat-shark
eaa0e20c81
feat(学习材料):material_url varchar(255) → TEXT
...
新增 Flyway 迁移 V20260704_1,允许存储多行 URL
2026-07-04 22:37:08 +08:00
cat-shark
c0fe137c48
fix(后端):@Transactional + WebMvcProdConfig OPTIONS 跳过
...
- WebMvcProdConfig:SaInterceptor 增加 OPTIONS 预检跳过,
解决生产环境 CORS 预检 401 问题
- StudySessionsServiceImpl.endedStudySession/continueStudySession:
增加 @Transactional
- StudyReportFragmentsServiceImpl.createFragments:
增加 @Transactional
2026-07-04 17:38:00 +08:00
cat-shark
cca51530c6
fix(后端):extraNodes 解析兼容字符串和对象两种格式
...
AI 可能返回 [字符串] 或 [{title:...,path:...}] 两种格式,
buildCompareResultFromAI() 现在通过 isTextual() 判断并分别处理
2026-07-04 16:52:09 +08:00
cat-shark
55b7c1c83c
feat(后端):AiServiceClient 改为 submit+poll 异步任务模式
...
- 内部实现重构:每个公有方法内部 submitAndWait() → submitTask() + pollResult()
- submitTask(): POST /ai/tasks,返回 taskId(30s 超时)
- pollResult(): 轮询 GET /ai/tasks/:taskId,500ms 首次延迟,
2s × 10 次后退避到 5s,总超时 600s(10 min)
- 公有方法签名完全不变:aggregateReport()、generateMindMap()、compareRecall()
- 异常失败时返回 Optional.empty(),调用方降级逻辑不变
- application.yml timeout-seconds: 180 → 600
2026-07-04 16:41:21 +08:00
cat-shark
4ec900577e
fix(后端):lpt-ai 超时从 90s 增加到 180s
2026-07-04 16:16:27 +08:00
cat-shark
af4f536980
fix(复习):AI 对比结果由 Java 端标注标准树,不再依赖 LLM 输出树结构
...
根因:LLM 无法可靠输出 CompareResult 所需的完整嵌套树 JSON,
实际返回格式(coverage/matched/missed)与预期不符。
修复:
- AiServiceClient.compareRecall() 返回 Optional<JsonNode>(原始 JSON),
不再尝试直接反序列化为 CompareResult
- StandardMindMapServiceImpl 新增 buildCompareResultFromAI():
解析 AI 返回的平铺 matches/missedTitles/extraNodes 列表,
将 MATCHED|/MISSED| 标注写入标准树,确定性构建 CompareResult
- AI 只负责语义匹配判断,树结构操作由 Java 端保证可靠性
2026-07-04 16:09:07 +08:00
cat-shark
7ac7868511
feat(复习):回忆对比优先走 AI 语义对比,失败时降级为内置算法
...
- CompareResult.java:新增 evaluation 字段(AI 对比时写入评价文本)
- AiServiceClient.java:新增 compareRecall(),调用 lpt-ai /ai/compare-recall
- StandardMindMapServiceImpl.java:recallCompare() 中注入 AiServiceClient,
优先 try AI 语义对比,含层级上下文和同义表达识别;
AI 不可用或失败时自动 fallback 到内置标题匹配算法
- StandardMindMapServiceImplTest.java:适配新增的 AiServiceClient 依赖
2026-07-04 15:47:24 +08:00
cat-shark
cd5ee0b404
feat(思维导图):AI 生成接入 lpt-ai 服务
...
RemoteAiMindMapClient 原为 TODO 空桩,依赖 lpt.ai.endpoint/api-key
配置,从未生效。现改为依赖 AiServiceClient(lpt.ai-service.url),
调用 lpt-ai 的 /ai/generate-mind-map 接口获取 AI 大纲。
变更:
- AiServiceClient 新增 generateMindMap():调用 POST /ai/generate-mind-map
- RemoteAiMindMapClient 重写:注入 AiServiceClient,isAvailable()
改为检查 AiServiceClient.isConfigured(),generate() 用 lpt-ai
返回的大纲文本解析为 MindMapNode 树
- StandardMindMapServiceImpl.doGenerate():优先选 AI 客户端
(非 BUILTIN),AI 失败时自动降级到内置规则引擎
- application.yml:移除不再使用的 lpt.ai.endpoint/api-key 配置
2026-07-04 11:14:27 +08:00
cat-shark
baf9ae8761
docs(评审):补充 2026-07-04 交付记录
2026-07-04 00:08:59 +08:00
cat-shark
21c5b8f761
feat(报告):AI 聚合残片生成报告草稿
...
- AiServiceClient:调用 lpt-ai 独立服务,未配置/失败时返回 empty
- GET /study-sessions/{sessionNum}/report-draft:AI 聚合(含预期对比),降级为残片拼接
- 草稿仅作为编辑起点,最终报告仍由用户确认后保存
- application.yml 增加 lpt.ai-service.url 配置
2026-07-03 23:52:32 +08:00
cat-shark
3c4db2fead
feat(复习):feed 智能模式——加权随机采样
...
- /review/feed?mode=smart:时间衰减 × 回忆掌握度加权采样
- 越久未见、回忆覆盖率越低的内容出现概率越高
- 保持随机性,符合复习模块偶遇式设计理念
- 概率性单元测试验证低掌握内容显著优先
2026-07-03 23:44:40 +08:00
cat-shark
7461b6b5ad
feat(优先级):维度权重可配置并即时重算
...
- 新表 user_priority_weights(每用户一行,默认 0.35/0.25/0.20/0.10/0.10)
- PriorityWeightsService:读取/保存权重,权重和必须为 1,保存后重算全部任务
- TaskController:GET/PUT /tasks/priority-weights
- CalculatedPriorityTool 支持自定义权重
- 修复 updateTask 不重算优先级的问题
2026-07-03 23:41:50 +08:00
cat-shark
b67cf238c2
feat(预期):学习预期后端闭环——实体/服务/端点
...
- 迁移:study_expectations.session_num 改为 varchar 对齐会话编码
- StudyExpectationsEntity / Mapper / Service:每会话一条预期,重复创建覆盖
- StudySessionController:PUT/GET /{sessionNum}/expectation
- 移除空的 studySessionList 占位方法
2026-07-03 23:38:52 +08:00
cat-shark
090d03e251
docs(评审):补充评价回应、研究支撑、技术推荐与修正优先级
2026-07-03 22:56:18 +08:00
cat-shark
d173b37a9b
docs(评审):架构与设计评审报告
2026-07-03 09:16:00 +08:00
cat-shark
32b247526b
feat(复习):标准思维导图生成与回忆对比
...
- 新增 review_standard_mind_maps / review_recall_records 数据表
- BuiltinMindMapGenerator:从报告/残片/应用场景规则生成标准导图
- MindMapAiClient 接口 + RemoteAiMindMapClient 预留
- StandardMindMapService:生成/编辑/重新生成/回忆对比
- 对比算法:标题归一化 + Bigram Jaccard 模糊匹配
- ReviewController 新增 6 个端点
- MindMapTreeTool / MindMapNode / CompareResult 工具类
- 完整单元测试(10 个,全部通过)
- 更新 docs/review-module-design.md
2026-07-03 08:53:51 +08:00
cat-shark
5f3f35c53b
feat: parse uploaded review mind maps
2026-06-20 10:33:14 +08:00
cat-shark
f170e85297
feat: complete review workflow support
2026-06-20 09:16:20 +08:00
cat-shark
81543969d8
feat: 新增复习任务统计接口
2026-06-18 00:07:43 +08:00
cat-shark
2cf3533141
feat: 登录密码改用 BCrypt 校验
2026-06-18 00:06:42 +08:00
cat-shark
d0c78ceb28
test: 新增 StudySessionsServiceImpl 单元测试 (10 cases)
...
覆盖场景:ONGOING/PAUSED 状态的消息返回、报告创建、
边界值、会话不存在异常、updateById 调用验证
2026-05-30 17:37:29 +08:00
cat-shark
d7e1d9a10c
test: 新增 StudySessionsEntity 单元测试 (16 cases)
...
覆盖场景:直接结束、暂停后结束、暂停继续再结束、多次暂停继续、
边界值(10分钟)、极短时间、已结束会话、PAUSED 状态直接结束等
2026-05-30 17:37:22 +08:00
cat-shark
a64daacc71
feat: 结束会话时返回有效时间不足的提示信息
...
- StudySessionsServiceImpl: 检测 effectiveTime 被清零时返回提示消息
- StudySessionController: 将提示消息通过 CommonResult.success(message) 传给前端
2026-05-30 17:36:56 +08:00
cat-shark
591dc89e53
feat: 有效学习时间不足10分钟不计入总学习时间
...
- StudySessionsEntity: 新增 MIN_EFFECTIVE_TIME_SECONDS 常量,
endedStudySession() 中检查 effectiveTime,不足则清零
- StudySessionsService: endedStudySession 返回类型从 void 改为 String
2026-05-30 17:36:50 +08:00
cat-shark
c7eb448e33
Merge branch 'feature/fragment-edit' into dev
...
学习碎片编辑功能:
- 新增碎片更新 API(PUT /report-fragments/{id})
- 新增会话碎片列表查询 API(GET /report-fragments/session/{sessionNum})
- 前端碎片详情页支持内联编辑
- 前端学习会话页展示碎片列表并支持编辑
2026-05-30 16:06:43 +08:00
cat-shark
d5835cdf55
feat: 新增碎片更新和会话查询的Controller端点
...
- PUT /report-fragments/{id} 更新碎片内容
- GET /report-fragments/session/{sessionNum} 获取指定会话的完整碎片列表
2026-05-30 15:50:40 +08:00
cat-shark
487b38e8b0
feat: 新增碎片更新和会话查询的Service实现
...
- StudyReportFragmentsService 接口新增 updateFragments 和 getFragmentsBySession 方法
- ServiceImpl 实现碎片更新(校验存在性后更新)和按会话编号查询碎片列表
2026-05-30 15:50:34 +08:00
cat-shark
e1cd5d5b82
feat: 新增碎片更新请求DTO和MapStruct映射
...
- 新建 UpdateFragmentsRequest,包含 @NotBlank 校验的 content 字段
- FragmentsConvert 新增 UpdateFragmentsRequest 到 Entity 的映射方法
2026-05-30 15:50:28 +08:00
cat-shark
6bd6b00518
Revert "Revert "revert: 恢复 flyway validate-on-migrate 为 true""
...
This reverts commit 82948e3ff9 .
2026-05-30 09:22:16 +08:00
cat-shark
aadf1911ce
fix:移除多余的创建语句
2026-05-30 09:22:13 +08:00
cat-shark
82948e3ff9
Revert "revert: 恢复 flyway validate-on-migrate 为 true"
...
This reverts commit fe6983cb69 .
2026-05-28 00:31:50 +08:00
cat-shark
fe6983cb69
revert: 恢复 flyway validate-on-migrate 为 true
2026-05-28 00:25:57 +08:00
cat-shark
27cb1b21fb
fix: 关闭 flyway validate-on-migrate 临时绕过 checksum 校验
2026-05-28 00:19:30 +08:00
cat-shark
4b2bd5a47a
fix: 添加 flyway repair-on-migrate 修复 checksum 不一致
2026-05-28 00:13:59 +08:00
cat-shark
b6bc587ea2
fix: 复原 V20250719_2 迁移文件,修复 Flyway 校验失败
2026-05-28 00:00:30 +08:00
cat-shark
a92465dfc0
chore: 清理冗余注释,保留字段/业务含义注释
2026-05-27 23:03:43 +08:00
cat-shark
78a24e8394
chore: 修复 mvnw 文件权限
2026-05-27 21:24:15 +08:00
cat-shark
1fc41f1443
feat: 添加 MyBatis-Plus 多租户配置,自动注入行级数据隔离
2026-05-27 21:24:15 +08:00
cat-shark
24d871b430
refactor: 优化其他 Service 实现和 Controller 代码
2026-05-27 21:23:50 +08:00
cat-shark
950c91791f
refactor: ReviewServiceImpl 改用 MyBatis-Plus Java API 实现复盘功能
2026-05-27 21:23:44 +08:00
cat-shark
f797a712db
refactor: 移除 ReviewMapper 自定义 SQL,改用 MyBatis-Plus Java API
2026-05-27 21:23:36 +08:00
cat-shark
a932bf52ca
refactor: 移除 StudyExpectations 相关代码
2026-05-27 21:23:31 +08:00
cat-shark
4b26ed46ec
refactor: 移除 UserTask 相关代码(entity/mapper/service/impl/XML)
2026-05-27 21:23:23 +08:00
cat-shark
8409dc58ab
db: 新增迁移脚本,删除不再使用的 user_task 表
2026-05-27 21:23:14 +08:00
cat-shark
0beaed8121
docs: 添加 AGENTS.md 项目规范,记录数据库迁移命名规则
2026-05-27 21:23:09 +08:00
cat-shark
b0219df313
maven部署配置,配置国内镜像源
2026-05-23 23:27:46 +08:00
cat-shark
f271efbead
feat: add getTaskReview API endpoint for fetching all reports and fragments by task number
2026-05-23 21:01:01 +08:00
cat-shark
375ec8858c
feat(review): 新增复习内容滚动展示与交互 API
...
- 新增 /review/feed 端点,合并报告和残片数据按时间倒序返回
- 新增 /review/report/{id} 和 /review/fragment/{id} 端点
- 支持复习内容在首页滚动展示及点击查看详情
2026-05-23 19:26:24 +08:00
cat-shark
a7cb4a1167
chore(config): 收敛 dev 与 uat 的 CORS 域名白名单
2026-04-12 18:55:44 +08:00
cat-shark
1338cbfc59
refactor(cors): 按环境读取允许来源并支持 uat 配置
2026-04-12 18:55:35 +08:00
cat-shark
4c6167281f
fix(prod): 指定 Traefik 网络避免后端转发卡住
2026-04-12 18:55:27 +08:00
cat-shark
6db049670b
chore(dev): 后端开发环境接入 Traefik 并路由 /api
2026-04-12 18:55:03 +08:00
cat-shark
e4f21f3a69
更新生产环境部署配置,使用Traefik代理
2026-04-12 16:04:12 +08:00
cat-shark
666cb2a3a6
更新生产环境部署配置,使用Traefik代理
2026-04-12 16:01:10 +08:00
cat-shark
932ea06ce3
更新生产环境部署配置,使用Traefik代理
2026-04-12 15:41:41 +08:00
cat-shark
f938076bda
Merge branch 'dev'
...
# Conflicts:
# Jenkinsfile
# src/main/resources/application-prod.yml
2026-04-12 14:05:37 +08:00
cat-shark
1d1b48bdbd
调整本地开发环境配置参数
2026-04-12 13:06:29 +08:00
cat-shark
43747f785c
修复任务更新主键校验与会话查询SQL参数化
2026-04-12 13:06:11 +08:00
cat-shark
c696397d83
修正学习会话计时指针与时间单位定义
2026-04-12 13:06:00 +08:00
cat-shark
05f47b92a8
补全登录退出接口并统一登出路径
2026-04-12 13:05:46 +08:00
cat-shark
d3a5e0813f
feat(#N/A): 修改数据库
2025-11-02 22:08:05 +08:00
cat-shark
f54bc3f60f
feat(#N/A): 修改数据库
2025-11-02 22:01:27 +08:00
cat-shark
2e6c59cfb6
feat(#N/A): 修改数据库
2025-11-02 21:26:13 +08:00
cat-shark
affabcabca
feat(#N/A): 修改数据库
2025-11-02 20:15:02 +08:00
cat-shark
c33c4325f4
feat(14): 对任务列表按照计算优先级进行排序
2025-10-26 18:57:29 +08:00
cat-shark
19ea1a71f9
feat(14): 对任务列表按照计算优先级进行排序
2025-10-26 18:55:13 +08:00
cat-shark
af0dcc49db
feat(N/A): 配置WebMvcConfig,解决跨域问题
...
(cherry picked from commit 4e01a28435 )
2025-10-26 18:44:09 +08:00
cat-shark
4e01a28435
feat(N/A): 配置WebMvcConfig,解决跨域问题
2025-10-26 18:34:23 +08:00
cat-shark
6fc6815563
feat(N/A): 配置dev环境的cors配置
2025-10-26 18:11:25 +08:00
cat-shark
23faaf3205
feat(N/A): 配置dev环境的cors配置
2025-10-26 18:11:23 +08:00
cat-shark
116398485e
feat(N/A): 配置dev环境的cors配置
2025-10-26 18:11:21 +08:00