docs(GOV-010): 完善安全性能与架构规范

This commit is contained in:
2026-08-13 22:54:32 +08:00
parent e12c57222b
commit 3a22fdeef3
12 changed files with 158 additions and 26 deletions
+32 -3
View File
@@ -6,13 +6,13 @@
## 2. 技术基线
- 前端:Vue 3、Vite、TypeScript、Dart Sass、Naive UI。
- 前端:Vue 3、Vite、TypeScript、Dart Sass、Naive UI;浏览器 HTTP 请求统一使用 Axios,接口类型由 OpenAPI 生成。
- 后端:NestJS、TypeScript。
- 数据库:MySQL 5.7.42,字符集 `utf8mb4`,排序规则 `utf8mb4_general_ci`;缓存:Redis;消息队列:RocketMQ 5.x。
- 图表:Lightweight Charts负责K线和分时,ECharts负责热力图、分布和资金趋势。
- AI:由服务端调用兼容 OpenAI 格式的付费 API,密钥不得下发浏览器。
依赖版本必须由锁文件固定。引入新依赖前应说明用途、替代方案、体积或运行成本以及退出方案。
依赖版本必须由锁文件固定。引入新依赖前必须在功能设计中说明用途、现有替代方案、维护状态、许可证、安全风险、前端体积或服务端运行成本以及退出方案,验证通过后才能安装。
## 3. 文件组织与拆分尺度
@@ -32,6 +32,8 @@
- 为尚未出现的复用场景提前抽象。
- 为形式上的“分层”添加不产生业务价值的转发层。
复用代码、工具类、Composable 或组件只有在真实重复已经出现、职责边界稳定且抽取确实能降低维护成本时才建立。名称相似、预计以后会用或单纯减少文件行数不构成抽取依据;Review 必须能说明抽取的现有调用方和所有权。
Vue 页面可以包含与页面强绑定的小型展示逻辑;当子区域拥有独立状态、独立测试价值或被复用时再提取组件。NestJS 模块应让入口、服务和领域计算的调用关系容易跟读。
## 4. 命名与语言
@@ -98,6 +100,12 @@ count += 1;
## 9. 前端规范
- 页面不得直接访问第三方行情源、Redis、RocketMQ 或 AI 服务。
- `web/src/utils/request.ts` 是唯一 Axios 实例、拦截器、超时、取消和通用错误处理入口;其他文件不得创建 Axios 实例。
- 所有业务接口按后端业务域放在 `web/src/api/<业务域>/index.ts`,API 文件统一调用 `@/utils/request`,不得绕过封装。
- 页面、组件、Store 和 Composable 不得直接导入 Axios、调用浏览器 `fetch`、拼接业务 URL 或依赖 `AxiosResponse`。
- 后端 OpenAPI 文档是本项目 HTTP 契约的机器可读描述,与兼容 OpenAI API 的 AI Provider 协议无关。前端保留 `openapi-typescript` 生成类型,实际请求由 Axios 发出。
- API 函数优先使用生成的请求和响应类型,返回 DTO 或明确的业务结果;禁止用 `any` 取代已有契约,也不得把 Axios 类型扩散到功能层。
- DTO 到 ViewModel 的转换放在对应功能的 adapter 中;页面不得直接绑定后端 DTO,以免传输字段变化扩散到展示层。
- 全局服务器状态使用 TanStack Vue Query,本地界面偏好使用 Pinia或轻量组合式函数。
- Sass token集中管理颜色、间距、圆角、字号和断点。
- A 股默认红涨绿跌,但状态必须同时提供文字或形状,不能只依赖颜色。
@@ -106,6 +114,11 @@ count += 1;
## 10. 后端与任务规范
- 后端以业务模块为一级目录,模块内部按实际职责建立 `controllers`、`services`、`dto`、`domain`、`repositories`、`adapters`、`types`、`utils`;小模块不强制凑齐全部目录。
- Controller 只处理协议、边界参数和响应映射;Service 编排用例、事务与降级;Domain 保存纯业务规则和模型;Repository 描述持久化端口;Adapter 实现 MySQL、Redis、RocketMQ、外部数据源和 AI Provider 边界。
- DTO、领域模型与数据库实体必须分离。领域层不得依赖 NestJS、TypeORM、Redis 或 RocketMQ SDK;基础设施实现依赖领域端口。
- 禁止在应用级全局目录堆放所有 Controller 或 Service,禁止为目录外观创建空层或只做无意义转发的包装。跨模块代码只有在真实复用且所有者明确后才上移到 `server/libs`。
- 分层参考 RuoYi 的职责清晰性和成熟 NestJS 模块实践,不照搬 Java 目录,也不以分层数量衡量架构质量。
- API、Scheduler和Worker作为独立进程维护,不在请求期间临时抓取全市场数据。
- Scheduler 只决定何时投递;MessageBusAdapter 负责隔离客户端;RocketMQ 负责任务传输;Worker 负责执行;MySQL 负责事实记录;Redis 负责当前快照和短期状态。
- 消费者必须幂等,消息确认只能发生在持久化或可验证处理完成后。
@@ -152,14 +165,30 @@ count += 1;
- AI 密钥、数据源凭证和支付凭证仅存在服务端密钥管理中。
- SQL必须参数化;外部输入必须在边界处校验。
- 日志和异常报告必须脱敏。
- 每个功能和缺陷修复必须在设计中识别资产、数据、信任边界、攻击面、缓解措施和残余风险,在测试计划和 Review 中保存验证证据。
- 按适用性检查认证与授权、输入校验、SQL/命令/模板注入、XSS、CSRF、CORS、SSRF、限流、凭据、敏感数据、日志、错误、依赖供应链、数据保留和滥用场景。
- 外部数据源和 AI 还必须检查密钥隔离、上游不可信内容、提示词与事实边界、超时重试、成本控制和不可用降级。
- 不适用项必须说明不适用于什么、为什么以及适用边界;空白、`无`、`不适用` 或 `N/A` 不能作为安全评估证据。
## 14. 代码 Review 要求
## 14. 性能要求
- 每个功能必须说明延迟、吞吐、数据新鲜度或资源预算中适用的目标,并按风险选择验证强度。
- 后端评估数据量与算法复杂度、MySQL 查询/索引/N+1、Redis 用途/TTL/一致性/击穿、API 载荷与分页、Scheduler/Worker 并发/幂等/背压,以及外部数据源和 AI 的超时/重试/批处理/成本。
- 前端评估依赖与构建体积、渲染次数、长列表、图表数据量、交互响应和内存占用;不能只以开发环境主观感觉作为证据。
- 高风险路径必须提供 benchmark、profile 或负载测试;低频治理逻辑等不适用场景必须写明无需负载测试的原因和边界。
- 性能优化不得牺牲数据口径、安全、可观察性、异常恢复或 MySQL 5.7 兼容性;禁止无证据的预优化。
## 15. 代码 Review 要求
开发者完成自测不等于 Review 完成。审查者必须从功能 PRD、设计和 Git diff 出发,检查:
- 业务行为是否真正满足验收标准,是否存在遗漏分支。
- 类型、数据口径、缓存、消息、事务和异常恢复是否正确。
- 是否引入安全、性能、并发、幂等或数据一致性风险。
- 安全策略、性能目标和残余风险是否与实际实现一致,是否提供了风险相称的验证证据。
- GitNexus 开发前影响是否覆盖其他功能、模块和同步修改,开发后实际影响是否与计划一致。
- 前端是否遵守 Axios 单一封装和 API 分域,后端是否按业务模块内实际职责分层。
- 复用抽取是否基于已出现的重复,新增依赖是否完成用途、安全、许可证、体积/成本和退出评估。
- 测试是否能捕获真实回归,而非只验证 Mock 或实现细节。
- 中文注释是否解释关键原因、口径和限制,是否存在失真注释。
- 文件拆分是否便于常规阅读,是否出现过度抽象或巨型多职责文件。