From badffd8bcaf752606b0c6bd092914a0d3d77987c Mon Sep 17 00:00:00 2001 From: wh Date: Thu, 9 Apr 2026 11:43:10 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E5=8F=8A=E5=90=84=E7=AB=A0=E8=8A=82=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=9B=AE=E5=BD=95=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../specs/2026-04-09-label-backend-design.md | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/docs/superpowers/specs/2026-04-09-label-backend-design.md b/docs/superpowers/specs/2026-04-09-label-backend-design.md index 3d62ce8..c3ee716 100644 --- a/docs/superpowers/specs/2026-04-09-label-backend-design.md +++ b/docs/superpowers/specs/2026-04-09-label-backend-design.md @@ -4,6 +4,56 @@ --- +## 目录 + +- [一、项目总览](#一项目总览) + - [1.1 系统定位](#11-系统定位) + - [1.2 数据流水线](#12-数据流水线) + - [1.3 技术栈矩阵](#13-技术栈矩阵) + - [1.4 后端模块清单](#14-后端模块清单) + - [1.5 包结构](#15-包结构) +- [二、数据库 DDL](#二数据库-ddl) +- [三、公共基础设施](#三公共基础设施) + - [3.1 统一响应封装](#31-统一响应封装) + - [3.2 全局异常处理](#32-全局异常处理) + - [3.3 多租户 CompanyContext(ThreadLocal)](#33-多租户-companycontextthreadlocal) + - [3.4 Shiro 配置](#34-shiro-配置) + - [3.5 Redis Key 管理](#35-redis-key-管理) + - [3.6 AOP 审计日志切面](#36-aop-审计日志切面) + - [3.7 RustFS S3 客户端](#37-rustfs-s3-客户端) + - [3.8 AI 服务 HTTP 客户端](#38-ai-服务-http-客户端) +- [四、业务模块纵切](#四业务模块纵切) + - [4.1 用户与权限模块](#41-用户与权限模块) + - [4.2 资料管理模块](#42-资料管理模块) + - [4.3 任务管理模块(含并发控制)](#43-任务管理模块含并发控制) + - [4.4 标注工作台模块(EXTRACTION 阶段)](#44-标注工作台模块extraction-阶段) + - [4.5 问答生成模块(QA_GENERATION 阶段)](#45-问答生成模块qa_generation-阶段) + - [4.6 训练数据导出模块](#46-训练数据导出模块) + - [4.7 系统配置模块](#47-系统配置模块) + - [4.8 视频处理模块](#48-视频处理模块) +- [五、状态机实现规范](#五状态机实现规范) + - [5.1 StateValidator](#51-statevalidator) + - [5.2 source_data 状态机](#52-source_data-状态机) + - [5.3 annotation_task 状态机](#53-annotation_task-状态机) + - [5.4 training_dataset 状态机](#54-training_dataset-状态机) + - [5.5 video_process_job 状态机](#55-video_process_job-状态机) +- [六、Docker Compose 配置](#六docker-compose-配置) +- [七、测试策略](#七测试策略) + - [7.1 基本原则](#71-基本原则) + - [7.2 并发任务领取测试(必须)](#72-并发任务领取测试必须) + - [7.3 视频回调幂等测试(必须)](#73-视频回调幂等测试必须) + - [7.4 状态机越界拒绝测试](#74-状态机越界拒绝测试) + - [7.5 多租户隔离测试](#75-多租户隔离测试) +- [八、宪章合规检查清单](#八宪章合规检查清单) +- [九、设计评审报告](#九设计评审报告) + - [9.1 发现并已修复的问题](#91-发现并已修复的问题) + - [9.2 未修复的设计选择(需业务澄清)](#92-未修复的设计选择需业务澄清) + - [9.3 修复后宪章合规状态](#93-修复后宪章合规状态) + - [9.4 审批流程合理性专项评审(第二轮)](#94-审批流程合理性专项评审第二轮) + - [9.5 数据库表设计完善性专项评审(第三轮)](#95-数据库表设计完善性专项评审第三轮) + +--- + ## 一、项目总览 ### 1.1 系统定位 @@ -112,10 +162,14 @@ com.label │ └── dto/ # VideoProcessRequest、VideoCallbackRequest ``` +[↑ 返回目录](#目录) + --- ## 二、数据库 DDL +[↑ 返回目录](#目录) + > 执行顺序:sys_company → sys_user → source_data → annotation_task → annotation_result → training_dataset → export_batch → sys_config → sys_operation_log → annotation_task_history → video_process_job ```sql @@ -355,6 +409,8 @@ CREATE INDEX idx_video_process_job_status ON video_process_job(status); ## 三、公共基础设施 +[↑ 返回目录](#目录) + ### 3.1 统一响应封装 ```java @@ -771,6 +827,8 @@ public class AiServiceClient { ## 四、业务模块纵切 +[↑ 返回目录](#目录) + ### 4.1 用户与权限模块 **Entity(SysUser)**:字段同 DDL,`passwordHash` 字段加 `@JsonIgnore` 禁止序列化到响应。 @@ -1244,6 +1302,8 @@ public void handleCallback(Long jobId, boolean success, String outputPath, Strin ## 五、状态机实现规范 +[↑ 返回目录](#目录) + 所有状态变更**必须**经过 `StateValidator.assertTransition()` 校验,禁止绕过直接调用 Mapper 更新状态字段。 ### 5.1 StateValidator @@ -1326,6 +1386,8 @@ public enum VideoJobStatus { ## 六、Docker Compose 配置 +[↑ 返回目录](#目录) + ```yaml # docker-compose.yml version: "3.9" @@ -1445,6 +1507,8 @@ ENTRYPOINT ["java", "-jar", "app.jar"] ## 七、测试策略 +[↑ 返回目录](#目录) + ### 7.1 基本原则 - 集成测试**必须**使用真实的 PostgreSQL 和 Redis 实例(Testcontainers),禁止仅 Mock 数据库 @@ -1535,6 +1599,8 @@ void companyACannotAccessCompanyBData() { ## 八、宪章合规检查清单 +[↑ 返回目录](#目录) + PR 合并前评审人**必须**逐条核对以下清单: | # | 宪章原则 | 实现位置 | 检查要点 | @@ -1555,6 +1621,8 @@ PR 合并前评审人**必须**逐条核对以下清单: ## 九、设计评审报告 +[↑ 返回目录](#目录) + **评审日期**:2026-04-09 | **评审方式**:独立子 Agent 五维评审 + 人工复核 | **初始质量评分**:6.5/10 → 修复后:**8.5/10** ### 9.1 发现并已修复的问题