docs: 批量更新历史文档中的 backend-single 引用为 server

This commit is contained in:
2026-06-27 17:27:27 +08:00
parent 5586dc5eac
commit 591f70a2f6
39 changed files with 1209 additions and 673 deletions
@@ -42,7 +42,7 @@ purpose: 设计并优化情绪博物馆跨平台服务管理脚本,修复硬
services:
backend:
name: "后端服务"
dir: "backend-single"
dir: "server"
type: "java"
port: 19089
health_check_path: "/actuator/health"
@@ -33,10 +33,10 @@ The current mini program already has the core functional modules:
The backend already has script generation support under:
- `backend-single/src/main/java/com/emotion/controller/EpicScriptController.java`
- `backend-single/src/main/java/com/emotion/service/EpicScriptService.java`
- `backend-single/src/main/java/com/emotion/service/impl/EpicScriptServiceImpl.java`
- `backend-single/src/main/java/com/emotion/dto/request/EpicScriptCreateRequest.java`
- `server/src/main/java/com/emotion/controller/EpicScriptController.java`
- `server/src/main/java/com/emotion/service/EpicScriptService.java`
- `server/src/main/java/com/emotion/service/impl/EpicScriptServiceImpl.java`
- `server/src/main/java/com/emotion/dto/request/EpicScriptCreateRequest.java`
The missing product capability is a complete inspiration-mode flow. The backend currently exposes generic script creation, but it does not expose dedicated endpoints for inspiration recommendations, random inspiration, or one-sentence inspiration generation.
@@ -45,7 +45,7 @@ The missing product capability is a complete inspiration-mode flow. The backend
1. Redesign the mini-program pages to match the new prototype visual direction: dark cosmic background, purple glass panels, glowing primary actions, rounded bottom navigation, and stronger card hierarchy.
2. Keep the existing product functions largely unchanged.
3. Complete the functional flow from life events to script generation to script detail to path realization.
4. Add backend inspiration-mode APIs in `backend-single`.
4. Add backend inspiration-mode APIs in `server`.
5. Make the implementation modular enough to land in batches without leaving broken flows.
## Non-Goals
@@ -11,7 +11,7 @@ Add two complete but independently shippable capabilities:
The implementation should fit the current project shape:
- `backend-single`: Spring Boot 2.7, MyBatis Plus, MySQL, Redis.
- `server`: Spring Boot 2.7, MyBatis Plus, MySQL, Redis.
- `mini-program`: uni-app/Vue.
- `web-admin`: Vue, Element Plus, ECharts.
- Deployment target: `101.200.208.45` with passwordless SSH.
@@ -13,7 +13,7 @@
现有实现包含:
- `web-admin/src/views/aiconfig/AiConfigList.vue`:AI 配置列表、编辑、测试、测试后保存。
- `backend-single/src/main/java/com/emotion/entity/AiConfig.java`:对应 `t_ai_config`
- `server/src/main/java/com/emotion/entity/AiConfig.java`:对应 `t_ai_config`
- `AiConfigController``AiConfigService``AiConfigServiceImpl`:配置 CRUD、启用禁用、默认配置、测试后更新。
- `AiChatServiceImpl`:包含大量 Coze 专用调用、请求组装、SSE 解析、工作流调用和日志记录逻辑。
- `docs/dify平台接口.md`:Dify 平台接口文档,当前重点使用 `/chat-messages`
@@ -382,10 +382,10 @@ async function submitEndpointStreamTest() {
| 操作 | 文件 |
|------|------|
| 修改 | `backend-single/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` |
| 修改 | `backend-single/src/main/java/com/emotion/service/AiRuntimeService.java` |
| 修改 | `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` |
| 修改 | `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` |
| 修改 | `server/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` |
| 修改 | `server/src/main/java/com/emotion/service/AiRuntimeService.java` |
| 修改 | `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` |
| 修改 | `server/src/main/java/com/emotion/controller/AiRoutingController.java` |
| 修改 | `web-admin/src/types/aiconfig.ts` |
| 修改 | `web-admin/src/api/aiconfig.ts` |
| 修改 | `web-admin/src/views/aiconfig/AiRoutingList.vue` |
@@ -121,7 +121,7 @@ if (value instanceof JSONObject && ((JSONObject) value).containsKey("_meta")) {
|------|------|
| 修改 | `web-admin/src/views/aiconfig/AiRoutingList.vue` |
| 修改 | `web-admin/src/types/aiconfig.ts` |
| 修改 | `backend-single/src/main/java/com/emotion/service/ai/AiTemplateRenderer.java` |
| 修改 | `server/src/main/java/com/emotion/service/ai/AiTemplateRenderer.java` |
## 4. 风险
@@ -8,7 +8,7 @@ purpose: 为所有 Controller 及关联 DTO 补全 OpenAPI 中文注解
## 1. 目标
`backend-single/src/main/java/com/emotion/controller/` 下所有 39 个 Controller 及其关联的 Request/Response DTO 补全 OpenAPI 注解,使接口文档页面可通过清晰的中文描述理解每个接口的作用和参数含义。
`server/src/main/java/com/emotion/controller/` 下所有 39 个 Controller 及其关联的 Request/Response DTO 补全 OpenAPI 注解,使接口文档页面可通过清晰的中文描述理解每个接口的作用和参数含义。
## 2. 注解规范
@@ -31,7 +31,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
**保持不变的项**
- URL 路径(如 `/emotion-museum-admin/`)— 保持兼容
- 目录名(`web/``web-admin/``backend-single/`)— 避免构建断裂
- 目录名(`web/``web-admin/``server/`)— 避免构建断裂
- 数据库表名前缀(如 `emotion_record` → 保持)— 避免 Entity/Table 映射断裂
## 第 1 步:文档层(无风险)
@@ -43,7 +43,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
- `README.md`
- `docs/superpowers/` 下所有 .md
- 各模块下的 `部署说明.md``技术方案.md``后端代码规范.md`
- `backend-single/部署说明.md``backend-single/后端项目结构.md`
- `server/部署说明.md``server/后端项目结构.md`
**操作**:批量 sed 替换中文 `情绪博物馆``开心星球`,英文 `Emotion Museum``Happy Planet``emotion-museum``happy-planet`
@@ -73,13 +73,13 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
**影响范围**:配置文件、部署脚本、nginx、systemd service
### 3.1 应用配置
- `backend-single/src/main/resources/application.yml``spring.application.name`
- `backend-single/src/main/resources/application-*.yml` — 同上
- `server/src/main/resources/application.yml``spring.application.name`
- `server/src/main/resources/application-*.yml` — 同上
- 日志路径、应用描述等配置中的 `emotion-museum`
### 3.2 部署脚本
- `deploy.sh``deploy.py`
- `backend-single/deploy.py``backend-single/deploy.sh`
- `server/deploy.py``server/deploy.sh`
- `web/deploy.sh``web/deploy.py`
- `web-admin/deploy.sh``web-admin/deploy.py`
- 各脚本中的路径引用、日志路径、提示文案
@@ -91,8 +91,8 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
- jar 文件名、日志路径引用中的 `emotion-museum`
### 3.4 systemd Service
- `backend-single/asr-service/emotion-museum-asr.service``happy-planet-asr.service`
- `backend-single/tts-service/emotion-museum-tts.service``happy-planet-tts.service`
- `server/asr-service/emotion-museum-asr.service``happy-planet-asr.service`
- `server/tts-service/emotion-museum-tts.service``happy-planet-tts.service`
- 内部路径和描述中的 `emotion-museum`
### 3.5 工具脚本
@@ -118,7 +118,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
### 4.1 Java 包名重命名
**操作**
1. 移动目录:`backend-single/src/main/java/com/emotion/``backend-single/src/main/java/com/happyplanet/`
1. 移动目录:`server/src/main/java/com/emotion/``server/src/main/java/com/happyplanet/`
2. 更新 `pom.xml` 中的包名引用
3. 用 sed 批量替换所有 `.java` 文件中 `package com.emotion``package com.happyplanet`
4. 用 sed 批量替换所有 `.java` 文件中 `import com.emotion``import com.happyplanet`
@@ -126,7 +126,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
6. 处理编译错误(可能有遗漏的引用)
**测试目录**
- `backend-single/src/test/java/com/emotion/` 同样需要迁移
- `server/src/test/java/com/emotion/` 同样需要迁移
- `.java` 文件中的 `package``import` 语句
### 4.2 SQL 文件
@@ -139,7 +139,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
- `USE emotion_museum``USE happy_planet`
### 4.3 其他底层引用
- `backend-single/create_api_tables.sql` 中的数据库名
- `server/create_api_tables.sql` 中的数据库名
- `.gitignore` 中的路径引用(如有)
**验证**
@@ -27,7 +27,7 @@ purpose: 设计接口管理页面的中文描述补全和测试面板表单化
### 3.1 Controller 注解补全
`backend-single/src/main/java/com/emotion/controller/` 下所有 Controller 补全注解:
`server/src/main/java/com/emotion/controller/` 下所有 Controller 补全注解:
**类级别注解:**
```java
@@ -247,9 +247,9 @@ path: '/api' + testForm.value.path // 例如 /api + /auth/login = /api/auth/log
| `web-admin/src/views/endpoint/EndpointList.vue` | 操作列加"测试"按钮,新增 `showTest` 方法 |
| `web-admin/src/views/endpoint/EndpointDetailDialog.vue` | 新增 `defaultTab` prop,测试面板改造:参数表单 + JSON 预填充 + 请求头展示 |
| `web-admin/src/api/endpoint.ts` | 类型定义无需修改(`operationId` 已存在) |
| `backend-single/src/main/java/com/emotion/controller/*.java` | 补全 @Tag/@Operation/@Parameter/@Schema 注解(按 4 个批次) |
| `backend-single/src/main/java/com/emotion/dto/request/**/*.java` | 补全 @Schema 注解(请求体参数描述来源) |
| `backend-single/src/main/java/com/emotion/dto/response/**/*.java` | 补全 @Schema 注解(响应体参数描述来源,可选) |
| `server/src/main/java/com/emotion/controller/*.java` | 补全 @Tag/@Operation/@Parameter/@Schema 注解(按 4 个批次) |
| `server/src/main/java/com/emotion/dto/request/**/*.java` | 补全 @Schema 注解(请求体参数描述来源) |
| `server/src/main/java/com/emotion/dto/response/**/*.java` | 补全 @Schema 注解(响应体参数描述来源,可选) |
## 5. 实施顺序
@@ -202,7 +202,7 @@ public Result<PageResult<AiCallLog>> queryCallLogs(@RequestBody @Valid AiCallLog
### Request 对象
存放路径:`backend-single/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java`
存放路径:`server/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java`
```java
@Schema(description = "AI 调用日志查询请求")
@@ -14,7 +14,7 @@ purpose: 在管理后台调用日志列表中增加"调用用户"列,显示用
### 1. 后端 — 实体新增字段
**文件**: `backend-single/src/main/java/com/emotion/entity/AiCallLog.java`
**文件**: `server/src/main/java/com/emotion/entity/AiCallLog.java`
`userId` 字段下方新增:
@@ -31,7 +31,7 @@ ALTER TABLE t_ai_call_log ADD COLUMN user_name VARCHAR(100) COMMENT '用户昵
### 3. 后端 — 日志保存时写入 userName
**文件**: `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java`
**文件**: `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java`
两处日志创建位置(第 68-73 行 `invokeStream` 方法、第 219-225 行 `invokeEndpointStream` 方法),在 `callLog.setUserId(...)` 之后补充:
@@ -27,7 +27,7 @@ The mini program currently supports phone number plus SMS code login only. The n
- `mini-program/src/pages/login/index.vue` contains the existing phone/SMS login UI and routes to main or onboarding based on profile presence.
- `mini-program/src/stores/app.js` already centralizes login, logout, token restore, and profile fetch behavior.
- `mini-program/src/services/auth.js` stores `access_token` and `refresh_token` from `AuthResponse`.
- `backend-single/src/main/java/com/emotion/controller/AuthController.java` exposes `/auth/login`, `/auth/refreshToken`, and token validation endpoints.
- `server/src/main/java/com/emotion/controller/AuthController.java` exposes `/auth/login`, `/auth/refreshToken`, and token validation endpoints.
- `t_user` already has `phone`, `avatar`, `nickname`, `third_party_id`, and `third_party_type`, which can support WeChat binding without a required schema change.
- The current backend issues JWT plus Redis-backed access/refresh tokens through `AuthServiceImpl`.
- The mini program manifest already has a WeChat appid: `wxaf2eaba72d28f0e4`.
@@ -167,7 +167,7 @@ if '//' in remote_conf or '..' in remote_conf:
### 不包含(明确排除)
- 不修改其他 deploy.py 子脚本(backend-single/web/web-admin/life-script
- 不修改其他 deploy.py 子脚本(server/web/web-admin/life-script
- 不改 `ssh_command()` / `run_ssh_args()` 底层
- 不增加 `--dry-run` 模式
- 不改 nginx 配置文件本身
@@ -51,7 +51,7 @@ alter table emotion_museum.t_user_profile
### 2. 实体类扩展
文件:`backend-single/src/main/java/com/emotion/entity/UserProfile.java`
文件:`server/src/main/java/com/emotion/entity/UserProfile.java`
新增字段(与数据库列名通过 `@TableField` 映射):
@@ -67,15 +67,15 @@ alter table emotion_museum.t_user_profile
以下三个文件新增相同 5 个字段:
- `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java`
- `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java`
- `backend-single/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java`
- `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java`
- `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java`
- `server/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java`
`UserProfileResponse` 中的 `birthday` 使用 `@JsonFormat(pattern = "yyyy-MM-dd")` 注解,与现有日期字段保持一致。
### 4. Service 层
文件:`backend-single/src/main/java/com/emotion/service/impl/UserProfileServiceImpl.java`
文件:`server/src/main/java/com/emotion/service/impl/UserProfileServiceImpl.java`
无需改动。`BeanUtils.copyProperties``BeanUtil.copyProperties(..., CopyOptions.create().setIgnoreNullValue(true))` 会自动映射同名字段。
@@ -186,10 +186,10 @@ registrationData: {
| 文件 | 改动类型 | 说明 |
|------|----------|------|
| `sql/emotion_museum_ddl.sql` | 追加 | 5 个 ALTER TABLE 语句 |
| `backend-single/.../entity/UserProfile.java` | 修改 | 新增 5 个字段 |
| `backend-single/.../request/.../UserProfileCreateRequest.java` | 修改 | 新增 5 个字段 |
| `backend-single/.../request/.../UserProfileUpdateRequest.java` | 修改 | 新增 5 个字段 |
| `backend-single/.../response/.../UserProfileResponse.java` | 修改 | 新增 5 个字段 |
| `server/.../entity/UserProfile.java` | 修改 | 新增 5 个字段 |
| `server/.../request/.../UserProfileCreateRequest.java` | 修改 | 新增 5 个字段 |
| `server/.../request/.../UserProfileUpdateRequest.java` | 修改 | 新增 5 个字段 |
| `server/.../response/.../UserProfileResponse.java` | 修改 | 新增 5 个字段 |
| `mini-program/src/services/userProfile.js` | 修改 | 双向转换增加 5 个字段 |
| `mini-program/src/stores/app.js` | 修改 | `registrationData` 扩展 |
| `mini-program/src/pages/main/RecordView.vue` | 修改 | 去除写死默认值和 sampleEvents |
@@ -90,14 +90,14 @@ purpose: 修复微信小程序登录 text/plain 错误(Spring RestTemplate 默
| # | 文件 | 操作 | 行数估算 | 目的 |
|---|---|---|---|---|
| 1 | `backend-single/src/main/java/com/emotion/config/RestTemplateConfig.java` | **重写** | 40 行 | 改用 `RestTemplateBuilder` + `BufferingClientHttpRequestFactory`:设置 User-Agent、超时、加 StringHttpMessageConverter、加 LoggingInterceptor、加 ErrorHandler |
| 2 | `backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` | **重写** | 90 行 | `code2Session` 改用 `ResponseEntity<String>` + Jackson 二次解析;捕获所有失败场景的 raw body |
| 3 | `backend-single/src/main/resources/application.yml` | **修改** | 2 行 | 删除 `app-id``app-secret` 硬编码默认值(`${ENV_VAR:}` 空兜底) |
| 4 | `backend-single/src/main/java/com/emotion/exception/WechatApiException.java` | **新增** | 30 行 | 业务异常类(code 用 HTTP 风格状态码 + rawBody |
| 5 | `backend-single/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java` | **新增** | 60 行 | ClientHttpRequestInterceptor:记录 method/URL/statusINFO+ 脱敏 bodyDEBUG |
| 6 | `backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java` | **新增** | 30 行 | 4xx/5xx 不抛 RestClientException,重写 `hasError()` 显式声明 |
| 7 | `backend-single/src/main/java/com/emotion/exception/GlobalExceptionHandler.java` | **修改** | 25 行 | 新增 `@ExceptionHandler(WechatApiException.class)` 返回脱敏的友好提示 |
| 8 | `backend-single/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java` | **不动** | 0 行 | **保持纯 DTO**rawBody 不放在 DTO,只在异常对象和日志中) |
| 1 | `server/src/main/java/com/emotion/config/RestTemplateConfig.java` | **重写** | 40 行 | 改用 `RestTemplateBuilder` + `BufferingClientHttpRequestFactory`:设置 User-Agent、超时、加 StringHttpMessageConverter、加 LoggingInterceptor、加 ErrorHandler |
| 2 | `server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` | **重写** | 90 行 | `code2Session` 改用 `ResponseEntity<String>` + Jackson 二次解析;捕获所有失败场景的 raw body |
| 3 | `server/src/main/resources/application.yml` | **修改** | 2 行 | 删除 `app-id``app-secret` 硬编码默认值(`${ENV_VAR:}` 空兜底) |
| 4 | `server/src/main/java/com/emotion/exception/WechatApiException.java` | **新增** | 30 行 | 业务异常类(code 用 HTTP 风格状态码 + rawBody |
| 5 | `server/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java` | **新增** | 60 行 | ClientHttpRequestInterceptor:记录 method/URL/statusINFO+ 脱敏 bodyDEBUG |
| 6 | `server/src/main/java/com/emotion/config/WechatResponseErrorHandler.java` | **新增** | 30 行 | 4xx/5xx 不抛 RestClientException,重写 `hasError()` 显式声明 |
| 7 | `server/src/main/java/com/emotion/exception/GlobalExceptionHandler.java` | **修改** | 25 行 | 新增 `@ExceptionHandler(WechatApiException.class)` 返回脱敏的友好提示 |
| 8 | `server/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java` | **不动** | 0 行 | **保持纯 DTO**rawBody 不放在 DTO,只在异常对象和日志中) |
**总计**:2 重写 + 3 新增 + 3 修改,约 280 行 Java + 2 行 YAML。
@@ -472,7 +472,7 @@ GlobalExceptionHandler.handleWechatApiException
| 步骤 | 命令 / 操作 | 期望 |
|---|---|---|
| 1. mvn 编译 | `mvn clean install -pl :backend-single -am -DskipTests` | 退出码 0 |
| 1. mvn 编译 | `mvn clean install -pl :server -am -DskipTests` | 退出码 0 |
| 2. 部署 | `python deploy.py backend` | 部署成功,重启 backend |
| 3. **WAF 验证**(修后 P1-7 | `tail -f /data/logs/emotion-museum/emotion-single.log \| grep "WeChatAPI"` | 看到 `[WeChatAPI] ---> GET https://api.weixin.qq.com/sns/jscode2session ...` 请求日志;`<--- 200` 响应日志 |
| 4. **UA 验证** | `grep "User-Agent" /data/logs/emotion-museum/emotion-single.log` | 看到 `Mozilla/5.0`(不再是 `Java/17.0.x` |
@@ -50,7 +50,7 @@ purpose: 明确小程序编辑资料页"性格标签"与"兴趣爱好"两个模
### 实体与数据库
`backend-single` 模块:
`server` 模块:
- `UserProfile` 实体新增两个字段:
@@ -205,7 +205,7 @@ if (后端返回的 personalityTagLibrary 为空) {
### 修改文件
**后端(`backend-single/src/main/java/com/emotion/`):**
**后端(`server/src/main/java/com/emotion/`):**
- `entity/UserProfile.java`:新增 `personalityTagLibrary``hobbyLibrary` 两个 `String` 字段。
- `controller/UserProfileController.java`:无需新增接口,入参 DTO 通过 `UserProfileUpdateRequest` / `UserProfileCreateRequest` 已支持新字段透传。
@@ -213,7 +213,7 @@ if (后端返回的 personalityTagLibrary 为空) {
- `dto/request/userprofile/UserProfileCreateRequest.java`:同上。
- `dto/response/userprofile/UserProfileResponse.java`:新增 `personalityTagLibrary``hobbyLibrary` 两个 `String` 字段。
- `service/UserProfileService.java``service/impl/UserProfileServiceImpl.java`:无业务逻辑改动,字段通过 MyBatis-Plus 自动映射持久化。
- 数据库迁移脚本:`backend-single/src/main/resources/db/migration/2026-06-24-user-profile-tag-library.sql`,遵循现有 `YYYY-MM-DD-描述.sql` 命名约定。
- 数据库迁移脚本:`server/src/main/resources/db/migration/2026-06-24-user-profile-tag-library.sql`,遵循现有 `YYYY-MM-DD-描述.sql` 命名约定。
**前端(`mini-program/`):**
@@ -0,0 +1,74 @@
---
author: peanu
created_at: 2026-06-27
purpose: 将 backend-single 目录重命名为 server 的设计方案
---
# 设计:backend-single 重命名为 server
## 背景
项目中的后端服务目录当前名为 `backend-single`,该名称是早期"单体服务"阶段的遗留命名。随着项目演进,这个名称已不再准确反映实际情况,且在日常开发中较长不便。将其重命名为更简洁的 `server` 可提升可读性和一致性。
## 决策
- **目录重命名**`backend-single/``server/`,使用 `git mv` 保留 Git 历史
- **Maven artifactId**`backend-single``server`JAR 文件随之变为 `server-1.0.0.jar`
- **历史文档**`docs/superpowers/` 下的历史设计和计划文档也全部更新,保持一致性
## 变更范围
### 第一层:目录和构建
| 操作 | 目标 |
|------|------|
| `git mv backend-single server` | 目录重命名 |
| `server/pom.xml` artifactId | `backend-single``server` |
| `server/pom.xml` name | `backend-single``server` |
| `server/deploy.py` JAR_NAME | `backend-single-1.0.0.jar``server-1.0.0.jar` |
| `server/deploy.sh` JAR_NAME | 同上 |
### 第二层:部署脚本
| 文件 | 变更内容 |
|------|---------|
| 根目录 `deploy.py` | 3 处 `backend-single``server`(注释、路径拼接、cwd |
| 根目录 `deploy.sh` | 4 处 `backend-single``server`(注释、存在性检查、cd |
| `.gitignore` | `backend-single/backend.err``server/backend.err` |
### 第三层:项目文档
| 文件 | 说明 |
|------|------|
| `CLAUDE.md` | 项目结构树(1 处)+ 后端命令段落(3 处) |
| `AGENTS.md` | 同 CLAUDE.md 的结构和命令段落 |
| `README.md` | 项目结构树(1 处) |
| `server/部署说明.md` | 自引用路径 |
| `快速部署参考.md` | 4 处部署路径引用 |
| `一键部署说明.md` | 5 处部署路径引用 |
### 第四层:前端和其他代码
| 文件 | 说明 |
|------|------|
| `web/src/types/auth.ts` | 第 5 行注释引用 |
| `web-admin/AI_CONFIG_TEST_SAVE_FEATURE.md` | 4 处后端文件路径引用 |
### 第五层:历史文档批量替换
约 20 个 `docs/superpowers/specs/``docs/superpowers/plans/` 下的 `.md` 文件,将其中所有 `backend-single` 替换为 `server`
## 不在范围内
- **Java 包名**`com.emotion` 保持不变,不在本次重命名范围内
- **数据库名/表名**:不涉及数据库变更
- **`dev-services.py`**:该脚本自动发现 Spring Boot 服务,不直接引用 `backend-single` 字符串,无需修改
- **`deploy-server.sh`**:已存在的文件,不包含 `backend-single` 引用
## 验证标准
1. `mvn clean install -DskipTests``server/` 目录下编译成功
2. `server/deploy.py backend` 能正确找到 JAR 并部署
3. 根目录 `deploy.py` 能正确调用 `server/deploy.py`
4. 项目中不再有任何 `backend-single` 字符串残留(grep 验证)
5. Git 历史完整保留(`git log --follow server/pom.xml` 能看到旧历史)