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
@@ -570,13 +570,13 @@ deploy_ssl() {
deploy_backend() { deploy_backend() {
log_section "部署后端服务" log_section "部署后端服务"
if [ ! -f "backend-single/deploy.sh" ]; then if [ ! -f "server/deploy.sh" ]; then
log_error "后端部署脚本不存在" log_error "后端部署脚本不存在"
return 1 return 1
fi fi
log_info "执行后端部署..." log_info "执行后端部署..."
cd backend-single cd server
bash deploy.sh remote bash deploy.sh remote
local result=$? local result=$?
cd .. cd ..
@@ -828,7 +828,7 @@ git commit -m "config: 更新管理后台部署脚本访问地址提示"
### Task 9: 检查并修改后端 CORS 配置 ### Task 9: 检查并修改后端 CORS 配置
**Files:** **Files:**
- Modify: `backend-single/src/main/resources/application.yml` (或相应配置文件) - Modify: `server/src/main/resources/application.yml` (或相应配置文件)
- [ ] **Step 1: 读取当前后端配置文件** - [ ] **Step 1: 读取当前后端配置文件**
@@ -841,7 +841,7 @@ git commit -m "config: 更新管理后台部署脚本访问地址提示"
- [ ] **Step 3: 提交** - [ ] **Step 3: 提交**
```bash ```bash
git add backend-single/src/main/resources/application.yml git add server/src/main/resources/application.yml
git commit -m "config: 更新 CORS 配置允许新域名访问" git commit -m "config: 更新 CORS 配置允许新域名访问"
``` ```
@@ -4,7 +4,7 @@
**Goal:** Add mini program behavior analytics collection, backend event storage and aggregation, and a web-admin behavior analytics dashboard. **Goal:** Add mini program behavior analytics collection, backend event storage and aggregation, and a web-admin behavior analytics dashboard.
**Architecture:** The mini program queues analytics events locally and flushes them to `POST /analytics/events/batch`. `backend-single` stores raw events in `t_analytics_event` and exposes admin-only aggregation endpoints under `/admin/analytics`. `web-admin` renders overview, trend, funnel, preference, and top-event stats using Element Plus and ECharts. **Architecture:** The mini program queues analytics events locally and flushes them to `POST /analytics/events/batch`. `server` stores raw events in `t_analytics_event` and exposes admin-only aggregation endpoints under `/admin/analytics`. `web-admin` renders overview, trend, funnel, preference, and top-event stats using Element Plus and ECharts.
**Tech Stack:** Spring Boot 2.7, MyBatis Plus, MySQL JSON, Java 17, uni-app/Vue, Vue 3, Element Plus, ECharts. **Tech Stack:** Spring Boot 2.7, MyBatis Plus, MySQL JSON, Java 17, uni-app/Vue, Vue 3, Element Plus, ECharts.
@@ -13,25 +13,25 @@
## File Structure ## File Structure
- Create `sql/2026-05-17-analytics-event.sql`: migration for `t_analytics_event`. - Create `sql/2026-05-17-analytics-event.sql`: migration for `t_analytics_event`.
- Create `backend-single/src/main/java/com/emotion/entity/AnalyticsEvent.java`: MyBatis Plus entity. - Create `server/src/main/java/com/emotion/entity/AnalyticsEvent.java`: MyBatis Plus entity.
- Create `backend-single/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java`: mapper plus aggregation SQL. - Create `server/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java`: mapper plus aggregation SQL.
- Create `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventBatchRequest.java`: mini program batch request. - Create `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventBatchRequest.java`: mini program batch request.
- Create `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventRequest.java`: one event payload. - Create `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventRequest.java`: one event payload.
- Create `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java`: admin query filters. - Create `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java`: admin query filters.
- Create `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsBatchResponse.java`: accepted/rejected counts. - Create `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsBatchResponse.java`: accepted/rejected counts.
- Create `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsOverviewResponse.java`: overview cards. - Create `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsOverviewResponse.java`: overview cards.
- Create `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsTrendItem.java`: trend item. - Create `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsTrendItem.java`: trend item.
- Create `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsFunnelItem.java`: funnel item. - Create `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsFunnelItem.java`: funnel item.
- Create `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsPreferenceItem.java`: preference item. - Create `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsPreferenceItem.java`: preference item.
- Create `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsTopEventItem.java`: top event item. - Create `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsTopEventItem.java`: top event item.
- Create `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsUserItem.java`: user ranking item. - Create `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsUserItem.java`: user ranking item.
- Create `backend-single/src/main/java/com/emotion/service/AnalyticsService.java`: write and aggregate contract. - Create `server/src/main/java/com/emotion/service/AnalyticsService.java`: write and aggregate contract.
- Create `backend-single/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java`: validation, persistence, aggregation. - Create `server/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java`: validation, persistence, aggregation.
- Create `backend-single/src/main/java/com/emotion/controller/AnalyticsController.java`: mini program write endpoint. - Create `server/src/main/java/com/emotion/controller/AnalyticsController.java`: mini program write endpoint.
- Create `backend-single/src/main/java/com/emotion/controller/AdminAnalyticsController.java`: admin read endpoints. - Create `server/src/main/java/com/emotion/controller/AdminAnalyticsController.java`: admin read endpoints.
- Modify `backend-single/src/main/java/com/emotion/config/WebMvcConfig.java`: allow anonymous analytics batch endpoint while keeping admin analytics protected. - Modify `server/src/main/java/com/emotion/config/WebMvcConfig.java`: allow anonymous analytics batch endpoint while keeping admin analytics protected.
- Create `backend-single/src/test/java/com/emotion/service/AnalyticsServiceTest.java`: service validation and aggregation tests. - Create `server/src/test/java/com/emotion/service/AnalyticsServiceTest.java`: service validation and aggregation tests.
- Create `backend-single/src/test/java/com/emotion/controller/AnalyticsControllerTest.java`: endpoint tests. - Create `server/src/test/java/com/emotion/controller/AnalyticsControllerTest.java`: endpoint tests.
- Create `mini-program/src/services/analytics.js`: client SDK. - Create `mini-program/src/services/analytics.js`: client SDK.
- Modify `mini-program/src/App.vue`: initialize and flush analytics. - Modify `mini-program/src/App.vue`: initialize and flush analytics.
- Modify `mini-program/src/pages/main/index.vue`: track main tab/page activity if this page owns tab switching. - Modify `mini-program/src/pages/main/index.vue`: track main tab/page activity if this page owns tab switching.
@@ -121,11 +121,11 @@ git commit -m "feat: add analytics event table"
### Task 2: Add Backend DTOs and Entity ### Task 2: Add Backend DTOs and Entity
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/entity/AnalyticsEvent.java` - Create: `server/src/main/java/com/emotion/entity/AnalyticsEvent.java`
- Create: `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventBatchRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventBatchRequest.java`
- Create: `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventRequest.java`
- Create: `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java`
- Create: response DTO files under `backend-single/src/main/java/com/emotion/dto/response/analytics/` - Create: response DTO files under `server/src/main/java/com/emotion/dto/response/analytics/`
- [ ] **Step 1: Add the entity** - [ ] **Step 1: Add the entity**
@@ -387,7 +387,7 @@ public class AnalyticsUserItem {
Run: Run:
```bash ```bash
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -396,7 +396,7 @@ Expected: `BUILD SUCCESS`.
- [ ] **Step 5: Commit** - [ ] **Step 5: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/entity/AnalyticsEvent.java backend-single/src/main/java/com/emotion/dto/request/analytics backend-single/src/main/java/com/emotion/dto/response/analytics git add server/src/main/java/com/emotion/entity/AnalyticsEvent.java server/src/main/java/com/emotion/dto/request/analytics server/src/main/java/com/emotion/dto/response/analytics
git commit -m "feat: add analytics DTOs and entity" git commit -m "feat: add analytics DTOs and entity"
``` ```
@@ -405,10 +405,10 @@ git commit -m "feat: add analytics DTOs and entity"
### Task 3: Add Analytics Mapper and Service ### Task 3: Add Analytics Mapper and Service
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java` - Create: `server/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java`
- Create: `backend-single/src/main/java/com/emotion/service/AnalyticsService.java` - Create: `server/src/main/java/com/emotion/service/AnalyticsService.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java`
- Test: `backend-single/src/test/java/com/emotion/service/AnalyticsServiceTest.java` - Test: `server/src/test/java/com/emotion/service/AnalyticsServiceTest.java`
- [ ] **Step 1: Write service tests** - [ ] **Step 1: Write service tests**
@@ -462,7 +462,7 @@ public class AnalyticsServiceTest {
Run: Run:
```bash ```bash
cd backend-single cd server
mvn -Dtest=AnalyticsServiceTest test mvn -Dtest=AnalyticsServiceTest test
``` ```
@@ -676,7 +676,7 @@ public class AnalyticsServiceImpl extends ServiceImpl<AnalyticsEventMapper, Anal
Run: Run:
```bash ```bash
cd backend-single cd server
mvn -Dtest=AnalyticsServiceTest test mvn -Dtest=AnalyticsServiceTest test
``` ```
@@ -685,7 +685,7 @@ Expected: `BUILD SUCCESS`.
- [ ] **Step 7: Commit** - [ ] **Step 7: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java backend-single/src/main/java/com/emotion/service/AnalyticsService.java backend-single/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java backend-single/src/test/java/com/emotion/service/AnalyticsServiceTest.java git add server/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java server/src/main/java/com/emotion/service/AnalyticsService.java server/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java server/src/test/java/com/emotion/service/AnalyticsServiceTest.java
git commit -m "feat: add analytics service" git commit -m "feat: add analytics service"
``` ```
@@ -694,10 +694,10 @@ git commit -m "feat: add analytics service"
### Task 4: Add Analytics Controllers and Auth Exclusion ### Task 4: Add Analytics Controllers and Auth Exclusion
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/controller/AnalyticsController.java` - Create: `server/src/main/java/com/emotion/controller/AnalyticsController.java`
- Create: `backend-single/src/main/java/com/emotion/controller/AdminAnalyticsController.java` - Create: `server/src/main/java/com/emotion/controller/AdminAnalyticsController.java`
- Modify: `backend-single/src/main/java/com/emotion/config/WebMvcConfig.java` - Modify: `server/src/main/java/com/emotion/config/WebMvcConfig.java`
- Test: `backend-single/src/test/java/com/emotion/controller/AnalyticsControllerTest.java` - Test: `server/src/test/java/com/emotion/controller/AnalyticsControllerTest.java`
- [ ] **Step 1: Add write controller** - [ ] **Step 1: Add write controller**
@@ -794,7 +794,7 @@ Do not exclude `/admin/analytics/**`.
Run: Run:
```bash ```bash
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -803,7 +803,7 @@ Expected: `BUILD SUCCESS`.
- [ ] **Step 5: Commit** - [ ] **Step 5: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AnalyticsController.java backend-single/src/main/java/com/emotion/controller/AdminAnalyticsController.java backend-single/src/main/java/com/emotion/config/WebMvcConfig.java git add server/src/main/java/com/emotion/controller/AnalyticsController.java server/src/main/java/com/emotion/controller/AdminAnalyticsController.java server/src/main/java/com/emotion/config/WebMvcConfig.java
git commit -m "feat: expose analytics APIs" git commit -m "feat: expose analytics APIs"
``` ```
@@ -1323,7 +1323,7 @@ git commit -m "feat: add analytics admin dashboard"
- [ ] **Step 1: Run backend tests** - [ ] **Step 1: Run backend tests**
```bash ```bash
cd backend-single cd server
mvn test mvn test
``` ```
@@ -4,7 +4,7 @@
**Goal:** Add CPU-friendly open-source text-to-speech generation for user scripts, with cached backend tasks and mini program playback. **Goal:** Add CPU-friendly open-source text-to-speech generation for user scripts, with cached backend tasks and mini program playback.
**Architecture:** `backend-single` creates TTS tasks, validates source ownership, cleans script text, checks audio cache, and calls a private Python FastAPI TTS service. The Python service runs on `101.200.208.45` and writes audio files under `/data/uploads/emotion-museum/tts`. The mini program requests generation from `ScriptDetailView.vue`, polls status, and plays the returned audio URL with `uni.createInnerAudioContext()`. **Architecture:** `server` creates TTS tasks, validates source ownership, cleans script text, checks audio cache, and calls a private Python FastAPI TTS service. The Python service runs on `101.200.208.45` and writes audio files under `/data/uploads/emotion-museum/tts`. The mini program requests generation from `ScriptDetailView.vue`, polls status, and plays the returned audio URL with `uni.createInnerAudioContext()`.
**Tech Stack:** Spring Boot 2.7, MyBatis Plus, Java 17, MySQL, Python FastAPI, MeloTTS or equivalent CPU-friendly Chinese TTS engine, systemd, uni-app/Vue. **Tech Stack:** Spring Boot 2.7, MyBatis Plus, Java 17, MySQL, Python FastAPI, MeloTTS or equivalent CPU-friendly Chinese TTS engine, systemd, uni-app/Vue.
@@ -13,22 +13,22 @@
## File Structure ## File Structure
- Create `sql/2026-05-17-tts-task.sql`: `t_tts_task` migration. - Create `sql/2026-05-17-tts-task.sql`: `t_tts_task` migration.
- Create `backend-single/src/main/java/com/emotion/entity/TtsTask.java`: task entity. - Create `server/src/main/java/com/emotion/entity/TtsTask.java`: task entity.
- Create `backend-single/src/main/java/com/emotion/mapper/TtsTaskMapper.java`: task mapper. - Create `server/src/main/java/com/emotion/mapper/TtsTaskMapper.java`: task mapper.
- Create `backend-single/src/main/java/com/emotion/dto/request/tts/TtsTaskCreateRequest.java`: create request. - Create `server/src/main/java/com/emotion/dto/request/tts/TtsTaskCreateRequest.java`: create request.
- Create `backend-single/src/main/java/com/emotion/dto/response/tts/TtsTaskResponse.java`: task response. - Create `server/src/main/java/com/emotion/dto/response/tts/TtsTaskResponse.java`: task response.
- Create `backend-single/src/main/java/com/emotion/service/TtsTaskService.java`: contract. - Create `server/src/main/java/com/emotion/service/TtsTaskService.java`: contract.
- Create `backend-single/src/main/java/com/emotion/service/impl/TtsTaskServiceImpl.java`: ownership, cache, async processing. - Create `server/src/main/java/com/emotion/service/impl/TtsTaskServiceImpl.java`: ownership, cache, async processing.
- Create `backend-single/src/main/java/com/emotion/service/TtsEngineClient.java`: internal engine client contract. - Create `server/src/main/java/com/emotion/service/TtsEngineClient.java`: internal engine client contract.
- Create `backend-single/src/main/java/com/emotion/service/impl/HttpTtsEngineClient.java`: calls Python service. - Create `server/src/main/java/com/emotion/service/impl/HttpTtsEngineClient.java`: calls Python service.
- Create `backend-single/src/main/java/com/emotion/controller/TtsController.java`: user-facing TTS endpoints. - Create `server/src/main/java/com/emotion/controller/TtsController.java`: user-facing TTS endpoints.
- Modify `backend-single/src/main/resources/application.yml`: TTS config defaults. - Modify `server/src/main/resources/application.yml`: TTS config defaults.
- Modify `backend-single/src/main/resources/application-prod.yml`: production paths and internal URL. - Modify `server/src/main/resources/application-prod.yml`: production paths and internal URL.
- Create `backend-single/src/test/java/com/emotion/service/TtsTaskServiceTest.java`: service tests. - Create `server/src/test/java/com/emotion/service/TtsTaskServiceTest.java`: service tests.
- Create `backend-single/tts-service/requirements.txt`: FastAPI deps; MeloTTS is installed from the official repository because the official docs use editable install plus `python -m unidic download`. - Create `server/tts-service/requirements.txt`: FastAPI deps; MeloTTS is installed from the official repository because the official docs use editable install plus `python -m unidic download`.
- Create `backend-single/tts-service/app.py`: FastAPI service. - Create `server/tts-service/app.py`: FastAPI service.
- Create `backend-single/tts-service/README.md`: server setup. - Create `server/tts-service/README.md`: server setup.
- Create `backend-single/tts-service/emotion-museum-tts.service`: systemd unit. - Create `server/tts-service/emotion-museum-tts.service`: systemd unit.
- Create `mini-program/src/services/tts.js`: TTS API client. - Create `mini-program/src/services/tts.js`: TTS API client.
- Create `mini-program/src/components/ScriptAudioPlayer.vue`: player component. - Create `mini-program/src/components/ScriptAudioPlayer.vue`: player component.
- Modify `mini-program/src/pages/main/ScriptDetailView.vue`: add player. - Modify `mini-program/src/pages/main/ScriptDetailView.vue`: add player.
@@ -93,10 +93,10 @@ git commit -m "feat: add tts task table"
### Task 2: Add Backend TTS Entity, DTOs, and Mapper ### Task 2: Add Backend TTS Entity, DTOs, and Mapper
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/entity/TtsTask.java` - Create: `server/src/main/java/com/emotion/entity/TtsTask.java`
- Create: `backend-single/src/main/java/com/emotion/mapper/TtsTaskMapper.java` - Create: `server/src/main/java/com/emotion/mapper/TtsTaskMapper.java`
- Create: `backend-single/src/main/java/com/emotion/dto/request/tts/TtsTaskCreateRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/tts/TtsTaskCreateRequest.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/tts/TtsTaskResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/tts/TtsTaskResponse.java`
- [ ] **Step 1: Add entity** - [ ] **Step 1: Add entity**
@@ -205,7 +205,7 @@ public class TtsTaskResponse {
- [ ] **Step 4: Compile** - [ ] **Step 4: Compile**
```bash ```bash
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -214,7 +214,7 @@ Expected: `BUILD SUCCESS`.
- [ ] **Step 5: Commit** - [ ] **Step 5: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/entity/TtsTask.java backend-single/src/main/java/com/emotion/mapper/TtsTaskMapper.java backend-single/src/main/java/com/emotion/dto/request/tts backend-single/src/main/java/com/emotion/dto/response/tts git add server/src/main/java/com/emotion/entity/TtsTask.java server/src/main/java/com/emotion/mapper/TtsTaskMapper.java server/src/main/java/com/emotion/dto/request/tts server/src/main/java/com/emotion/dto/response/tts
git commit -m "feat: add tts task model" git commit -m "feat: add tts task model"
``` ```
@@ -223,13 +223,13 @@ git commit -m "feat: add tts task model"
### Task 3: Add TTS Service and Engine Client ### Task 3: Add TTS Service and Engine Client
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/TtsTaskService.java` - Create: `server/src/main/java/com/emotion/service/TtsTaskService.java`
- Create: `backend-single/src/main/java/com/emotion/service/TtsEngineClient.java` - Create: `server/src/main/java/com/emotion/service/TtsEngineClient.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/HttpTtsEngineClient.java` - Create: `server/src/main/java/com/emotion/service/impl/HttpTtsEngineClient.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/TtsTaskServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/TtsTaskServiceImpl.java`
- Modify: `backend-single/src/main/resources/application.yml` - Modify: `server/src/main/resources/application.yml`
- Modify: `backend-single/src/main/resources/application-prod.yml` - Modify: `server/src/main/resources/application-prod.yml`
- Test: `backend-single/src/test/java/com/emotion/service/TtsTaskServiceTest.java` - Test: `server/src/test/java/com/emotion/service/TtsTaskServiceTest.java`
- [ ] **Step 1: Add service contracts** - [ ] **Step 1: Add service contracts**
@@ -503,7 +503,7 @@ public class TtsTaskServiceImpl extends ServiceImpl<TtsTaskMapper, TtsTask> impl
- [ ] **Step 5: Run compile** - [ ] **Step 5: Run compile**
```bash ```bash
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -512,7 +512,7 @@ Expected: `BUILD SUCCESS`.
- [ ] **Step 6: Commit** - [ ] **Step 6: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/TtsTaskService.java backend-single/src/main/java/com/emotion/service/TtsEngineClient.java backend-single/src/main/java/com/emotion/service/impl/HttpTtsEngineClient.java backend-single/src/main/java/com/emotion/service/impl/TtsTaskServiceImpl.java backend-single/src/main/resources/application.yml backend-single/src/main/resources/application-prod.yml git add server/src/main/java/com/emotion/service/TtsTaskService.java server/src/main/java/com/emotion/service/TtsEngineClient.java server/src/main/java/com/emotion/service/impl/HttpTtsEngineClient.java server/src/main/java/com/emotion/service/impl/TtsTaskServiceImpl.java server/src/main/resources/application.yml server/src/main/resources/application-prod.yml
git commit -m "feat: add tts backend service" git commit -m "feat: add tts backend service"
``` ```
@@ -521,7 +521,7 @@ git commit -m "feat: add tts backend service"
### Task 4: Add TTS Controller ### Task 4: Add TTS Controller
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/controller/TtsController.java` - Create: `server/src/main/java/com/emotion/controller/TtsController.java`
- [ ] **Step 1: Add controller** - [ ] **Step 1: Add controller**
@@ -569,7 +569,7 @@ public class TtsController {
- [ ] **Step 2: Run compile** - [ ] **Step 2: Run compile**
```bash ```bash
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -578,7 +578,7 @@ Expected: `BUILD SUCCESS`.
- [ ] **Step 3: Commit** - [ ] **Step 3: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/TtsController.java git add server/src/main/java/com/emotion/controller/TtsController.java
git commit -m "feat: expose tts task APIs" git commit -m "feat: expose tts task APIs"
``` ```
@@ -587,10 +587,10 @@ git commit -m "feat: expose tts task APIs"
### Task 5: Add Python TTS Service Skeleton ### Task 5: Add Python TTS Service Skeleton
**Files:** **Files:**
- Create: `backend-single/tts-service/requirements.txt` - Create: `server/tts-service/requirements.txt`
- Create: `backend-single/tts-service/app.py` - Create: `server/tts-service/app.py`
- Create: `backend-single/tts-service/README.md` - Create: `server/tts-service/README.md`
- Create: `backend-single/tts-service/emotion-museum-tts.service` - Create: `server/tts-service/emotion-museum-tts.service`
- [ ] **Step 1: Add requirements** - [ ] **Step 1: Add requirements**
@@ -717,7 +717,7 @@ curl http://127.0.0.1:19110/health
- [ ] **Step 5: Run local syntax check** - [ ] **Step 5: Run local syntax check**
```bash ```bash
python -m py_compile backend-single/tts-service/app.py python -m py_compile server/tts-service/app.py
``` ```
Expected: no output and exit code 0. Expected: no output and exit code 0.
@@ -725,7 +725,7 @@ Expected: no output and exit code 0.
- [ ] **Step 6: Commit** - [ ] **Step 6: Commit**
```bash ```bash
git add backend-single/tts-service git add server/tts-service
git commit -m "feat: add private tts service scaffold" git commit -m "feat: add private tts service scaffold"
``` ```
@@ -960,7 +960,7 @@ git commit -m "feat: add tts control to script detail"
- [ ] **Step 1: Upload service directory** - [ ] **Step 1: Upload service directory**
```bash ```bash
scp -r backend-single/tts-service root@101.200.208.45:/data/programs/emotion-museum/tts-service scp -r server/tts-service root@101.200.208.45:/data/programs/emotion-museum/tts-service
``` ```
Expected: files are copied. Expected: files are copied.
@@ -988,7 +988,7 @@ Expected:
- [ ] **Step 4: Install systemd unit after health passes** - [ ] **Step 4: Install systemd unit after health passes**
```bash ```bash
scp backend-single/tts-service/emotion-museum-tts.service root@101.200.208.45:/etc/systemd/system/emotion-museum-tts.service scp server/tts-service/emotion-museum-tts.service root@101.200.208.45:/etc/systemd/system/emotion-museum-tts.service
ssh root@101.200.208.45 "systemctl daemon-reload && systemctl enable emotion-museum-tts && systemctl restart emotion-museum-tts && systemctl status emotion-museum-tts --no-pager" ssh root@101.200.208.45 "systemctl daemon-reload && systemctl enable emotion-museum-tts && systemctl restart emotion-museum-tts && systemctl status emotion-museum-tts --no-pager"
``` ```
@@ -997,7 +997,7 @@ Expected: service status is active.
- [ ] **Step 5: Commit deployment doc tweaks if needed** - [ ] **Step 5: Commit deployment doc tweaks if needed**
```bash ```bash
git add backend-single/tts-service/README.md git add server/tts-service/README.md
git commit -m "docs: update tts deployment notes" git commit -m "docs: update tts deployment notes"
``` ```
@@ -1013,7 +1013,7 @@ Only run this commit if README changed.
- [ ] **Step 1: Run backend tests** - [ ] **Step 1: Run backend tests**
```bash ```bash
cd backend-single cd server
mvn test mvn test
``` ```
@@ -44,21 +44,21 @@ This plan does not implement:
Backend: Backend:
- Create: `backend-single/src/main/java/com/emotion/entity/SocialContentItem.java` - Create: `server/src/main/java/com/emotion/entity/SocialContentItem.java`
- Create: `backend-single/src/main/java/com/emotion/entity/SocialProfileInsight.java` - Create: `server/src/main/java/com/emotion/entity/SocialProfileInsight.java`
- Create: `backend-single/src/main/java/com/emotion/entity/UserConsentLog.java` - Create: `server/src/main/java/com/emotion/entity/UserConsentLog.java`
- Create: `backend-single/src/main/java/com/emotion/mapper/SocialContentItemMapper.java` - Create: `server/src/main/java/com/emotion/mapper/SocialContentItemMapper.java`
- Create: `backend-single/src/main/java/com/emotion/mapper/SocialProfileInsightMapper.java` - Create: `server/src/main/java/com/emotion/mapper/SocialProfileInsightMapper.java`
- Create: `backend-single/src/main/java/com/emotion/mapper/UserConsentLogMapper.java` - Create: `server/src/main/java/com/emotion/mapper/UserConsentLogMapper.java`
- Create: `backend-single/src/main/java/com/emotion/dto/request/social/*.java` - Create: `server/src/main/java/com/emotion/dto/request/social/*.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/social/*.java` - Create: `server/src/main/java/com/emotion/dto/response/social/*.java`
- Create: `backend-single/src/main/java/com/emotion/controller/SocialContentController.java` - Create: `server/src/main/java/com/emotion/controller/SocialContentController.java`
- Create: `backend-single/src/main/java/com/emotion/controller/SocialInsightController.java` - Create: `server/src/main/java/com/emotion/controller/SocialInsightController.java`
- Create: `backend-single/src/main/java/com/emotion/service/SocialContentService.java` - Create: `server/src/main/java/com/emotion/service/SocialContentService.java`
- Create: `backend-single/src/main/java/com/emotion/service/SocialInsightService.java` - Create: `server/src/main/java/com/emotion/service/SocialInsightService.java`
- Create: `backend-single/src/main/java/com/emotion/service/ScriptContextService.java` - Create: `server/src/main/java/com/emotion/service/ScriptContextService.java`
- Create implementations under `backend-single/src/main/java/com/emotion/service/impl/` - Create implementations under `server/src/main/java/com/emotion/service/impl/`
- Modify: `backend-single/src/main/java/com/emotion/service/impl/EpicScriptServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/EpicScriptServiceImpl.java`
- Modify SQL schema/migration file used by this repo. - Modify SQL schema/migration file used by this repo.
Mini program: Mini program:
@@ -212,7 +212,7 @@ public interface SocialContentItemMapper extends BaseMapper<SocialContentItem> {
Run: Run:
```powershell ```powershell
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -221,8 +221,8 @@ Expected: compile succeeds.
## Task 3: Social Content API ## Task 3: Social Content API
**Files:** **Files:**
- Create DTOs under `backend-single/src/main/java/com/emotion/dto/request/social/` - Create DTOs under `server/src/main/java/com/emotion/dto/request/social/`
- Create DTOs under `backend-single/src/main/java/com/emotion/dto/response/social/` - Create DTOs under `server/src/main/java/com/emotion/dto/response/social/`
- Create: `SocialContentController.java` - Create: `SocialContentController.java`
- Create: `SocialContentService.java` - Create: `SocialContentService.java`
- Create: `SocialContentServiceImpl.java` - Create: `SocialContentServiceImpl.java`
@@ -317,7 +317,7 @@ Do not accept screenshots larger than the configured limit.
Run: Run:
```powershell ```powershell
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -405,7 +405,7 @@ Rules:
Run: Run:
```powershell ```powershell
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -414,8 +414,8 @@ Expected: compile succeeds.
## Task 5: Script Context Integration ## Task 5: Script Context Integration
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/ScriptContextService.java` - Create: `server/src/main/java/com/emotion/service/ScriptContextService.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/ScriptContextServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/ScriptContextServiceImpl.java`
- Modify: `EpicScriptServiceImpl.java` - Modify: `EpicScriptServiceImpl.java`
- [ ] **Step 1: Implement context service** - [ ] **Step 1: Implement context service**
@@ -468,7 +468,7 @@ When social insight context is non-empty, add analytics/event hook if backend an
Run: Run:
```powershell ```powershell
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -658,7 +658,7 @@ Expected: build succeeds.
Run: Run:
```powershell ```powershell
cd backend-single cd server
mvn -DskipTests compile mvn -DskipTests compile
``` ```
@@ -707,7 +707,7 @@ Check:
- [ ] **Step 5: Commit** - [ ] **Step 5: Commit**
```powershell ```powershell
git add backend-single mini-program sql docs/superpowers/specs/2026-05-19-social-data-import-script-profile-design.md docs/superpowers/plans/2026-05-19-social-data-import-script-profile-plan.md git add server mini-program sql docs/superpowers/specs/2026-05-19-social-data-import-script-profile-design.md docs/superpowers/plans/2026-05-19-social-data-import-script-profile-plan.md
git commit -m "feat: add social data import design and profile plan" git commit -m "feat: add social data import design and profile plan"
``` ```
@@ -13,10 +13,10 @@
### Task 1: ASR Service ### Task 1: ASR Service
**Files:** **Files:**
- Create: `backend-single/asr-service/app.py` - Create: `server/asr-service/app.py`
- Create: `backend-single/asr-service/requirements.txt` - Create: `server/asr-service/requirements.txt`
- Create: `backend-single/asr-service/emotion-museum-asr.service` - Create: `server/asr-service/emotion-museum-asr.service`
- Create: `backend-single/asr-service/README.md` - Create: `server/asr-service/README.md`
- [x] Add a FastAPI service with `/health` and `/transcribe`. - [x] Add a FastAPI service with `/health` and `/transcribe`.
- [x] Accept an uploaded audio file, save it under `/tmp/emotion-museum-asr`, run the ASR model, and return JSON with `success`, `text`, `language`, `durationMs`, `engine`, and `errorMessage`. - [x] Accept an uploaded audio file, save it under `/tmp/emotion-museum-asr`, run the ASR model, and return JSON with `success`, `text`, `language`, `durationMs`, `engine`, and `errorMessage`.
@@ -25,12 +25,12 @@
### Task 2: Java Backend Proxy ### Task 2: Java Backend Proxy
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/dto/response/asr/AsrTranscribeResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/asr/AsrTranscribeResponse.java`
- Create: `backend-single/src/main/java/com/emotion/service/AsrService.java` - Create: `server/src/main/java/com/emotion/service/AsrService.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/AsrServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/AsrServiceImpl.java`
- Create: `backend-single/src/main/java/com/emotion/controller/AsrController.java` - Create: `server/src/main/java/com/emotion/controller/AsrController.java`
- Modify: `backend-single/src/main/resources/application.yml` - Modify: `server/src/main/resources/application.yml`
- Modify: `backend-single/src/main/resources/application-prod.yml` - Modify: `server/src/main/resources/application-prod.yml`
- [x] Add `emotion.asr` config for `enabled`, `engine-url`, `max-file-size`, and `allowed-types`. - [x] Add `emotion.asr` config for `enabled`, `engine-url`, `max-file-size`, and `allowed-types`.
- [x] Validate upload presence, size, and suffix. - [x] Validate upload presence, size, and suffix.
@@ -14,10 +14,10 @@
| 文件 | 职责 | 操作 | | 文件 | 职责 | 操作 |
|------|------|------| |------|------|------|
| `backend-single/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` | DTO:新增 endpointId 字段,更新 RESERVED_KEYS | 修改 | | `server/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` | DTO:新增 endpointId 字段,更新 RESERVED_KEYS | 修改 |
| `backend-single/src/main/java/com/emotion/service/AiRuntimeService.java` | Service 接口:新增 testEndpoint + invokeEndpointStream | 修改 | | `server/src/main/java/com/emotion/service/AiRuntimeService.java` | Service 接口:新增 testEndpoint + invokeEndpointStream | 修改 |
| `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` | Service 实现:新增两个方法的完整实现 | 修改 | | `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` | Service 实现:新增两个方法的完整实现 | 修改 |
| `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` | Controller:新增 /endpoint/test 和 /endpoint/stream | 修改 | | `server/src/main/java/com/emotion/controller/AiRoutingController.java` | Controller:新增 /endpoint/test 和 /endpoint/stream | 修改 |
| `web-admin/src/types/aiconfig.ts` | TypeScript 类型:新增 AiEndpointRuntimeRequest | 修改 | | `web-admin/src/types/aiconfig.ts` | TypeScript 类型:新增 AiEndpointRuntimeRequest | 修改 |
| `web-admin/src/api/aiconfig.ts` | API 层:新增 testEndpointRuntime、streamEndpointRuntime、提取 fetchSseStream | 修改 | | `web-admin/src/api/aiconfig.ts` | API 层:新增 testEndpointRuntime、streamEndpointRuntime、提取 fetchSseStream | 修改 |
| `web-admin/src/views/aiconfig/AiRoutingList.vue` | Vue 组件:增加行内测试按钮 + endpoint 测试对话框 | 修改 | | `web-admin/src/views/aiconfig/AiRoutingList.vue` | Vue 组件:增加行内测试按钮 + endpoint 测试对话框 | 修改 |
@@ -27,7 +27,7 @@
### Task 1: DTO 增强 — AiRuntimeRequest 新增 endpointId ### Task 1: DTO 增强 — AiRuntimeRequest 新增 endpointId
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java`
- [ ] **Step 1: 新增 endpointId 字段和 RESERVED_KEYS** - [ ] **Step 1: 新增 endpointId 字段和 RESERVED_KEYS**
@@ -82,13 +82,13 @@ public static AiRuntimeRequest fromPayload(JSONObject payload) {
- [ ] **Step 3: 编译验证** - [ ] **Step 3: 编译验证**
Run: `cd backend-single && mvn clean compile -pl :backend-single -am -DskipTests` Run: `cd server && mvn clean compile -pl :server -am -DskipTests`
Expected: BUILD SUCCESSendpointId 字段新增不破坏任何编译,因为这是新增字段) Expected: BUILD SUCCESSendpointId 字段新增不破坏任何编译,因为这是新增字段)
- [ ] **Step 4: Commit** - [ ] **Step 4: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java git add server/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java
git commit -m "feat: AiRuntimeRequest DTO 新增 endpointId 字段 git commit -m "feat: AiRuntimeRequest DTO 新增 endpointId 字段
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>" Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
@@ -99,7 +99,7 @@ Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
### Task 2: Service 接口层 — 新增 testEndpoint + invokeEndpointStream ### Task 2: Service 接口层 — 新增 testEndpoint + invokeEndpointStream
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/AiRuntimeService.java` - Modify: `server/src/main/java/com/emotion/service/AiRuntimeService.java`
- [ ] **Step 1: 新增两个接口方法** - [ ] **Step 1: 新增两个接口方法**
@@ -128,13 +128,13 @@ public interface AiRuntimeService {
- [ ] **Step 2: 编译验证** - [ ] **Step 2: 编译验证**
Run: `cd backend-single && mvn clean compile -pl :backend-single -am -DskipTests` Run: `cd server && mvn clean compile -pl :server -am -DskipTests`
Expected: BUILD SUCCESS(接口新增方法,但实现类尚未修改,此时不会编译失败 — 因为 ServiceImpl 编译是单独的任务) Expected: BUILD SUCCESS(接口新增方法,但实现类尚未修改,此时不会编译失败 — 因为 ServiceImpl 编译是单独的任务)
- [ ] **Step 3: Commit** - [ ] **Step 3: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/AiRuntimeService.java git add server/src/main/java/com/emotion/service/AiRuntimeService.java
git commit -m "feat: AiRuntimeService 接口新增 endpoint 测试方法 git commit -m "feat: AiRuntimeService 接口新增 endpoint 测试方法
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>" Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
@@ -145,7 +145,7 @@ Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
### Task 3: Service 实现层 — testEndpoint + invokeEndpointStream 实现 ### Task 3: Service 实现层 — testEndpoint + invokeEndpointStream 实现
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java`
- [ ] **Step 1: 新增 testEndpoint 方法** - [ ] **Step 1: 新增 testEndpoint 方法**
@@ -271,13 +271,13 @@ public void invokeEndpointStream(String endpointId, Map<String, Object> inputs,
- [ ] **Step 3: 编译验证** - [ ] **Step 3: 编译验证**
Run: `cd backend-single && mvn clean compile -pl :backend-single -am -DskipTests` Run: `cd server && mvn clean compile -pl :server -am -DskipTests`
Expected: BUILD SUCCESS Expected: BUILD SUCCESS
- [ ] **Step 4: Commit** - [ ] **Step 4: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java git add server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java
git commit -m "feat: AiRuntimeServiceImpl 实现 endpoint 直接测试方法 git commit -m "feat: AiRuntimeServiceImpl 实现 endpoint 直接测试方法
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>" Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
@@ -288,7 +288,7 @@ Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
### Task 4: Controller 层 — 新增 /endpoint/test 和 /endpoint/stream ### Task 4: Controller 层 — 新增 /endpoint/test 和 /endpoint/stream
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` - Modify: `server/src/main/java/com/emotion/controller/AiRoutingController.java`
- [ ] **Step 1: 在 runtimeStream 方法之后新增两个 endpoint 方法** - [ ] **Step 1: 在 runtimeStream 方法之后新增两个 endpoint 方法**
@@ -323,13 +323,13 @@ public SseEmitter endpointStream(@RequestBody JSONObject payload) {
- [ ] **Step 2: 编译并验证完整后端** - [ ] **Step 2: 编译并验证完整后端**
Run: `cd backend-single && mvn clean compile -pl :backend-single -am -DskipTests` Run: `cd server && mvn clean compile -pl :server -am -DskipTests`
Expected: BUILD SUCCESS Expected: BUILD SUCCESS
- [ ] **Step 3: Commit** - [ ] **Step 3: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AiRoutingController.java git add server/src/main/java/com/emotion/controller/AiRoutingController.java
git commit -m "feat: AiRoutingController 新增 /endpoint/test 和 /endpoint/stream 接口 git commit -m "feat: AiRoutingController 新增 /endpoint/test 和 /endpoint/stream 接口
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>" Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>"
@@ -13,10 +13,10 @@
### Task 1: Backend Test Sample Contract ### Task 1: Backend Test Sample Contract
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/dto/response/ai/AiTestTemplateResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/ai/AiTestTemplateResponse.java`
- Modify: `backend-single/src/main/java/com/emotion/service/AiRuntimeService.java` - Modify: `server/src/main/java/com/emotion/service/AiRuntimeService.java`
- Modify: `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java`
- Modify: `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` - Modify: `server/src/main/java/com/emotion/controller/AiRoutingController.java`
- [x] Add a response DTO with `sceneCode`, `endpointId`, `endpointCode`, `providerType`, `inputs`, and `paramFields`. - [x] Add a response DTO with `sceneCode`, `endpointId`, `endpointCode`, `providerType`, `inputs`, and `paramFields`.
- [x] Add service methods `buildEndpointTestTemplate(String endpointId)` and `buildSceneTestTemplate(String sceneCode)`. - [x] Add service methods `buildEndpointTestTemplate(String endpointId)` and `buildSceneTestTemplate(String sceneCode)`.
@@ -26,9 +26,9 @@
### Task 2: Provider Runtime Compatibility ### Task 2: Provider Runtime Compatibility
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/ai/ProviderHttpSupport.java` - Modify: `server/src/main/java/com/emotion/service/ai/ProviderHttpSupport.java`
- Modify: `backend-single/src/main/java/com/emotion/service/ai/CozeProviderAdapter.java` - Modify: `server/src/main/java/com/emotion/service/ai/CozeProviderAdapter.java`
- Modify: `backend-single/src/main/java/com/emotion/service/ai/DifyProviderAdapter.java` - Modify: `server/src/main/java/com/emotion/service/ai/DifyProviderAdapter.java`
- [x] Add `Accept: text/event-stream` for stream requests. - [x] Add `Accept: text/event-stream` for stream requests.
- [x] Make Coze workflow body match historical calls: `workflow_id`, `user_id`, `stream`, `parameters`, and optional `bot_id`. - [x] Make Coze workflow body match historical calls: `workflow_id`, `user_id`, `stream`, `parameters`, and optional `bot_id`.
@@ -22,9 +22,9 @@
### Task 2: User Runtime Request Shape ### Task 2: User Runtime Request Shape
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` - Modify: `server/src/main/java/com/emotion/controller/AiRoutingController.java`
- Modify: `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java`
- [x] Accept user calls as `sceneCode` plus `inputs` JSON. - [x] Accept user calls as `sceneCode` plus `inputs` JSON.
- [x] Keep user identity server-side by reading `UserContextHolder`. - [x] Keep user identity server-side by reading `UserContextHolder`.
@@ -13,8 +13,8 @@
### Task 1: Backend Chat Bridge To Runtime ### Task 1: Backend Chat Bridge To Runtime
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/impl/WebSocketServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/WebSocketServiceImpl.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/websocket/WebSocketMessage.java` - Modify: `server/src/main/java/com/emotion/dto/websocket/WebSocketMessage.java`
- [x] Route chat generation through `AiRuntimeService` with `sceneCode=chat`. - [x] Route chat generation through `AiRuntimeService` with `sceneCode=chat`.
- [x] Push `start`, `delta`, `done`, and `error` events over the existing user WebSocket topic. - [x] Push `start`, `delta`, `done`, and `error` events over the existing user WebSocket topic.
@@ -13,8 +13,8 @@
### Task 1: Backend Stream Text Normalization ### Task 1: Backend Stream Text Normalization
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/ai/CozeProviderAdapter.java` - Modify: `server/src/main/java/com/emotion/service/ai/CozeProviderAdapter.java`
- Modify: `backend-single/src/main/java/com/emotion/service/ai/DifyProviderAdapter.java` - Modify: `server/src/main/java/com/emotion/service/ai/DifyProviderAdapter.java`
- [x] Add a private helper that parses JSON string wrappers and returns `output`, `answer`, `content`, `text`, `result`, `data.*`, or `outputs.*`. - [x] Add a private helper that parses JSON string wrappers and returns `output`, `answer`, `content`, `text`, `result`, `data.*`, or `outputs.*`.
- [x] Call the helper before returning every extracted delta string. - [x] Call the helper before returning every extracted delta string.
@@ -54,7 +54,7 @@
**Commands:** **Commands:**
- `cd web-admin && npm run build` - `cd web-admin && npm run build`
- `cd backend-single && mvn test` - `cd server && mvn test`
- `git diff --check` - `git diff --check`
- [x] Build passes. - [x] Build passes.
@@ -2,7 +2,7 @@
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:**backend-single 下全部 39 个 Controller 及其关联 Request DTO 补全 OpenAPI 中文注解(@Tag/@Operation/@Parameter/@Schema),使接口文档页面可通过清晰的中文描述理解每个接口的作用和参数含义。 **Goal:**server 下全部 39 个 Controller 及其关联 Request DTO 补全 OpenAPI 中文注解(@Tag/@Operation/@Parameter/@Schema),使接口文档页面可通过清晰的中文描述理解每个接口的作用和参数含义。
**Architecture:** 在不改变现有代码结构和业务逻辑的前提下,为每个 Controller 类添加 `@Tag` 注解、为每个 public 方法添加 `@Operation` 注解、为 `@RequestParam`/`@PathVariable` 参数添加 `@Parameter` 注解、为被 Controller 直接引用的 Request DTO 字段添加 `@Schema` 注解。分 3 批实施,每批完成后编译验证。 **Architecture:** 在不改变现有代码结构和业务逻辑的前提下,为每个 Controller 类添加 `@Tag` 注解、为每个 public 方法添加 `@Operation` 注解、为 `@RequestParam`/`@PathVariable` 参数添加 `@Parameter` 注解、为被 Controller 直接引用的 Request DTO 字段添加 `@Schema` 注解。分 3 批实施,每批完成后编译验证。
@@ -25,12 +25,12 @@
### Task 1.1: AiChatController 注解 ### Task 1.1: AiChatController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AiChatController.java` - Modify: `server/src/main/java/com/emotion/controller/AiChatController.java`
- Modify: `backend-single/src/main/java/com/com/emotion/dto/request/AiChatRequest.java` - Modify: `server/src/main/java/com/com/emotion/dto/request/AiChatRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/AiSummaryRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/AiSummaryRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/GuestChatRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/GuestChatRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/ConversationCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/ConversationCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/ChatStatsRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/ChatStatsRequest.java`
- [ ] **Step 1: 为 AiChatController 添加 @Tag 和 @Operation 注解** - [ ] **Step 1: 为 AiChatController 添加 @Tag 和 @Operation 注解**
@@ -162,8 +162,8 @@ public class ChatStatsRequest extends BaseRequest {
### Task 1.2: AiRoutingController 注解 ### Task 1.2: AiRoutingController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` - Modify: `server/src/main/java/com/emotion/controller/AiRoutingController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java`
- [ ] **Step 1: 为 AiRoutingController 添加注解** - [ ] **Step 1: 为 AiRoutingController 添加注解**
@@ -215,10 +215,10 @@ public class AiRuntimeRequest {
### Task 1.3: CozeApiCallController 注解 ### Task 1.3: CozeApiCallController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/CozeApiCallController.java` - Modify: `server/src/main/java/com/emotion/controller/CozeApiCallController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/coze/CozeApiCallPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/coze/CozeApiCallPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/coze/CozeApiCallCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/coze/CozeApiCallCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/coze/CozeApiCallUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/coze/CozeApiCallUpdateRequest.java`
- [ ] **Step 1: 为 CozeApiCallController 添加 @Tag 注解** - [ ] **Step 1: 为 CozeApiCallController 添加 @Tag 注解**
@@ -339,10 +339,10 @@ public class CozeApiCallUpdateRequest {
### Task 1.4: CommunityPostController 注解 ### Task 1.4: CommunityPostController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/CommunityPostController.java` - Modify: `server/src/main/java/com/emotion/controller/CommunityPostController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/community/CommunityPostCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/community/CommunityPostCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/community/CommunityPostUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/community/CommunityPostUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/community/CommunityPostPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/community/CommunityPostPageRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -387,10 +387,10 @@ CommunityPostPageRequest 各字段加 @Schema(description = "页码")、@Schema(
### Task 1.5: CommentController 注解 ### Task 1.5: CommentController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/CommentController.java` - Modify: `server/src/main/java/com/emotion/controller/CommentController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/comment/CommentCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/comment/CommentCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/comment/CommentUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/comment/CommentUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/comment/CommentPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/comment/CommentPageRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -429,10 +429,10 @@ public class CommentController {
### Task 1.6: SocialContentController 注解 ### Task 1.6: SocialContentController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/SocialContentController.java` - Modify: `server/src/main/java/com/emotion/controller/SocialContentController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/social/SocialContentManualImportRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/social/SocialContentManualImportRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/social/SocialContentLinkImportRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/social/SocialContentLinkImportRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/social/SocialContentApprovalRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/social/SocialContentApprovalRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -476,9 +476,9 @@ public class SocialContentController {
### Task 1.7: SocialInsightController 注解 ### Task 1.7: SocialInsightController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/SocialInsightController.java` - Modify: `server/src/main/java/com/emotion/controller/SocialInsightController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/social/SocialInsightGenerateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/social/SocialInsightGenerateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/social/SocialInsightUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/social/SocialInsightUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -514,8 +514,8 @@ public class SocialInsightController {
- [ ] **Step 1: 编译验证** - [ ] **Step 1: 编译验证**
```bash ```bash
cd backend-single cd server
mvn clean install -pl :backend-single -am -DskipTests mvn clean install -pl :server -am -DskipTests
``` ```
Expected: BUILD SUCCESS,无编译错误。 Expected: BUILD SUCCESS,无编译错误。
@@ -523,8 +523,8 @@ Expected: BUILD SUCCESS,无编译错误。
- [ ] **Step 2: 提交 Batch 1 改动** - [ ] **Step 2: 提交 Batch 1 改动**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AiChatController.java git add server/src/main/java/com/emotion/controller/AiChatController.java
git add backend-single/src/main/java/com/emotion/controller/AiRoutingController.java git add server/src/main/java/com/emotion/controller/AiRoutingController.java
# ... 添加 Batch 1 所有修改的文件 # ... 添加 Batch 1 所有修改的文件
git commit -m "feat: Batch 1 — AI + 社区 Controller 中文注解补全" git commit -m "feat: Batch 1 — AI + 社区 Controller 中文注解补全"
``` ```
@@ -536,10 +536,10 @@ git commit -m "feat: Batch 1 — AI + 社区 Controller 中文注解补全"
### Task 2.1: EmotionAnalysisController 注解 ### Task 2.1: EmotionAnalysisController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/EmotionAnalysisController.java` - Modify: `server/src/main/java/com/emotion/controller/EmotionAnalysisController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionAnalysisCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionAnalysisCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionAnalysisPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionAnalysisPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionAnalysisUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionAnalysisUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -578,10 +578,10 @@ public class EmotionAnalysisController {
### Task 2.2: EmotionRecordController 注解 ### Task 2.2: EmotionRecordController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/EmotionRecordController.java` - Modify: `server/src/main/java/com/emotion/controller/EmotionRecordController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionRecordCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionRecordCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionRecordPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionRecordPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionRecordUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionRecordUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -625,9 +625,9 @@ public class EmotionRecordController {
### Task 2.3: EmotionSummaryController 补充注解 ### Task 2.3: EmotionSummaryController 补充注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/EmotionSummaryController.java` - Modify: `server/src/main/java/com/emotion/controller/EmotionSummaryController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionSummaryGenerateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionSummaryGenerateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EmotionSummaryStatusRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EmotionSummaryStatusRequest.java`
- [ ] **Step 1: 补充缺失的 @Operation 注解** - [ ] **Step 1: 补充缺失的 @Operation 注解**
@@ -646,10 +646,10 @@ public class EmotionRecordController {
### Task 2.4: DiaryPostController 注解 ### Task 2.4: DiaryPostController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/DiaryPostController.java` - Modify: `server/src/main/java/com/emotion/controller/DiaryPostController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/DiaryPostCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/DiaryPostCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/DiaryPostPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/DiaryPostPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/DiaryPostUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/DiaryPostUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -706,9 +706,9 @@ public class DiaryPostController {
### Task 2.5: DiaryCommentController 注解 ### Task 2.5: DiaryCommentController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/DiaryCommentController.java` - Modify: `server/src/main/java/com/emotion/controller/DiaryCommentController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/DiaryCommentCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/DiaryCommentCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/DiaryCommentPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/DiaryCommentPageRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -759,10 +759,10 @@ public class DiaryCommentController {
### Task 2.6: GrowthTopicController 注解 ### Task 2.6: GrowthTopicController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/GrowthTopicController.java` - Modify: `server/src/main/java/com/emotion/controller/GrowthTopicController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/growth/GrowthTopicCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/growth/GrowthTopicCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/growth/GrowthTopicPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/growth/GrowthTopicPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/growth/GrowthTopicUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/growth/GrowthTopicUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -793,10 +793,10 @@ public class GrowthTopicController {
### Task 2.7: TopicInteractionController 注解 ### Task 2.7: TopicInteractionController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/TopicInteractionController.java` - Modify: `server/src/main/java/com/emotion/controller/TopicInteractionController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/TopicInteractionCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/TopicInteractionCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/TopicInteractionPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/TopicInteractionPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/TopicInteractionUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/TopicInteractionUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -829,8 +829,8 @@ public class TopicInteractionController {
### Task 2.8: ConversationController 注解 ### Task 2.8: ConversationController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/ConversationController.java` - Modify: `server/src/main/java/com/emotion/controller/ConversationController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/ConversationPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/ConversationPageRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -872,11 +872,11 @@ public class ConversationController {
### Task 2.9: MessageController 注解 ### Task 2.9: MessageController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/MessageController.java` - Modify: `server/src/main/java/com/emotion/controller/MessageController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/MessageCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/MessageCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/MessagePageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/MessagePageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/MessageSearchRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/MessageSearchRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/MessageRecentRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/MessageRecentRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -915,10 +915,10 @@ public class MessageController {
### Task 2.10: UserProfileController 补充注解 ### Task 2.10: UserProfileController 补充注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/UserProfileController.java` - Modify: `server/src/main/java/com/emotion/controller/UserProfileController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfilePageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/userprofile/UserProfilePageRequest.java`
- [ ] **Step 1: 补充 @Operation 注解(该 Controller 已有 @Tag 但方法级注解缺失)** - [ ] **Step 1: 补充 @Operation 注解(该 Controller 已有 @Tag 但方法级注解缺失)**
@@ -951,12 +951,12 @@ public class MessageController {
### Task 2.11: AchievementController 补充注解 ### Task 2.11: AchievementController 补充注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AchievementController.java` - Modify: `server/src/main/java/com/emotion/controller/AchievementController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/achievement/AchievementCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/achievement/AchievementCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/achievement/AchievementPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/achievement/AchievementPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/achievement/AchievementUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/achievement/AchievementUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/achievement/AchievementProgressUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/achievement/AchievementProgressUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/achievement/AchievementUnlockRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/achievement/AchievementUnlockRequest.java`
- [ ] **Step 1: 补充 @Parameter 注解(已有 @Tag 和 @Operation,但缺少 @RequestParam 的 @Parameter** - [ ] **Step 1: 补充 @Parameter 注解(已有 @Tag 和 @Operation,但缺少 @RequestParam 的 @Parameter**
@@ -1042,8 +1042,8 @@ public class MessageController {
- [ ] **Step 1: 编译验证** - [ ] **Step 1: 编译验证**
```bash ```bash
cd backend-single cd server
mvn clean install -pl :backend-single -am -DskipTests mvn clean install -pl :server -am -DskipTests
``` ```
Expected: BUILD SUCCESS Expected: BUILD SUCCESS
@@ -1051,7 +1051,7 @@ Expected: BUILD SUCCESS
- [ ] **Step 2: 提交 Batch 2 改动** - [ ] **Step 2: 提交 Batch 2 改动**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/EmotionAnalysisController.java git add server/src/main/java/com/emotion/controller/EmotionAnalysisController.java
# ... 添加 Batch 2 所有修改的文件 # ... 添加 Batch 2 所有修改的文件
git commit -m "feat: Batch 2 — 情绪 + 日记 + 互动 Controller 中文注解补全" git commit -m "feat: Batch 2 — 情绪 + 日记 + 互动 Controller 中文注解补全"
``` ```
@@ -1063,10 +1063,10 @@ git commit -m "feat: Batch 2 — 情绪 + 日记 + 互动 Controller 中文注
### Task 3.1: LifePathController 注解 ### Task 3.1: LifePathController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/LifePathController.java` - Modify: `server/src/main/java/com/emotion/controller/LifePathController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/LifePathCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/LifePathCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/LifePathPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/LifePathPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/LifePathUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/LifePathUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1113,10 +1113,10 @@ public class LifePathController {
### Task 3.2: RewardController 注解 ### Task 3.2: RewardController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/RewardController.java` - Modify: `server/src/main/java/com/emotion/controller/RewardController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/reward/RewardCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/reward/RewardCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/reward/RewardPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/reward/RewardPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/reward/RewardUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/reward/RewardUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1149,11 +1149,11 @@ public class RewardController {
### Task 3.3: UserStatsController 注解 ### Task 3.3: UserStatsController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/UserStatsController.java` - Modify: `server/src/main/java/com/emotion/controller/UserStatsController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/UserStatsCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/UserStatsCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/UserStatsIncrementRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/UserStatsIncrementRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/UserStatsPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/UserStatsPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/UserStatsUpdateValueRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/UserStatsUpdateValueRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1194,11 +1194,11 @@ public class UserStatsController {
### Task 3.4: EpicScriptController 注解 ### Task 3.4: EpicScriptController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/EpicScriptController.java` - Modify: `server/src/main/java/com/emotion/controller/EpicScriptController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EpicScriptCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EpicScriptCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EpicScriptUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EpicScriptUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EpicScriptPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EpicScriptPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/EpicScriptInspirationRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/EpicScriptInspirationRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1247,10 +1247,10 @@ public class EpicScriptController {
### Task 3.5: DictionaryController 注解 ### Task 3.5: DictionaryController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/DictionaryController.java` - Modify: `server/src/main/java/com/emotion/controller/DictionaryController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/dictionary/DictionaryCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/dictionary/DictionaryCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/dictionary/DictionaryPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/dictionary/DictionaryPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/dictionary/DictionaryUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/dictionary/DictionaryUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1266,10 +1266,10 @@ public class DictionaryController {
### Task 3.6: GuestUserController 注解 ### Task 3.6: GuestUserController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/GuestUserController.java` - Modify: `server/src/main/java/com/emotion/controller/GuestUserController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/guest/GuestUserCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/guest/GuestUserCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/guest/GuestUserPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/guest/GuestUserPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/guest/GuestUserUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/guest/GuestUserUpdateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1285,8 +1285,8 @@ public class GuestUserController {
### Task 3.7: TtsController 注解 ### Task 3.7: TtsController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/TtsController.java` - Modify: `server/src/main/java/com/emotion/controller/TtsController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/tts/TtsTaskCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/tts/TtsTaskCreateRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1302,7 +1302,7 @@ public class TtsController {
### Task 3.8: AsrController 注解 ### Task 3.8: AsrController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AsrController.java` - Modify: `server/src/main/java/com/emotion/controller/AsrController.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1318,7 +1318,7 @@ public class AsrController {
### Task 3.9: HealthController 注解 ### Task 3.9: HealthController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/HealthController.java` - Modify: `server/src/main/java/com/emotion/controller/HealthController.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1334,10 +1334,10 @@ public class HealthController {
### Task 3.10: LifeEventController 注解 ### Task 3.10: LifeEventController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/LifeEventController.java` - Modify: `server/src/main/java/com/emotion/controller/LifeEventController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/LifeEventCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/LifeEventCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/LifeEventUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/LifeEventUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/LifeEventPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/LifeEventPageRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1353,8 +1353,8 @@ public class LifeEventController {
### Task 3.11: ChatWebSocketController 注解 ### Task 3.11: ChatWebSocketController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/ChatWebSocketController.java` - Modify: `server/src/main/java/com/emotion/controller/ChatWebSocketController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/WebSocketRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/WebSocketRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1370,8 +1370,8 @@ public class ChatWebSocketController {
### Task 3.12: AnalyticsController 注解 ### Task 3.12: AnalyticsController 注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AnalyticsController.java` - Modify: `server/src/main/java/com/emotion/controller/AnalyticsController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventBatchRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsEventBatchRequest.java`
- [ ] **Step 1: Controller 注解** - [ ] **Step 1: Controller 注解**
@@ -1387,13 +1387,13 @@ public class AnalyticsController {
### Task 3.13: AiConfigController 补充注解 ### Task 3.13: AiConfigController 补充注解
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AiConfigController.java` - Modify: `server/src/main/java/com/emotion/controller/AiConfigController.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/aiconfig/AiConfigCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/aiconfig/AiConfigUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigPageRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/aiconfig/AiConfigPageRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigEnableRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/aiconfig/AiConfigEnableRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigDefaultRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/aiconfig/AiConfigDefaultRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/aiconfig/AiConfigTestUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/aiconfig/AiConfigTestUpdateRequest.java`
- [ ] **Step 1: 补充缺失的 @Operation 注解(已有 @Tag 但方法级注解不全)** - [ ] **Step 1: 补充缺失的 @Operation 注解(已有 @Tag 但方法级注解不全)**
@@ -1404,8 +1404,8 @@ public class AnalyticsController {
- [ ] **Step 1: 编译验证** - [ ] **Step 1: 编译验证**
```bash ```bash
cd backend-single cd server
mvn clean install -pl :backend-single -am -DskipTests mvn clean install -pl :server -am -DskipTests
``` ```
Expected: BUILD SUCCESS Expected: BUILD SUCCESS
@@ -1413,7 +1413,7 @@ Expected: BUILD SUCCESS
- [ ] **Step 2: 提交 Batch 3 改动** - [ ] **Step 2: 提交 Batch 3 改动**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/LifePathController.java git add server/src/main/java/com/emotion/controller/LifePathController.java
# ... 添加 Batch 3 所有修改的文件 # ... 添加 Batch 3 所有修改的文件
git commit -m "feat: Batch 3 — 其他 Controller 中文注解补全" git commit -m "feat: Batch 3 — 其他 Controller 中文注解补全"
``` ```
@@ -1559,8 +1559,8 @@ private String fieldName;
- [ ] **Step 1: 全量编译** - [ ] **Step 1: 全量编译**
```bash ```bash
cd backend-single cd server
mvn clean install -pl :backend-single -am -DskipTests mvn clean install -pl :server -am -DskipTests
``` ```
- [ ] **Step 2: 启动服务验证 OpenAPI 同步** - [ ] **Step 2: 启动服务验证 OpenAPI 同步**
@@ -13,10 +13,10 @@
### Task 1: Backend Analytics Dictionary ### Task 1: Backend Analytics Dictionary
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/analytics/AnalyticsDictionary.java` - Create: `server/src/main/java/com/emotion/service/analytics/AnalyticsDictionary.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsTopEventItem.java` - Modify: `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsTopEventItem.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsTrendItem.java` - Modify: `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsTrendItem.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/response/analytics/AnalyticsPreferenceItem.java` - Modify: `server/src/main/java/com/emotion/dto/response/analytics/AnalyticsPreferenceItem.java`
- [x] Add event, event type, page, dimension, value, and API label maps. - [x] Add event, event type, page, dimension, value, and API label maps.
- [x] Add DTO fields for Chinese labels while keeping original keys. - [x] Add DTO fields for Chinese labels while keeping original keys.
@@ -25,8 +25,8 @@
### Task 2: Backend Aggregation Enrichment ### Task 2: Backend Aggregation Enrichment
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java` - Modify: `server/src/main/java/com/emotion/mapper/AnalyticsEventMapper.java`
- Modify: `backend-single/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/AnalyticsServiceImpl.java`
- [x] Query `page_path` and `api_path` for top events. - [x] Query `page_path` and `api_path` for top events.
- [x] Fill `eventLabel`, `eventTypeLabel`, `pageLabel`, `apiLabel` in top events. - [x] Fill `eventLabel`, `eventTypeLabel`, `pageLabel`, `apiLabel` in top events.
@@ -58,7 +58,7 @@
### Task 5: Verification ### Task 5: Verification
**Commands:** **Commands:**
- `cd backend-single && mvn test` - `cd server && mvn test`
- `cd web-admin && npm run build` - `cd web-admin && npm run build`
- `cd mini-program && npm run build:mp-weixin` or available project build command - `cd mini-program && npm run build:mp-weixin` or available project build command
- `git diff --check` - `git diff --check`
@@ -13,10 +13,10 @@
### Task 1: 数据库实体 + Mapper 层 ### Task 1: 数据库实体 + Mapper 层
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/entity/ApiEndpoint.java` - Create: `server/src/main/java/com/emotion/entity/ApiEndpoint.java`
- Create: `backend-single/src/main/java/com/emotion/entity/ApiParam.java` - Create: `server/src/main/java/com/emotion/entity/ApiParam.java`
- Create: `backend-single/src/main/java/com/emotion/mapper/ApiEndpointMapper.java` - Create: `server/src/main/java/com/emotion/mapper/ApiEndpointMapper.java`
- Create: `backend-single/src/main/java/com/emotion/mapper/ApiParamMapper.java` - Create: `server/src/main/java/com/emotion/mapper/ApiParamMapper.java`
- [ ] **Step 1: 创建 ApiEndpoint 实体** - [ ] **Step 1: 创建 ApiEndpoint 实体**
@@ -153,10 +153,10 @@ public interface ApiParamMapper extends BaseMapper<ApiParam> {
- [ ] **Step 4: 提交** - [ ] **Step 4: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/entity/ApiEndpoint.java git add server/src/main/java/com/emotion/entity/ApiEndpoint.java
git add backend-single/src/main/java/com/emotion/entity/ApiParam.java git add server/src/main/java/com/emotion/entity/ApiParam.java
git add backend-single/src/main/java/com/emotion/mapper/ApiEndpointMapper.java git add server/src/main/java/com/emotion/mapper/ApiEndpointMapper.java
git add backend-single/src/main/java/com/emotion/mapper/ApiParamMapper.java git add server/src/main/java/com/emotion/mapper/ApiParamMapper.java
git commit -m "feat: 添加接口端点实体和Mapper" git commit -m "feat: 添加接口端点实体和Mapper"
``` ```
@@ -165,11 +165,11 @@ git commit -m "feat: 添加接口端点实体和Mapper"
### Task 2: DTO 层 — Request/Response ### Task 2: DTO 层 — Request/Response
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/dto/request/ApiEndpointListRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/ApiEndpointListRequest.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/ApiEndpointItemResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/ApiEndpointItemResponse.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/ApiEndpointDetailResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/ApiEndpointDetailResponse.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/ApiParamItemResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/ApiParamItemResponse.java`
- Create: `backend-single/src/main/java/com/emotion/dto/request/ApiTestProxyRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/ApiTestProxyRequest.java`
- [ ] **Step 1: 创建 ApiEndpointListRequest(分页查询入参)** - [ ] **Step 1: 创建 ApiEndpointListRequest(分页查询入参)**
@@ -309,11 +309,11 @@ public class ApiTestProxyRequest {
- [ ] **Step 6: 提交** - [ ] **Step 6: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/request/ApiEndpointListRequest.java git add server/src/main/java/com/emotion/dto/request/ApiEndpointListRequest.java
git add backend-single/src/main/java/com/emotion/dto/response/ApiEndpointItemResponse.java git add server/src/main/java/com/emotion/dto/response/ApiEndpointItemResponse.java
git add backend-single/src/main/java/com/emotion/dto/response/ApiEndpointDetailResponse.java git add server/src/main/java/com/emotion/dto/response/ApiEndpointDetailResponse.java
git add backend-single/src/main/java/com/emotion/dto/response/ApiParamItemResponse.java git add server/src/main/java/com/emotion/dto/response/ApiParamItemResponse.java
git add backend-single/src/main/java/com/emotion/dto/request/ApiTestProxyRequest.java git add server/src/main/java/com/emotion/dto/request/ApiTestProxyRequest.java
git commit -m "feat: 添加接口管理DTO" git commit -m "feat: 添加接口管理DTO"
``` ```
@@ -322,8 +322,8 @@ git commit -m "feat: 添加接口管理DTO"
### Task 3: Service 层 — 核心解析与同步逻辑 ### Task 3: Service 层 — 核心解析与同步逻辑
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/ApiEndpointService.java` - Create: `server/src/main/java/com/emotion/service/ApiEndpointService.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/ApiEndpointServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/ApiEndpointServiceImpl.java`
- [ ] **Step 1: 创建 Service 接口** - [ ] **Step 1: 创建 Service 接口**
@@ -676,8 +676,8 @@ public class ApiEndpointServiceImpl implements ApiEndpointService {
- [ ] **Step 3: 提交** - [ ] **Step 3: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/ApiEndpointService.java git add server/src/main/java/com/emotion/service/ApiEndpointService.java
git add backend-single/src/main/java/com/emotion/service/impl/ApiEndpointServiceImpl.java git add server/src/main/java/com/emotion/service/impl/ApiEndpointServiceImpl.java
git commit -m "feat: 添加接口端点Service层" git commit -m "feat: 添加接口端点Service层"
``` ```
@@ -686,7 +686,7 @@ git commit -m "feat: 添加接口端点Service层"
### Task 4: ApplicationRunner — 启动自动同步 ### Task 4: ApplicationRunner — 启动自动同步
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/ApiEndpointSyncRunner.java` - Create: `server/src/main/java/com/emotion/service/ApiEndpointSyncRunner.java`
- [ ] **Step 1: 创建 SyncRunner** - [ ] **Step 1: 创建 SyncRunner**
@@ -729,7 +729,7 @@ public class ApiEndpointSyncRunner implements ApplicationRunner {
- [ ] **Step 2: 提交** - [ ] **Step 2: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/ApiEndpointSyncRunner.java git add server/src/main/java/com/emotion/service/ApiEndpointSyncRunner.java
git commit -m "feat: 添加启动自动同步接口数据" git commit -m "feat: 添加启动自动同步接口数据"
``` ```
@@ -738,7 +738,7 @@ git commit -m "feat: 添加启动自动同步接口数据"
### Task 5: Controller 层 — 分页查询 + 详情 + 手动同步 ### Task 5: Controller 层 — 分页查询 + 详情 + 手动同步
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/controller/ApiEndpointController.java` - Create: `server/src/main/java/com/emotion/controller/ApiEndpointController.java`
- [ ] **Step 1: 创建 Controller** - [ ] **Step 1: 创建 Controller**
@@ -815,7 +815,7 @@ public class ApiEndpointController {
- [ ] **Step 2: 提交** - [ ] **Step 2: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/ApiEndpointController.java git add server/src/main/java/com/emotion/controller/ApiEndpointController.java
git commit -m "feat: 添加接口管理Controller" git commit -m "feat: 添加接口管理Controller"
``` ```
@@ -824,8 +824,8 @@ git commit -m "feat: 添加接口管理Controller"
### Task 6: Controller 层 — 代理测试接口 ### Task 6: Controller 层 — 代理测试接口
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/controller/ApiTestProxyController.java` - Create: `server/src/main/java/com/emotion/controller/ApiTestProxyController.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/ApiTestProxyResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/ApiTestProxyResponse.java`
- [ ] **Step 1: 创建 ApiTestProxyResponse** - [ ] **Step 1: 创建 ApiTestProxyResponse**
@@ -990,8 +990,8 @@ public class ApiTestProxyController {
- [ ] **Step 3: 提交** - [ ] **Step 3: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/ApiTestProxyController.java git add server/src/main/java/com/emotion/controller/ApiTestProxyController.java
git add backend-single/src/main/java/com/emotion/dto/response/ApiTestProxyResponse.java git add server/src/main/java/com/emotion/dto/response/ApiTestProxyResponse.java
git commit -m "feat: 添加接口代理测试Controller" git commit -m "feat: 添加接口代理测试Controller"
``` ```
@@ -1002,8 +1002,8 @@ git commit -m "feat: 添加接口代理测试Controller"
- [ ] **Step 1: 编译验证** - [ ] **Step 1: 编译验证**
```bash ```bash
cd backend-single cd server
mvn clean install -pl :backend-single -am -DskipTests mvn clean install -pl :server -am -DskipTests
``` ```
预期:BUILD SUCCESS 预期:BUILD SUCCESS
@@ -15,28 +15,28 @@
### 后端改动文件(按批次) ### 后端改动文件(按批次)
**Batch 1 (P0):** **Batch 1 (P0):**
- `backend-single/src/main/java/com/emotion/controller/AdminAuthController.java` — 已有 @Operation,补全 @Parameter - `server/src/main/java/com/emotion/controller/AdminAuthController.java` — 已有 @Operation,补全 @Parameter
- `backend-single/src/main/java/com/emotion/controller/AuthController.java` — 补全缺少的 @Operation,补全 @Parameter - `server/src/main/java/com/emotion/controller/AuthController.java` — 补全缺少的 @Operation,补全 @Parameter
- `backend-single/src/main/java/com/emotion/controller/AdminController.java` — 已有 @Tag/@Operation,补全 @Parameter - `server/src/main/java/com/emotion/controller/AdminController.java` — 已有 @Tag/@Operation,补全 @Parameter
- `backend-single/src/main/java/com/emotion/controller/TokenController.java` — 已有 @Operation,检查完整度 - `server/src/main/java/com/emotion/controller/TokenController.java` — 已有 @Operation,检查完整度
- `backend-single/src/main/java/com/emotion/controller/AdminAnalyticsController.java` — 新增 @Tag/@Operation - `server/src/main/java/com/emotion/controller/AdminAnalyticsController.java` — 新增 @Tag/@Operation
- `backend-single/src/main/java/com/emotion/controller/UserController.java` — 新增 @Tag/@Operation - `server/src/main/java/com/emotion/controller/UserController.java` — 新增 @Tag/@Operation
- `backend-single/src/main/java/com/emotion/controller/UserProfileController.java` — 新增 @Tag/@Operation - `server/src/main/java/com/emotion/controller/UserProfileController.java` — 新增 @Tag/@Operation
- `backend-single/src/main/java/com/emotion/dto/request/AdminLoginRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/AdminLoginRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/AdminCreateRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/AdminCreateRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/AdminUpdateRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/AdminUpdateRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/AdminPageRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/AdminPageRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/AdminChangePasswordRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/AdminChangePasswordRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/AdminResetPasswordRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/AdminResetPasswordRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/RefreshTokenRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/RefreshTokenRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/ResetPasswordRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/ResetPasswordRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/RegisterRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/RegisterRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/LoginRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/LoginRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/UserCreateRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/UserCreateRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/UserUpdateRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/UserUpdateRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/UserPageRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/UserPageRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/UserProfileUpdateRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/UserProfileUpdateRequest.java` — 补全 @Schema
- `backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java` — 补全 @Schema - `server/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java` — 补全 @Schema
### 前端改动文件 ### 前端改动文件
@@ -48,8 +48,8 @@
## Task 1: 后端 Batch 1 - AdminAuth + Auth Controller 注解补全 ## Task 1: 后端 Batch 1 - AdminAuth + Auth Controller 注解补全
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AdminAuthController.java` - Modify: `server/src/main/java/com/emotion/controller/AdminAuthController.java`
- Modify: `backend-single/src/main/java/com/emotion/controller/AuthController.java` - Modify: `server/src/main/java/com/emotion/controller/AuthController.java`
- [ ] **Step 1: 查看 AdminAuthController 已有注解** - [ ] **Step 1: 查看 AdminAuthController 已有注解**
@@ -85,7 +85,7 @@ AuthController 已有 @Tag。需要补全以下方法的 @Operation:
- [ ] **Step 3: 为 AuthController 缺少的方法补全注解** - [ ] **Step 3: 为 AuthController 缺少的方法补全注解**
修改 `backend-single/src/main/java/com/emotion/controller/AuthController.java` 修改 `server/src/main/java/com/emotion/controller/AuthController.java`
为以下方法添加 @Operation(在方法上方的空白行插入): 为以下方法添加 @Operation(在方法上方的空白行插入):
@@ -133,7 +133,7 @@ AdminAuthController 的 6 个方法全部有 @Operation,无需修改。
- [ ] **Step 5: 提交** - [ ] **Step 5: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AuthController.java git add server/src/main/java/com/emotion/controller/AuthController.java
git commit -m "feat: 补全 AuthController 缺失的 @Operation 和 @Parameter 注解" git commit -m "feat: 补全 AuthController 缺失的 @Operation 和 @Parameter 注解"
``` ```
@@ -142,16 +142,16 @@ git commit -m "feat: 补全 AuthController 缺失的 @Operation 和 @Parameter
## Task 2: 后端 Batch 1 - Admin + Token Controller 注解补全 ## Task 2: 后端 Batch 1 - Admin + Token Controller 注解补全
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AdminController.java` - Modify: `server/src/main/java/com/emotion/controller/AdminController.java`
- Modify: `backend-single/src/main/java/com/emotion/controller/TokenController.java` - Modify: `server/src/main/java/com/emotion/controller/TokenController.java`
- Modify: `backend-single/src/main/java/com/emotion/controller/AdminAnalyticsController.java` - Modify: `server/src/main/java/com/emotion/controller/AdminAnalyticsController.java`
- Modify: `backend-single/src/main/java/com/emotion/controller/UserController.java` - Modify: `server/src/main/java/com/emotion/controller/UserController.java`
- Modify: `backend-single/src/main/java/com/emotion/controller/UserProfileController.java` - Modify: `server/src/main/java/com/emotion/controller/UserProfileController.java`
- [ ] **Step 1: 读取 AdminController** - [ ] **Step 1: 读取 AdminController**
```bash ```bash
cat backend-single/src/main/java/com/emotion/controller/AdminController.java cat server/src/main/java/com/emotion/controller/AdminController.java
``` ```
检查每个方法的 @Operation 是否有 @Parameter,为路径参数和查询参数补全 @Parameter 注解。 检查每个方法的 @Operation 是否有 @Parameter,为路径参数和查询参数补全 @Parameter 注解。
@@ -159,7 +159,7 @@ cat backend-single/src/main/java/com/emotion/controller/AdminController.java
- [ ] **Step 2: 读取 TokenController** - [ ] **Step 2: 读取 TokenController**
```bash ```bash
cat backend-single/src/main/java/com/emotion/controller/TokenController.java cat server/src/main/java/com/emotion/controller/TokenController.java
``` ```
已有 3 个 @Operation,检查是否缺少 @Parameter,补全。 已有 3 个 @Operation,检查是否缺少 @Parameter,补全。
@@ -194,11 +194,11 @@ public Result<AnalyticsOverviewResponse> overview(@Validated AnalyticsQueryReque
- [ ] **Step 6: 提交** - [ ] **Step 6: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AdminController.java git add server/src/main/java/com/emotion/controller/AdminController.java
git add backend-single/src/main/java/com/emotion/controller/TokenController.java git add server/src/main/java/com/emotion/controller/TokenController.java
git add backend-single/src/main/java/com/emotion/controller/AdminAnalyticsController.java git add server/src/main/java/com/emotion/controller/AdminAnalyticsController.java
git add backend-single/src/main/java/com/emotion/controller/UserController.java git add server/src/main/java/com/emotion/controller/UserController.java
git add backend-single/src/main/java/com/emotion/controller/UserProfileController.java git add server/src/main/java/com/emotion/controller/UserProfileController.java
git commit -m "feat: 为 Admin/Token/AdminAnalytics/User/UserProfile Controller 补全 OpenAPI 注解" git commit -m "feat: 为 Admin/Token/AdminAnalytics/User/UserProfile Controller 补全 OpenAPI 注解"
``` ```
@@ -257,21 +257,21 @@ import io.swagger.v3.oas.annotations.media.Schema;
- [ ] **Step 3: 提交** - [ ] **Step 3: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/request/LoginRequest.java git add server/src/main/java/com/emotion/dto/request/LoginRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/RegisterRequest.java git add server/src/main/java/com/emotion/dto/request/RegisterRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/ResetPasswordRequest.java git add server/src/main/java/com/emotion/dto/request/ResetPasswordRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/RefreshTokenRequest.java git add server/src/main/java/com/emotion/dto/request/RefreshTokenRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/AdminLoginRequest.java git add server/src/main/java/com/emotion/dto/request/AdminLoginRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/AdminCreateRequest.java git add server/src/main/java/com/emotion/dto/request/AdminCreateRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/AdminUpdateRequest.java git add server/src/main/java/com/emotion/dto/request/AdminUpdateRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/AdminPageRequest.java git add server/src/main/java/com/emotion/dto/request/AdminPageRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/AdminChangePasswordRequest.java git add server/src/main/java/com/emotion/dto/request/AdminChangePasswordRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/AdminResetPasswordRequest.java git add server/src/main/java/com/emotion/dto/request/AdminResetPasswordRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/UserCreateRequest.java git add server/src/main/java/com/emotion/dto/request/UserCreateRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/UserUpdateRequest.java git add server/src/main/java/com/emotion/dto/request/UserUpdateRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/UserPageRequest.java git add server/src/main/java/com/emotion/dto/request/UserPageRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/UserProfileUpdateRequest.java git add server/src/main/java/com/emotion/dto/request/UserProfileUpdateRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java git add server/src/main/java/com/emotion/dto/request/analytics/AnalyticsQueryRequest.java
git commit -m "feat: 为 Batch 1 请求 DTO 补全 @Schema 中文描述注解" git commit -m "feat: 为 Batch 1 请求 DTO 补全 @Schema 中文描述注解"
``` ```
@@ -665,7 +665,7 @@ git commit -m "feat: 测试面板增加请求头展示区域"
- [ ] **Step 1: 本地构建后端** - [ ] **Step 1: 本地构建后端**
```bash ```bash
cd backend-single cd server
mvn clean install -DskipTests mvn clean install -DskipTests
``` ```
@@ -19,10 +19,10 @@
| `web-admin/src/components/JsonViewer.vue` | 创建 | 通用 JSON 格式化高亮 + 复制组件 | | `web-admin/src/components/JsonViewer.vue` | 创建 | 通用 JSON 格式化高亮 + 复制组件 |
| `web-admin/src/views/aiconfig/components/AiCallLogDetailDialog.vue` | 创建 | 调用日志详情弹窗 | | `web-admin/src/views/aiconfig/components/AiCallLogDetailDialog.vue` | 创建 | 调用日志详情弹窗 |
| `web-admin/src/views/aiconfig/AiRoutingList.vue` | 修改 | 调用日志 Tab 增加筛选栏、展开行、分页 | | `web-admin/src/views/aiconfig/AiRoutingList.vue` | 修改 | 调用日志 Tab 增加筛选栏、展开行、分页 |
| `backend-single/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java` | 创建 | 日志查询请求 DTO | | `server/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java` | 创建 | 日志查询请求 DTO |
| `backend-single/src/main/java/com/emotion/service/AiCallLogService.java` | 修改 | 新增 `query` 方法签名 | | `server/src/main/java/com/emotion/service/AiCallLogService.java` | 修改 | 新增 `query` 方法签名 |
| `backend-single/src/main/java/com/emotion/service/impl/AiCallLogServiceImpl.java` | 修改 | 实现 `query` 分页查询 | | `server/src/main/java/com/emotion/service/impl/AiCallLogServiceImpl.java` | 修改 | 实现 `query` 分页查询 |
| `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` | 修改 | 新增 POST /call-logs 接口 | | `server/src/main/java/com/emotion/controller/AiRoutingController.java` | 修改 | 新增 POST /call-logs 接口 |
--- ---
@@ -428,18 +428,18 @@ git commit -m "feat: 新增 AI 调用日志详情弹窗组件"
## Task 5: 后端 AiCallLogQueryRequest DTO ## Task 5: 后端 AiCallLogQueryRequest DTO
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java`
- [ ] **Step 1: 确认 dto/request/ai 目录存在** - [ ] **Step 1: 确认 dto/request/ai 目录存在**
```bash ```bash
ls backend-single/src/main/java/com/emotion/dto/request/ai/ ls server/src/main/java/com/emotion/dto/request/ai/
``` ```
如果不存在则创建: 如果不存在则创建:
```bash ```bash
mkdir -p backend-single/src/main/java/com/emotion/dto/request/ai mkdir -p server/src/main/java/com/emotion/dto/request/ai
``` ```
- [ ] **Step 2: 创建 AiCallLogQueryRequest.java** - [ ] **Step 2: 创建 AiCallLogQueryRequest.java**
@@ -498,7 +498,7 @@ public class AiCallLogQueryRequest {
- [ ] **Step 3: Commit** - [ ] **Step 3: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java git add server/src/main/java/com/emotion/dto/request/ai/AiCallLogQueryRequest.java
git commit -m "feat: 新增 AI 调用日志查询请求 DTO" git commit -m "feat: 新增 AI 调用日志查询请求 DTO"
``` ```
@@ -507,8 +507,8 @@ git commit -m "feat: 新增 AI 调用日志查询请求 DTO"
## Task 6: 后端 Service 接口和实现 ## Task 6: 后端 Service 接口和实现
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/AiCallLogService.java` - Modify: `server/src/main/java/com/emotion/service/AiCallLogService.java`
- Modify: `backend-single/src/main/java/com/emotion/service/impl/AiCallLogServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/AiCallLogServiceImpl.java`
- [ ] **Step 1: 在 AiCallLogService 接口中新增 query 方法** - [ ] **Step 1: 在 AiCallLogService 接口中新增 query 方法**
@@ -562,8 +562,8 @@ public PageResult<AiCallLog> query(AiCallLogQueryRequest request) {
- [ ] **Step 3: Commit** - [ ] **Step 3: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/AiCallLogService.java git add server/src/main/java/com/emotion/service/AiCallLogService.java
git add backend-single/src/main/java/com/emotion/service/impl/AiCallLogServiceImpl.java git add server/src/main/java/com/emotion/service/impl/AiCallLogServiceImpl.java
git commit -m "feat: AI 调用日志 Service 增加分页查询方法" git commit -m "feat: AI 调用日志 Service 增加分页查询方法"
``` ```
@@ -572,7 +572,7 @@ git commit -m "feat: AI 调用日志 Service 增加分页查询方法"
## Task 7: 后端 Controller 新增 POST 接口 ## Task 7: 后端 Controller 新增 POST 接口
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AiRoutingController.java` - Modify: `server/src/main/java/com/emotion/controller/AiRoutingController.java`
- [ ] **Step 1: 在 AiRoutingController 中导入新类型** - [ ] **Step 1: 在 AiRoutingController 中导入新类型**
@@ -599,7 +599,7 @@ public Result<PageResult<AiCallLog>> queryCallLogs(@RequestBody @Valid AiCallLog
- [ ] **Step 3: Commit** - [ ] **Step 3: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AiRoutingController.java git add server/src/main/java/com/emotion/controller/AiRoutingController.java
git commit -m "feat: Controller 新增 AI 调用日志分页查询接口" git commit -m "feat: Controller 新增 AI 调用日志分页查询接口"
``` ```
@@ -949,7 +949,7 @@ git commit -m "feat: 调用日志 Tab 增加筛选栏、展开行、分页和详
- [ ] **Step 1: 编译后端** - [ ] **Step 1: 编译后端**
```bash ```bash
cd backend-single cd server
mvn clean install -DskipTests mvn clean install -DskipTests
``` ```
@@ -970,7 +970,7 @@ Expected: BUILD SUCCESS
- [ ] **Step 1: 启动后端** - [ ] **Step 1: 启动后端**
```bash ```bash
cd backend-single cd server
mvn spring-boot:run mvn spring-boot:run
``` ```
@@ -16,10 +16,10 @@
| 操作 | 文件 | 说明 | | 操作 | 文件 | 说明 |
|------|------|------| |------|------|------|
| Modify | `backend-single/src/main/java/com/emotion/entity/AiCallLog.java` | 实体新增 `userName` 字段 | | Modify | `server/src/main/java/com/emotion/entity/AiCallLog.java` | 实体新增 `userName` 字段 |
| Create | `backend-single/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql` | 数据库迁移脚本 | | Create | `server/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql` | 数据库迁移脚本 |
| Modify | `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java:68-73` | invokeStream 写入 userName | | Modify | `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java:68-73` | invokeStream 写入 userName |
| Modify | `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java:219-225` | invokeEndpointStream 写入 userName | | Modify | `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java:219-225` | invokeEndpointStream 写入 userName |
| Modify | `web-admin/src/types/aiconfig.ts` | AiCallLog 接口新增 userName | | Modify | `web-admin/src/types/aiconfig.ts` | AiCallLog 接口新增 userName |
| Modify | `web-admin/src/views/aiconfig/AiRoutingList.vue` | 列表新增"调用用户"列 + userDisplay 函数 | | Modify | `web-admin/src/views/aiconfig/AiRoutingList.vue` | 列表新增"调用用户"列 + userDisplay 函数 |
| Modify | `web-admin/src/views/aiconfig/components/AiCallLogDetailDialog.vue` | 详情弹窗"用户 ID"改为"调用用户" | | Modify | `web-admin/src/views/aiconfig/components/AiCallLogDetailDialog.vue` | 详情弹窗"用户 ID"改为"调用用户" |
@@ -29,9 +29,9 @@
### Task 1: 后端实体 + 数据库迁移 ### Task 1: 后端实体 + 数据库迁移
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/entity/AiCallLog.java:29-31` - Modify: `server/src/main/java/com/emotion/entity/AiCallLog.java:29-31`
- Create: `backend-single/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql` - Create: `server/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql`
- Test: `backend-single/` 目录下执行编译验证 - Test: `server/` 目录下执行编译验证
- [ ] **Step 1: 在 AiCallLog 实体中新增 userName 字段** - [ ] **Step 1: 在 AiCallLog 实体中新增 userName 字段**
@@ -46,7 +46,7 @@ private String userName;
- [ ] **Step 2: 创建数据库迁移脚本** - [ ] **Step 2: 创建数据库迁移脚本**
创建 `backend-single/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql`: 创建 `server/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql`:
```sql ```sql
-- 调用日志表新增 user_name 字段 -- 调用日志表新增 user_name 字段
@@ -56,7 +56,7 @@ ALTER TABLE t_ai_call_log ADD COLUMN user_name VARCHAR(100) DEFAULT NULL COMMENT
- [ ] **Step 3: 编译验证后端代码** - [ ] **Step 3: 编译验证后端代码**
```bash ```bash
cd backend-single cd server
mvn clean compile -DskipTests mvn clean compile -DskipTests
``` ```
@@ -65,8 +65,8 @@ mvn clean compile -DskipTests
- [ ] **Step 4: 提交** - [ ] **Step 4: 提交**
```bash ```bash
git add backend-single/src/main/java/com/emotion/entity/AiCallLog.java git add server/src/main/java/com/emotion/entity/AiCallLog.java
git add backend-single/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql git add server/src/main/resources/db/migration/V20260525__add_user_name_to_ai_call_log.sql
git commit -m "feat: 调用日志实体新增 userName 字段及数据库迁移脚本" git commit -m "feat: 调用日志实体新增 userName 字段及数据库迁移脚本"
``` ```
@@ -75,8 +75,8 @@ git commit -m "feat: 调用日志实体新增 userName 字段及数据库迁移
### Task 2: 后端日志保存逻辑写入 userName ### Task 2: 后端日志保存逻辑写入 userName
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java`
- Test: `backend-single/src/test/java/com/emotion/service/AiRuntimeServiceImplTest.java` - Test: `server/src/test/java/com/emotion/service/AiRuntimeServiceImplTest.java`
- [ ] **Step 1: 在 invokeStream 方法中写入 userName** - [ ] **Step 1: 在 invokeStream 方法中写入 userName**
@@ -123,7 +123,7 @@ callLog.setUserName(request.getUserName());
- [ ] **Step 3: 更新单元测试,验证 userName 被正确写入** - [ ] **Step 3: 更新单元测试,验证 userName 被正确写入**
修改 `backend-single/src/test/java/com/emotion/service/AiRuntimeServiceImplTest.java`,在 `invokeStreamRecoversWhenOutputExists` 测试中: 修改 `server/src/test/java/com/emotion/service/AiRuntimeServiceImplTest.java`,在 `invokeStreamRecoversWhenOutputExists` 测试中:
在已有的 `request.setRequestId("client-request-1");` 之后添加 `request.setUserName("测试用户");`,然后在断言部分新增 userName 的验证: 在已有的 `request.setRequestId("client-request-1");` 之后添加 `request.setUserName("测试用户");`,然后在断言部分新增 userName 的验证:
@@ -138,7 +138,7 @@ assertEquals("测试用户", savedLog.getUserName());
- [ ] **Step 4: 运行测试验证** - [ ] **Step 4: 运行测试验证**
```bash ```bash
cd backend-single cd server
mvn test -Dtest=AiRuntimeServiceImplTest mvn test -Dtest=AiRuntimeServiceImplTest
``` ```
@@ -147,13 +147,13 @@ mvn test -Dtest=AiRuntimeServiceImplTest
- [ ] **Step 5: 编译验证 + 提交** - [ ] **Step 5: 编译验证 + 提交**
```bash ```bash
cd backend-single cd server
mvn clean compile -DskipTests mvn clean compile -DskipTests
``` ```
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java git add server/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java
git add backend-single/src/test/java/com/emotion/service/AiRuntimeServiceImplTest.java git add server/src/test/java/com/emotion/service/AiRuntimeServiceImplTest.java
git commit -m "feat: 日志保存时写入 userName 字段" git commit -m "feat: 日志保存时写入 userName 字段"
``` ```
@@ -16,28 +16,28 @@
| Action | File | Responsibility | | Action | File | Responsibility |
| --- | --- | --- | | --- | --- | --- |
| Create | `backend-single/src/main/java/com/emotion/config/WechatMiniProgramProperties.java` | Binds WeChat mini program appid, secret, and API base URL from application config. | | Create | `server/src/main/java/com/emotion/config/WechatMiniProgramProperties.java` | Binds WeChat mini program appid, secret, and API base URL from application config. |
| Create | `backend-single/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql` | Prevents duplicate non-null WeChat third-party identities. | | Create | `server/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql` | Prevents duplicate non-null WeChat third-party identities. |
| Modify | `backend-single/src/main/resources/application.yml` | Adds default WeChat config keys and public login endpoint allowlist. | | Modify | `server/src/main/resources/application.yml` | Adds default WeChat config keys and public login endpoint allowlist. |
| Modify | `backend-single/src/main/java/com/emotion/config/WebMvcConfig.java` | Excludes `/auth/wechat/login` from JWT interception. | | Modify | `server/src/main/java/com/emotion/config/WebMvcConfig.java` | Excludes `/auth/wechat/login` from JWT interception. |
| Modify | `backend-single/src/main/java/com/emotion/interceptor/JwtAuthInterceptor.java` | Excludes `/api/auth/wechat/login` from the interceptor's internal public endpoint list. | | Modify | `server/src/main/java/com/emotion/interceptor/JwtAuthInterceptor.java` | Excludes `/api/auth/wechat/login` from the interceptor's internal public endpoint list. |
| Create | `backend-single/src/main/java/com/emotion/dto/request/WechatLoginRequest.java` | Request body for WeChat openid login. | | Create | `server/src/main/java/com/emotion/dto/request/WechatLoginRequest.java` | Request body for WeChat openid login. |
| Create | `backend-single/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java` | Request body for WeChat phone binding. | | Create | `server/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java` | Request body for WeChat phone binding. |
| Create | `backend-single/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java` | Internal DTO for WeChat `code2Session` response. | | Create | `server/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java` | Internal DTO for WeChat `code2Session` response. |
| Create | `backend-single/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java` | Internal DTO for WeChat access token response. | | Create | `server/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java` | Internal DTO for WeChat access token response. |
| Create | `backend-single/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java` | Internal DTO for WeChat phone number response. | | Create | `server/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java` | Internal DTO for WeChat phone number response. |
| Create | `backend-single/src/main/java/com/emotion/service/WechatMiniProgramService.java` | Interface for WeChat API calls. | | Create | `server/src/main/java/com/emotion/service/WechatMiniProgramService.java` | Interface for WeChat API calls. |
| Create | `backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` | RestTemplate-backed WeChat client with Redis token caching. | | Create | `server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` | RestTemplate-backed WeChat client with Redis token caching. |
| Create | `backend-single/src/main/java/com/emotion/service/UserIdentityMergeService.java` | Defines temporary WeChat user to phone user data transfer. | | Create | `server/src/main/java/com/emotion/service/UserIdentityMergeService.java` | Defines temporary WeChat user to phone user data transfer. |
| Create | `backend-single/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java` | Transfers user-owned rows and avoids singleton row conflicts. | | Create | `server/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java` | Transfers user-owned rows and avoids singleton row conflicts. |
| Modify | `backend-single/src/main/java/com/emotion/dto/response/UserInfoResponse.java` | Adds non-sensitive `wechatBound` flag for frontend display logic. | | Modify | `server/src/main/java/com/emotion/dto/response/UserInfoResponse.java` | Adds non-sensitive `wechatBound` flag for frontend display logic. |
| Modify | `backend-single/src/main/java/com/emotion/service/UserService.java` | Adds third-party identity lookup helper. | | Modify | `server/src/main/java/com/emotion/service/UserService.java` | Adds third-party identity lookup helper. |
| Modify | `backend-single/src/main/java/com/emotion/service/impl/UserServiceImpl.java` | Implements third-party identity lookup. | | Modify | `server/src/main/java/com/emotion/service/impl/UserServiceImpl.java` | Implements third-party identity lookup. |
| Modify | `backend-single/src/main/java/com/emotion/service/AuthService.java` | Adds WeChat login and phone binding operations. | | Modify | `server/src/main/java/com/emotion/service/AuthService.java` | Adds WeChat login and phone binding operations. |
| Modify | `backend-single/src/main/java/com/emotion/service/impl/AuthServiceImpl.java` | Implements openid login, phone identity merge/bind, and token issuing reuse. | | Modify | `server/src/main/java/com/emotion/service/impl/AuthServiceImpl.java` | Implements openid login, phone identity merge/bind, and token issuing reuse. |
| Modify | `backend-single/src/main/java/com/emotion/controller/AuthController.java` | Adds `/auth/wechat/login` and `/auth/wechat/phone`. | | Modify | `server/src/main/java/com/emotion/controller/AuthController.java` | Adds `/auth/wechat/login` and `/auth/wechat/phone`. |
| Test | `backend-single/src/test/java/com/emotion/controller/AuthControllerTest.java` | Verifies controller contract. | | Test | `server/src/test/java/com/emotion/controller/AuthControllerTest.java` | Verifies controller contract. |
| Test | `backend-single/src/test/java/com/emotion/service/AuthServiceWechatTest.java` | Verifies identity matching and binding behavior. | | Test | `server/src/test/java/com/emotion/service/AuthServiceWechatTest.java` | Verifies identity matching and binding behavior. |
| Modify | `mini-program/src/services/auth.js` | Adds `wechatLogin` and `bindWechatPhone`. | | Modify | `mini-program/src/services/auth.js` | Adds `wechatLogin` and `bindWechatPhone`. |
| Modify | `mini-program/src/stores/app.js` | Adds store methods and tracks returned auth user info. | | Modify | `mini-program/src/stores/app.js` | Adds store methods and tracks returned auth user info. |
| Modify | `mini-program/src/pages/login/index.vue` | Adds WeChat primary login while keeping phone/SMS form. | | Modify | `mini-program/src/pages/login/index.vue` | Adds WeChat primary login while keeping phone/SMS form. |
@@ -48,20 +48,20 @@
### Task 1: Backend WeChat Configuration And DTOs ### Task 1: Backend WeChat Configuration And DTOs
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/config/WechatMiniProgramProperties.java` - Create: `server/src/main/java/com/emotion/config/WechatMiniProgramProperties.java`
- Create: `backend-single/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql` - Create: `server/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql`
- Create: `backend-single/src/main/java/com/emotion/dto/request/WechatLoginRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/WechatLoginRequest.java`
- Create: `backend-single/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java`
- Create: `backend-single/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java` - Create: `server/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java`
- Create: `backend-single/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java` - Create: `server/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java`
- Create: `backend-single/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java` - Create: `server/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/response/UserInfoResponse.java` - Modify: `server/src/main/java/com/emotion/dto/response/UserInfoResponse.java`
- Modify: `backend-single/src/main/resources/application.yml` - Modify: `server/src/main/resources/application.yml`
- Test: backend compile - Test: backend compile
- [ ] **Step 1: Create WeChat configuration properties** - [ ] **Step 1: Create WeChat configuration properties**
Create `backend-single/src/main/java/com/emotion/config/WechatMiniProgramProperties.java`: Create `server/src/main/java/com/emotion/config/WechatMiniProgramProperties.java`:
```java ```java
package com.emotion.config; package com.emotion.config;
@@ -82,7 +82,7 @@ public class WechatMiniProgramProperties {
- [ ] **Step 2: Create public request DTOs** - [ ] **Step 2: Create public request DTOs**
Create `backend-single/src/main/java/com/emotion/dto/request/WechatLoginRequest.java`: Create `server/src/main/java/com/emotion/dto/request/WechatLoginRequest.java`:
```java ```java
package com.emotion.dto.request; package com.emotion.dto.request;
@@ -102,7 +102,7 @@ public class WechatLoginRequest {
} }
``` ```
Create `backend-single/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java`: Create `server/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java`:
```java ```java
package com.emotion.dto.request; package com.emotion.dto.request;
@@ -120,7 +120,7 @@ public class WechatPhoneBindRequest {
- [ ] **Step 3: Create internal WeChat API response DTOs** - [ ] **Step 3: Create internal WeChat API response DTOs**
Create `backend-single/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java`: Create `server/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java`:
```java ```java
package com.emotion.dto.wechat; package com.emotion.dto.wechat;
@@ -147,7 +147,7 @@ public class WechatCodeSessionResponse {
} }
``` ```
Create `backend-single/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java`: Create `server/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java`:
```java ```java
package com.emotion.dto.wechat; package com.emotion.dto.wechat;
@@ -173,7 +173,7 @@ public class WechatAccessTokenResponse {
} }
``` ```
Create `backend-single/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java`: Create `server/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java`:
```java ```java
package com.emotion.dto.wechat; package com.emotion.dto.wechat;
@@ -213,7 +213,7 @@ public class WechatPhoneNumberResponse {
- [ ] **Step 4: Add WeChat config keys** - [ ] **Step 4: Add WeChat config keys**
In `backend-single/src/main/resources/application.yml`, under `emotion:`, add: In `server/src/main/resources/application.yml`, under `emotion:`, add:
```yaml ```yaml
wechat: wechat:
@@ -239,7 +239,7 @@ HAVING COUNT(*) > 1;
Expected: no rows. If rows exist, resolve duplicates before adding the index. Expected: no rows. If rows exist, resolve duplicates before adding the index.
Create `backend-single/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql`: Create `server/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql`:
```sql ```sql
ALTER TABLE t_user ALTER TABLE t_user
@@ -250,7 +250,7 @@ MySQL permits multiple `NULL` values in a unique index, so users without WeChat
- [ ] **Step 6: Add non-sensitive WeChat binding flag** - [ ] **Step 6: Add non-sensitive WeChat binding flag**
In `backend-single/src/main/java/com/emotion/dto/response/UserInfoResponse.java`, add: In `server/src/main/java/com/emotion/dto/response/UserInfoResponse.java`, add:
```java ```java
/** /**
@@ -264,7 +264,7 @@ private Boolean wechatBound;
Run: Run:
```bash ```bash
cd backend-single cd server
mvn -q -DskipTests compile mvn -q -DskipTests compile
``` ```
@@ -273,15 +273,15 @@ Expected: command exits with status `0`.
- [ ] **Step 8: Commit** - [ ] **Step 8: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/config/WechatMiniProgramProperties.java git add server/src/main/java/com/emotion/config/WechatMiniProgramProperties.java
git add backend-single/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql git add server/src/main/resources/db/migration/V20260531__add_unique_wechat_identity.sql
git add backend-single/src/main/java/com/emotion/dto/request/WechatLoginRequest.java git add server/src/main/java/com/emotion/dto/request/WechatLoginRequest.java
git add backend-single/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java git add server/src/main/java/com/emotion/dto/request/WechatPhoneBindRequest.java
git add backend-single/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java git add server/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java
git add backend-single/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java git add server/src/main/java/com/emotion/dto/wechat/WechatAccessTokenResponse.java
git add backend-single/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java git add server/src/main/java/com/emotion/dto/wechat/WechatPhoneNumberResponse.java
git add backend-single/src/main/java/com/emotion/dto/response/UserInfoResponse.java git add server/src/main/java/com/emotion/dto/response/UserInfoResponse.java
git add backend-single/src/main/resources/application.yml git add server/src/main/resources/application.yml
git commit -m "feat: add wechat mini program auth DTOs and config" git commit -m "feat: add wechat mini program auth DTOs and config"
``` ```
@@ -290,13 +290,13 @@ git commit -m "feat: add wechat mini program auth DTOs and config"
### Task 2: Backend WeChat API Client ### Task 2: Backend WeChat API Client
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/WechatMiniProgramService.java` - Create: `server/src/main/java/com/emotion/service/WechatMiniProgramService.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java`
- Test: `backend-single/src/test/java/com/emotion/service/WechatMiniProgramServiceImplTest.java` - Test: `server/src/test/java/com/emotion/service/WechatMiniProgramServiceImplTest.java`
- [ ] **Step 1: Create service interface** - [ ] **Step 1: Create service interface**
Create `backend-single/src/main/java/com/emotion/service/WechatMiniProgramService.java`: Create `server/src/main/java/com/emotion/service/WechatMiniProgramService.java`:
```java ```java
package com.emotion.service; package com.emotion.service;
@@ -313,7 +313,7 @@ public interface WechatMiniProgramService {
- [ ] **Step 2: Create RestTemplate implementation** - [ ] **Step 2: Create RestTemplate implementation**
Create `backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java`: Create `server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java`:
```java ```java
package com.emotion.service.impl; package com.emotion.service.impl;
@@ -434,7 +434,7 @@ public class WechatMiniProgramServiceImpl implements WechatMiniProgramService {
- [ ] **Step 3: Create focused unit tests for error behavior** - [ ] **Step 3: Create focused unit tests for error behavior**
Create `backend-single/src/test/java/com/emotion/service/WechatMiniProgramServiceImplTest.java`: Create `server/src/test/java/com/emotion/service/WechatMiniProgramServiceImplTest.java`:
```java ```java
package com.emotion.service; package com.emotion.service;
@@ -470,7 +470,7 @@ class WechatMiniProgramServiceImplTest {
- [ ] **Step 4: Run test** - [ ] **Step 4: Run test**
```bash ```bash
cd backend-single cd server
mvn -q -Dtest=WechatMiniProgramServiceImplTest test mvn -q -Dtest=WechatMiniProgramServiceImplTest test
``` ```
@@ -479,9 +479,9 @@ Expected: command exits with status `0`.
- [ ] **Step 5: Commit** - [ ] **Step 5: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/WechatMiniProgramService.java git add server/src/main/java/com/emotion/service/WechatMiniProgramService.java
git add backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java git add server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java
git add backend-single/src/test/java/com/emotion/service/WechatMiniProgramServiceImplTest.java git add server/src/test/java/com/emotion/service/WechatMiniProgramServiceImplTest.java
git commit -m "feat: add wechat mini program API client" git commit -m "feat: add wechat mini program API client"
``` ```
@@ -490,13 +490,13 @@ git commit -m "feat: add wechat mini program API client"
### Task 3: Backend User Identity Merge Service ### Task 3: Backend User Identity Merge Service
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/UserIdentityMergeService.java` - Create: `server/src/main/java/com/emotion/service/UserIdentityMergeService.java`
- Create: `backend-single/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java`
- Test: `backend-single/src/test/java/com/emotion/service/UserIdentityMergeServiceImplTest.java` - Test: `server/src/test/java/com/emotion/service/UserIdentityMergeServiceImplTest.java`
- [ ] **Step 1: Create merge service interface** - [ ] **Step 1: Create merge service interface**
Create `backend-single/src/main/java/com/emotion/service/UserIdentityMergeService.java`: Create `server/src/main/java/com/emotion/service/UserIdentityMergeService.java`:
```java ```java
package com.emotion.service; package com.emotion.service;
@@ -508,7 +508,7 @@ public interface UserIdentityMergeService {
- [ ] **Step 2: Create JdbcTemplate implementation** - [ ] **Step 2: Create JdbcTemplate implementation**
Create `backend-single/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java`: Create `server/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java`:
```java ```java
package com.emotion.service.impl; package com.emotion.service.impl;
@@ -592,7 +592,7 @@ public class UserIdentityMergeServiceImpl implements UserIdentityMergeService {
- [ ] **Step 3: Add merge service test** - [ ] **Step 3: Add merge service test**
Create `backend-single/src/test/java/com/emotion/service/UserIdentityMergeServiceImplTest.java`: Create `server/src/test/java/com/emotion/service/UserIdentityMergeServiceImplTest.java`:
```java ```java
package com.emotion.service; package com.emotion.service;
@@ -626,7 +626,7 @@ class UserIdentityMergeServiceImplTest {
- [ ] **Step 4: Run merge service test** - [ ] **Step 4: Run merge service test**
```bash ```bash
cd backend-single cd server
mvn -q -Dtest=UserIdentityMergeServiceImplTest test mvn -q -Dtest=UserIdentityMergeServiceImplTest test
``` ```
@@ -635,9 +635,9 @@ Expected: command exits with status `0`.
- [ ] **Step 5: Commit** - [ ] **Step 5: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/UserIdentityMergeService.java git add server/src/main/java/com/emotion/service/UserIdentityMergeService.java
git add backend-single/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java git add server/src/main/java/com/emotion/service/impl/UserIdentityMergeServiceImpl.java
git add backend-single/src/test/java/com/emotion/service/UserIdentityMergeServiceImplTest.java git add server/src/test/java/com/emotion/service/UserIdentityMergeServiceImplTest.java
git commit -m "feat: add wechat user identity merge service" git commit -m "feat: add wechat user identity merge service"
``` ```
@@ -646,22 +646,22 @@ git commit -m "feat: add wechat user identity merge service"
### Task 4: Backend User Lookup And Auth Service Methods ### Task 4: Backend User Lookup And Auth Service Methods
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/UserService.java` - Modify: `server/src/main/java/com/emotion/service/UserService.java`
- Modify: `backend-single/src/main/java/com/emotion/service/impl/UserServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/UserServiceImpl.java`
- Modify: `backend-single/src/main/java/com/emotion/service/AuthService.java` - Modify: `server/src/main/java/com/emotion/service/AuthService.java`
- Modify: `backend-single/src/main/java/com/emotion/service/impl/AuthServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/AuthServiceImpl.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/response/UserInfoResponse.java` - Modify: `server/src/main/java/com/emotion/dto/response/UserInfoResponse.java`
- Test: `backend-single/src/test/java/com/emotion/service/AuthServiceWechatTest.java` - Test: `server/src/test/java/com/emotion/service/AuthServiceWechatTest.java`
- [ ] **Step 1: Add third-party lookup to UserService** - [ ] **Step 1: Add third-party lookup to UserService**
In `backend-single/src/main/java/com/emotion/service/UserService.java`, add: In `server/src/main/java/com/emotion/service/UserService.java`, add:
```java ```java
User getByThirdParty(String thirdPartyType, String thirdPartyId); User getByThirdParty(String thirdPartyType, String thirdPartyId);
``` ```
In `backend-single/src/main/java/com/emotion/service/impl/UserServiceImpl.java`, add: In `server/src/main/java/com/emotion/service/impl/UserServiceImpl.java`, add:
```java ```java
@Override @Override
@@ -679,7 +679,7 @@ public User getByThirdParty(String thirdPartyType, String thirdPartyId) {
- [ ] **Step 2: Add AuthService methods** - [ ] **Step 2: Add AuthService methods**
In `backend-single/src/main/java/com/emotion/service/AuthService.java`, import the two request DTOs and add: In `server/src/main/java/com/emotion/service/AuthService.java`, import the two request DTOs and add:
```java ```java
AuthResponse wechatLogin(WechatLoginRequest request); AuthResponse wechatLogin(WechatLoginRequest request);
@@ -858,7 +858,7 @@ public AuthResponse bindWechatPhone(String currentUserId, WechatPhoneBindRequest
- [ ] **Step 8: Compile backend** - [ ] **Step 8: Compile backend**
```bash ```bash
cd backend-single cd server
mvn -q -DskipTests compile mvn -q -DskipTests compile
``` ```
@@ -866,7 +866,7 @@ Expected: command exits with status `0`.
- [ ] **Step 9: Add service tests for identity rules** - [ ] **Step 9: Add service tests for identity rules**
Create `backend-single/src/test/java/com/emotion/service/AuthServiceWechatTest.java`: Create `server/src/test/java/com/emotion/service/AuthServiceWechatTest.java`:
```java ```java
package com.emotion.service; package com.emotion.service;
@@ -1002,7 +1002,7 @@ class AuthServiceWechatTest {
- [ ] **Step 10: Run auth tests** - [ ] **Step 10: Run auth tests**
```bash ```bash
cd backend-single cd server
mvn -q -Dtest=AuthControllerTest,AuthServiceWechatTest,UserIdentityMergeServiceImplTest test mvn -q -Dtest=AuthControllerTest,AuthServiceWechatTest,UserIdentityMergeServiceImplTest test
``` ```
@@ -1011,12 +1011,12 @@ Expected: command exits with status `0`.
- [ ] **Step 11: Commit** - [ ] **Step 11: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/UserService.java git add server/src/main/java/com/emotion/service/UserService.java
git add backend-single/src/main/java/com/emotion/service/impl/UserServiceImpl.java git add server/src/main/java/com/emotion/service/impl/UserServiceImpl.java
git add backend-single/src/main/java/com/emotion/service/AuthService.java git add server/src/main/java/com/emotion/service/AuthService.java
git add backend-single/src/main/java/com/emotion/service/impl/AuthServiceImpl.java git add server/src/main/java/com/emotion/service/impl/AuthServiceImpl.java
git add backend-single/src/main/java/com/emotion/dto/response/UserInfoResponse.java git add server/src/main/java/com/emotion/dto/response/UserInfoResponse.java
git add backend-single/src/test/java/com/emotion/service/AuthServiceWechatTest.java git add server/src/test/java/com/emotion/service/AuthServiceWechatTest.java
git commit -m "feat: add wechat auth identity binding logic" git commit -m "feat: add wechat auth identity binding logic"
``` ```
@@ -1025,10 +1025,10 @@ git commit -m "feat: add wechat auth identity binding logic"
### Task 5: Backend Auth Controller And Security Allowlist ### Task 5: Backend Auth Controller And Security Allowlist
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AuthController.java` - Modify: `server/src/main/java/com/emotion/controller/AuthController.java`
- Modify: `backend-single/src/main/java/com/emotion/config/WebMvcConfig.java` - Modify: `server/src/main/java/com/emotion/config/WebMvcConfig.java`
- Modify: `backend-single/src/main/java/com/emotion/interceptor/JwtAuthInterceptor.java` - Modify: `server/src/main/java/com/emotion/interceptor/JwtAuthInterceptor.java`
- Test: `backend-single/src/test/java/com/emotion/controller/AuthControllerTest.java` - Test: `server/src/test/java/com/emotion/controller/AuthControllerTest.java`
- [ ] **Step 1: Add controller endpoints** - [ ] **Step 1: Add controller endpoints**
@@ -1126,7 +1126,7 @@ public void testWechatPhoneBind() throws Exception {
- [ ] **Step 5: Run controller tests** - [ ] **Step 5: Run controller tests**
```bash ```bash
cd backend-single cd server
mvn -q -Dtest=AuthControllerTest test mvn -q -Dtest=AuthControllerTest test
``` ```
@@ -1135,10 +1135,10 @@ Expected: command exits with status `0`.
- [ ] **Step 6: Commit** - [ ] **Step 6: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AuthController.java git add server/src/main/java/com/emotion/controller/AuthController.java
git add backend-single/src/main/java/com/emotion/config/WebMvcConfig.java git add server/src/main/java/com/emotion/config/WebMvcConfig.java
git add backend-single/src/main/java/com/emotion/interceptor/JwtAuthInterceptor.java git add server/src/main/java/com/emotion/interceptor/JwtAuthInterceptor.java
git add backend-single/src/test/java/com/emotion/controller/AuthControllerTest.java git add server/src/test/java/com/emotion/controller/AuthControllerTest.java
git commit -m "feat: expose wechat auth endpoints" git commit -m "feat: expose wechat auth endpoints"
``` ```
@@ -1596,7 +1596,7 @@ git commit -m "feat: add wechat phone binding entry"
- [ ] **Step 1: Run backend auth tests** - [ ] **Step 1: Run backend auth tests**
```bash ```bash
cd backend-single cd server
mvn -q -Dtest=AuthControllerTest,AuthServiceWechatTest,WechatMiniProgramServiceImplTest,UserIdentityMergeServiceImplTest test mvn -q -Dtest=AuthControllerTest,AuthServiceWechatTest,WechatMiniProgramServiceImplTest,UserIdentityMergeServiceImplTest test
``` ```
@@ -1605,7 +1605,7 @@ Expected: command exits with status `0`.
- [ ] **Step 2: Compile backend** - [ ] **Step 2: Compile backend**
```bash ```bash
cd backend-single cd server
mvn -q -DskipTests compile mvn -q -DskipTests compile
``` ```
@@ -1633,7 +1633,7 @@ Open `mini-program/unpackage/dist/build/mp-weixin` in WeChat DevTools and verify
- [ ] **Step 5: Add README note if config is not documented elsewhere** - [ ] **Step 5: Add README note if config is not documented elsewhere**
If no deployment doc already lists WeChat env vars, add this section to `mini-program/README.md` or `backend-single/部署说明.md`: If no deployment doc already lists WeChat env vars, add this section to `mini-program/README.md` or `server/部署说明.md`:
```markdown ```markdown
### WeChat Mini Program Login ### WeChat Mini Program Login
@@ -15,10 +15,10 @@
| 文件 | 改动 | 职责 | | 文件 | 改动 | 职责 |
|------|------|------| |------|------|------|
| `sql/emotion_museum_ddl.sql` | 追加 | 数据库迁移:新增5列 | | `sql/emotion_museum_ddl.sql` | 追加 | 数据库迁移:新增5列 |
| `backend-single/.../entity/UserProfile.java` | 修改 | ORM 实体新增字段 | | `server/.../entity/UserProfile.java` | 修改 | ORM 实体新增字段 |
| `backend-single/.../request/UserProfileCreateRequest.java` | 修改 | 创建请求 DTO 新增字段 | | `server/.../request/UserProfileCreateRequest.java` | 修改 | 创建请求 DTO 新增字段 |
| `backend-single/.../request/UserProfileUpdateRequest.java` | 修改 | 更新请求 DTO 新增字段 | | `server/.../request/UserProfileUpdateRequest.java` | 修改 | 更新请求 DTO 新增字段 |
| `backend-single/.../response/UserProfileResponse.java` | 修改 | 响应 DTO 新增字段 | | `server/.../response/UserProfileResponse.java` | 修改 | 响应 DTO 新增字段 |
| `mini-program/src/services/userProfile.js` | 修改 | 前后端数据格式双向转换 | | `mini-program/src/services/userProfile.js` | 修改 | 前后端数据格式双向转换 |
| `mini-program/src/stores/app.js` | 修改 | 全局状态 registrationData 扩展 | | `mini-program/src/stores/app.js` | 修改 | 全局状态 registrationData 扩展 |
| `mini-program/src/pages/main/RecordView.vue` | 修改 | 去除写死默认值和 sampleEvents | | `mini-program/src/pages/main/RecordView.vue` | 修改 | 去除写死默认值和 sampleEvents |
@@ -57,7 +57,7 @@ git commit -m "db: add city, industry, company, personality_tags, birthday to t_
### Task 2: 后端实体扩展 — UserProfile.java ### Task 2: 后端实体扩展 — UserProfile.java
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/entity/UserProfile.java` - Modify: `server/src/main/java/com/emotion/entity/UserProfile.java`
- [ ] **Step 1: 在 idealLife 字段后新增5个字段** - [ ] **Step 1: 在 idealLife 字段后新增5个字段**
@@ -100,7 +100,7 @@ git commit -m "db: add city, industry, company, personality_tags, birthday to t_
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/entity/UserProfile.java git add server/src/main/java/com/emotion/entity/UserProfile.java
git commit -m "feat: extend UserProfile entity with city/industry/company/personalityTags/birthday" git commit -m "feat: extend UserProfile entity with city/industry/company/personalityTags/birthday"
``` ```
@@ -109,7 +109,7 @@ git commit -m "feat: extend UserProfile entity with city/industry/company/person
### Task 3: 后端创建请求 DTO 扩展 — UserProfileCreateRequest.java ### Task 3: 后端创建请求 DTO 扩展 — UserProfileCreateRequest.java
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java`
- [ ] **Step 1: 在 idealLife 字段后新增5个字段** - [ ] **Step 1: 在 idealLife 字段后新增5个字段**
@@ -145,7 +145,7 @@ git commit -m "feat: extend UserProfile entity with city/industry/company/person
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java git add server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java
git commit -m "feat: extend UserProfileCreateRequest with city/industry/company/personalityTags/birthday" git commit -m "feat: extend UserProfileCreateRequest with city/industry/company/personalityTags/birthday"
``` ```
@@ -154,7 +154,7 @@ git commit -m "feat: extend UserProfileCreateRequest with city/industry/company/
### Task 4: 后端更新请求 DTO 扩展 — UserProfileUpdateRequest.java ### Task 4: 后端更新请求 DTO 扩展 — UserProfileUpdateRequest.java
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java`
- [ ] **Step 1: 在 idealLife 字段后新增5个字段** - [ ] **Step 1: 在 idealLife 字段后新增5个字段**
@@ -190,7 +190,7 @@ git commit -m "feat: extend UserProfileCreateRequest with city/industry/company/
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java git add server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java
git commit -m "feat: extend UserProfileUpdateRequest with city/industry/company/personalityTags/birthday" git commit -m "feat: extend UserProfileUpdateRequest with city/industry/company/personalityTags/birthday"
``` ```
@@ -199,7 +199,7 @@ git commit -m "feat: extend UserProfileUpdateRequest with city/industry/company/
### Task 5: 后端响应 DTO 扩展 — UserProfileResponse.java ### Task 5: 后端响应 DTO 扩展 — UserProfileResponse.java
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java` - Modify: `server/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java`
- [ ] **Step 1: 在 idealLife 字段后新增5个字段** - [ ] **Step 1: 在 idealLife 字段后新增5个字段**
@@ -236,7 +236,7 @@ git commit -m "feat: extend UserProfileUpdateRequest with city/industry/company/
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java git add server/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java
git commit -m "feat: extend UserProfileResponse with city/industry/company/personalityTags/birthday" git commit -m "feat: extend UserProfileResponse with city/industry/company/personalityTags/birthday"
``` ```
@@ -631,7 +631,7 @@ git commit -m "fix: remove hardcoded defaults from profile edit page"
- [ ] **Step 1: 后端编译验证** - [ ] **Step 1: 后端编译验证**
```bash ```bash
cd backend-single && mvn compile -q cd server && mvn compile -q
``` ```
预期:编译成功,无错误。 预期:编译成功,无错误。
@@ -20,13 +20,13 @@ purpose: 微信小程序登录修复 spec 的实施计划(TDD + 频繁 commit
| 状态 | 文件 | 责任 | 行数 | | 状态 | 文件 | 责任 | 行数 |
|---|---|---|---| |---|---|---|---|
| 重写 | `backend-single/src/main/java/com/emotion/config/RestTemplateConfig.java` | 统一 RestTemplate BeanUser-Agent + 超时 + 拦截器 + 错误处理) | 13 → 40 | | 重写 | `server/src/main/java/com/emotion/config/RestTemplateConfig.java` | 统一 RestTemplate BeanUser-Agent + 超时 + 拦截器 + 错误处理) | 13 → 40 |
| 新增 | `backend-single/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java` | 请求/响应日志(INFO+ 脱敏 bodyDEBUG | 60 | | 新增 | `server/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java` | 请求/响应日志(INFO+ 脱敏 bodyDEBUG | 60 |
| 新增 | `backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java` | 4xx/5xx 不抛异常 | 30 | | 新增 | `server/src/main/java/com/emotion/config/WechatResponseErrorHandler.java` | 4xx/5xx 不抛异常 | 30 |
| 新增 | `backend-single/src/main/java/com/emotion/exception/WechatApiException.java` | 业务异常类(HTTP 风格 code + rawBody | 30 | | 新增 | `server/src/main/java/com/emotion/exception/WechatApiException.java` | 业务异常类(HTTP 风格 code + rawBody | 30 |
| 重写 | `backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` | `code2Session` 五步防御 | 49 → 90 | | 重写 | `server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` | `code2Session` 五步防御 | 49 → 90 |
| 修改 | `backend-single/src/main/java/com/emotion/exception/GlobalExceptionHandler.java` | 新增 `handleWechatApiException` + 脱敏日志 | +25 | | 修改 | `server/src/main/java/com/emotion/exception/GlobalExceptionHandler.java` | 新增 `handleWechatApiException` + 脱敏日志 | +25 |
| 修改 | `backend-single/src/main/resources/application.yml` | 移除 `app-id` / `app-secret` 硬编码默认值 | 2 行 | | 修改 | `server/src/main/resources/application.yml` | 移除 `app-id` / `app-secret` 硬编码默认值 | 2 行 |
**总计**:2 重写 + 3 新增 + 2 修改,约 280 行 Java + 2 行 YAML **总计**:2 重写 + 3 新增 + 2 修改,约 280 行 Java + 2 行 YAML
@@ -38,9 +38,9 @@ purpose: 微信小程序登录修复 spec 的实施计划(TDD + 频繁 commit
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git status # 确认在 master 分支 git status # 确认在 master 分支
git log --oneline -1 # 确认最新 commit 是 82c308b git log --oneline -1 # 确认最新 commit 是 82c308b
ls backend-single/src/main/java/com/emotion/exception/ # 确认 GlobalExceptionHandler.java 存在 ls server/src/main/java/com/emotion/exception/ # 确认 GlobalExceptionHandler.java 存在
ls backend-single/src/main/java/com/emotion/config/ # 确认 RestTemplateConfig.java 存在 ls server/src/main/java/com/emotion/config/ # 确认 RestTemplateConfig.java 存在
ls backend-single/src/main/java/com/emotion/service/impl/ # 确认 WechatMiniProgramServiceImpl.java 存在 ls server/src/main/java/com/emotion/service/impl/ # 确认 WechatMiniProgramServiceImpl.java 存在
``` ```
期望:全部存在,工作树只有 spec 文件修改(无业务代码污染) 期望:全部存在,工作树只有 spec 文件修改(无业务代码污染)
@@ -50,7 +50,7 @@ ls backend-single/src/main/java/com/emotion/service/impl/ # 确认 WechatMiniPr
## Task 1: 创建 WechatApiException 异常类 ## Task 1: 创建 WechatApiException 异常类
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/exception/WechatApiException.java` - Create: `server/src/main/java/com/emotion/exception/WechatApiException.java`
- [ ] **Step 1.1: 写入 WechatApiException.java** - [ ] **Step 1.1: 写入 WechatApiException.java**
@@ -95,7 +95,7 @@ public class WechatApiException extends RuntimeException {
- [ ] **Step 1.2: mvn 编译验证** - [ ] **Step 1.2: mvn 编译验证**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn clean compile -DskipTests mvn clean compile -DskipTests
``` ```
@@ -105,7 +105,7 @@ mvn clean compile -DskipTests
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git add backend-single/src/main/java/com/emotion/exception/WechatApiException.java git add server/src/main/java/com/emotion/exception/WechatApiException.java
git commit -m "feat(wechat): 新增 WechatApiException 业务异常类 git commit -m "feat(wechat): 新增 WechatApiException 业务异常类
- 继承 RuntimeException - 继承 RuntimeException
@@ -119,12 +119,12 @@ git commit -m "feat(wechat): 新增 WechatApiException 业务异常类
## Task 2: 创建 WechatApiLoggingInterceptor(含脱敏单元测试) ## Task 2: 创建 WechatApiLoggingInterceptor(含脱敏单元测试)
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java` - Create: `server/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java`
- Create: `backend-single/src/test/java/com/emotion/interceptor/WechatApiLoggingInterceptorTest.java` - Create: `server/src/test/java/com/emotion/interceptor/WechatApiLoggingInterceptorTest.java`
- [ ] **Step 2.1: 写失败测试(验证脱敏逻辑)** - [ ] **Step 2.1: 写失败测试(验证脱敏逻辑)**
创建 `backend-single/src/test/java/com/emotion/interceptor/WechatApiLoggingInterceptorTest.java` 创建 `server/src/test/java/com/emotion/interceptor/WechatApiLoggingInterceptorTest.java`
```java ```java
package com.emotion.interceptor; package com.emotion.interceptor;
@@ -197,7 +197,7 @@ class WechatApiLoggingInterceptorTest {
- [ ] **Step 2.2: 运行测试验证失败** - [ ] **Step 2.2: 运行测试验证失败**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn test -Dtest=WechatApiLoggingInterceptorTest mvn test -Dtest=WechatApiLoggingInterceptorTest
``` ```
@@ -205,7 +205,7 @@ mvn test -Dtest=WechatApiLoggingInterceptorTest
- [ ] **Step 2.3: 写最小实现让测试通过** - [ ] **Step 2.3: 写最小实现让测试通过**
创建 `backend-single/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java` 创建 `server/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java`
```java ```java
package com.emotion.interceptor; package com.emotion.interceptor;
@@ -282,7 +282,7 @@ public class WechatApiLoggingInterceptor implements ClientHttpRequestInterceptor
- [ ] **Step 2.4: 运行测试验证通过** - [ ] **Step 2.4: 运行测试验证通过**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn test -Dtest=WechatApiLoggingInterceptorTest mvn test -Dtest=WechatApiLoggingInterceptorTest
``` ```
@@ -292,8 +292,8 @@ mvn test -Dtest=WechatApiLoggingInterceptorTest
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git add backend-single/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java git add server/src/main/java/com/emotion/interceptor/WechatApiLoggingInterceptor.java
git add backend-single/src/test/java/com/emotion/interceptor/WechatApiLoggingInterceptorTest.java git add server/src/test/java/com/emotion/interceptor/WechatApiLoggingInterceptorTest.java
git commit -m "feat(wechat): 新增 WechatApiLoggingInterceptor 拦截器(含脱敏单元测试) git commit -m "feat(wechat): 新增 WechatApiLoggingInterceptor 拦截器(含脱敏单元测试)
- ClientHttpRequestInterceptor 实现 - ClientHttpRequestInterceptor 实现
@@ -309,7 +309,7 @@ git commit -m "feat(wechat): 新增 WechatApiLoggingInterceptor 拦截器(含
## Task 3: 创建 WechatResponseErrorHandler ## Task 3: 创建 WechatResponseErrorHandler
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java` - Create: `server/src/main/java/com/emotion/config/WechatResponseErrorHandler.java`
- [ ] **Step 3.1: 写入 WechatResponseErrorHandler.java** - [ ] **Step 3.1: 写入 WechatResponseErrorHandler.java**
@@ -354,7 +354,7 @@ public class WechatResponseErrorHandler extends DefaultResponseErrorHandler {
- [ ] **Step 3.2: mvn 编译验证** - [ ] **Step 3.2: mvn 编译验证**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn clean compile -DskipTests mvn clean compile -DskipTests
``` ```
@@ -364,7 +364,7 @@ mvn clean compile -DskipTests
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git add backend-single/src/main/java/com/emotion/config/WechatResponseErrorHandler.java git add server/src/main/java/com/emotion/config/WechatResponseErrorHandler.java
git commit -m "feat(wechat): 新增 WechatResponseErrorHandler git commit -m "feat(wechat): 新增 WechatResponseErrorHandler
- 继承 DefaultResponseErrorHandler - 继承 DefaultResponseErrorHandler
@@ -378,12 +378,12 @@ git commit -m "feat(wechat): 新增 WechatResponseErrorHandler
## Task 4: 重写 RestTemplateConfig 集成新组件 ## Task 4: 重写 RestTemplateConfig 集成新组件
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/config/RestTemplateConfig.java` - Modify: `server/src/main/java/com/emotion/config/RestTemplateConfig.java`
- [ ] **Step 4.1: 备份并读取原文件** - [ ] **Step 4.1: 备份并读取原文件**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single\src\main\java\com\emotion\config" cd "G:\IdeaProjects\emotion-museun\server\src\main\java\com\emotion\config"
copy RestTemplateConfig.java RestTemplateConfig.java.bak copy RestTemplateConfig.java RestTemplateConfig.java.bak
``` ```
@@ -467,8 +467,8 @@ public class RestTemplateConfig {
- [ ] **Step 4.3: mvn 编译验证(确保 7 个其他使用点不受影响)** - [ ] **Step 4.3: mvn 编译验证(确保 7 个其他使用点不受影响)**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn clean install -pl :backend-single -am -DskipTests mvn clean install -pl :server -am -DskipTests
``` ```
期望:`BUILD SUCCESS`,无编译错误(如果 7 个其他使用点有编译错误,说明 RestTemplate API 不兼容,需要回滚) 期望:`BUILD SUCCESS`,无编译错误(如果 7 个其他使用点有编译错误,说明 RestTemplate API 不兼容,需要回滚)
@@ -476,7 +476,7 @@ mvn clean install -pl :backend-single -am -DskipTests
- [ ] **Step 4.4: 删除备份文件** - [ ] **Step 4.4: 删除备份文件**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single\src\main\java\com\emotion\config" cd "G:\IdeaProjects\emotion-museun\server\src\main\java\com\emotion\config"
del RestTemplateConfig.java.bak del RestTemplateConfig.java.bak
``` ```
@@ -484,7 +484,7 @@ del RestTemplateConfig.java.bak
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git add backend-single/src/main/java/com/emotion/config/RestTemplateConfig.java git add server/src/main/java/com/emotion/config/RestTemplateConfig.java
git commit -m "feat(wechat): 重写 RestTemplateConfig 统一 RestTemplate Bean git commit -m "feat(wechat): 重写 RestTemplateConfig 统一 RestTemplate Bean
解决问题: 解决问题:
@@ -514,8 +514,8 @@ git commit -m "feat(wechat): 重写 RestTemplateConfig 统一 RestTemplate Bean
## Task 5: 重写 WechatMiniProgramServiceImpl.code2SessionTDD 10 个场景) ## Task 5: 重写 WechatMiniProgramServiceImpl.code2SessionTDD 10 个场景)
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` - Modify: `server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java`
- Create: `backend-single/src/test/java/com/emotion/service/impl/WechatMiniProgramServiceImplTest.java` - Create: `server/src/test/java/com/emotion/service/impl/WechatMiniProgramServiceImplTest.java`
- [ ] **Step 5.1: 读取当前 WechatMiniProgramServiceImpl.java** - [ ] **Step 5.1: 读取当前 WechatMiniProgramServiceImpl.java**
@@ -523,7 +523,7 @@ git commit -m "feat(wechat): 重写 RestTemplateConfig 统一 RestTemplate Bean
- [ ] **Step 5.2: 写失败测试(覆盖 spec 10 个场景)** - [ ] **Step 5.2: 写失败测试(覆盖 spec 10 个场景)**
创建 `backend-single/src/test/java/com/emotion/service/impl/WechatMiniProgramServiceImplTest.java` 创建 `server/src/test/java/com/emotion/service/impl/WechatMiniProgramServiceImplTest.java`
```java ```java
package com.emotion.service.impl; package com.emotion.service.impl;
@@ -659,7 +659,7 @@ class WechatMiniProgramServiceImplTest {
- [ ] **Step 5.3: 运行测试验证失败(确认 service 现有方法未做防御)** - [ ] **Step 5.3: 运行测试验证失败(确认 service 现有方法未做防御)**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn test -Dtest=WechatMiniProgramServiceImplTest mvn test -Dtest=WechatMiniProgramServiceImplTest
``` ```
@@ -667,7 +667,7 @@ mvn test -Dtest=WechatMiniProgramServiceImplTest
- [ ] **Step 5.4: 重写 code2Session 方法(五步防御)** - [ ] **Step 5.4: 重写 code2Session 方法(五步防御)**
修改 `backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java` 修改 `server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java`
在 class 顶部添加 imports 在 class 顶部添加 imports
```java ```java
@@ -748,7 +748,7 @@ public WechatCodeSessionResponse code2Session(String code) {
- [ ] **Step 5.5: 运行测试验证通过** - [ ] **Step 5.5: 运行测试验证通过**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn test -Dtest=WechatMiniProgramServiceImplTest mvn test -Dtest=WechatMiniProgramServiceImplTest
``` ```
@@ -758,8 +758,8 @@ mvn test -Dtest=WechatMiniProgramServiceImplTest
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git add backend-single/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java git add server/src/main/java/com/emotion/service/impl/WechatMiniProgramServiceImpl.java
git add backend-single/src/test/java/com/emotion/service/impl/WechatMiniProgramServiceImplTest.java git add server/src/test/java/com/emotion/service/impl/WechatMiniProgramServiceImplTest.java
git commit -m "feat(wechat): 重写 code2Session 五步防御 git commit -m "feat(wechat): 重写 code2Session 五步防御
解决问题: 解决问题:
@@ -783,7 +783,7 @@ git commit -m "feat(wechat): 重写 code2Session 五步防御
## Task 6: 修改 application.yml 移除硬编码 ## Task 6: 修改 application.yml 移除硬编码
**Files:** **Files:**
- Modify: `backend-single/src/main/resources/application.yml` - Modify: `server/src/main/resources/application.yml`
- [ ] **Step 6.1: 定位并修改微信配置** - [ ] **Step 6.1: 定位并修改微信配置**
@@ -820,7 +820,7 @@ $env:WECHAT_MINI_PROGRAM_APP_SECRET = "4f087bd363a4147ef543d634f9f6950d"
- [ ] **Step 6.3: mvn 编译验证(确保 YAML 可加载)** - [ ] **Step 6.3: mvn 编译验证(确保 YAML 可加载)**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn clean compile -DskipTests mvn clean compile -DskipTests
``` ```
@@ -830,7 +830,7 @@ mvn clean compile -DskipTests
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git add backend-single/src/main/resources/application.yml git add server/src/main/resources/application.yml
git commit -m "fix(wechat): 移除 app-id/app-secret 硬编码默认值 git commit -m "fix(wechat): 移除 app-id/app-secret 硬编码默认值
安全问题: 安全问题:
@@ -854,7 +854,7 @@ git commit -m "fix(wechat): 移除 app-id/app-secret 硬编码默认值
## Task 7: 修改 GlobalExceptionHandler 添加 WechatApiException handler ## Task 7: 修改 GlobalExceptionHandler 添加 WechatApiException handler
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/exception/GlobalExceptionHandler.java` - Modify: `server/src/main/java/com/emotion/exception/GlobalExceptionHandler.java`
- [ ] **Step 7.1: 定位文件并添加新方法** - [ ] **Step 7.1: 定位文件并添加新方法**
@@ -911,7 +911,7 @@ public Result<Void> handleWechatApiException(WechatApiException e, HttpServletRe
- [ ] **Step 7.2: mvn 编译验证** - [ ] **Step 7.2: mvn 编译验证**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn clean compile -DskipTests mvn clean compile -DskipTests
``` ```
@@ -919,7 +919,7 @@ mvn clean compile -DskipTests
- [ ] **Step 7.3: 写简单测试验证 handler 行为** - [ ] **Step 7.3: 写简单测试验证 handler 行为**
创建 `backend-single/src/test/java/com/emotion/exception/GlobalExceptionHandlerWechatTest.java` 创建 `server/src/test/java/com/emotion/exception/GlobalExceptionHandlerWechatTest.java`
```java ```java
package com.emotion.exception; package com.emotion.exception;
@@ -976,7 +976,7 @@ class GlobalExceptionHandlerWechatTest {
- [ ] **Step 7.4: 运行测试** - [ ] **Step 7.4: 运行测试**
```bash ```bash
cd "G:\IdeaProjects\emotion-museun\backend-single" cd "G:\IdeaProjects\emotion-museun\server"
mvn test -Dtest=GlobalExceptionHandlerWechatTest mvn test -Dtest=GlobalExceptionHandlerWechatTest
``` ```
@@ -986,8 +986,8 @@ mvn test -Dtest=GlobalExceptionHandlerWechatTest
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
git add backend-single/src/main/java/com/emotion/exception/GlobalExceptionHandler.java git add server/src/main/java/com/emotion/exception/GlobalExceptionHandler.java
git add backend-single/src/test/java/com/emotion/exception/GlobalExceptionHandlerWechatTest.java git add server/src/test/java/com/emotion/exception/GlobalExceptionHandlerWechatTest.java
git commit -m "feat(wechat): GlobalExceptionHandler 新增 WechatApiException handler git commit -m "feat(wechat): GlobalExceptionHandler 新增 WechatApiException handler
解决问题: 解决问题:
@@ -1014,7 +1014,7 @@ git commit -m "feat(wechat): GlobalExceptionHandler 新增 WechatApiException ha
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
mvn clean install -pl :backend-single -am -DskipTests mvn clean install -pl :server -am -DskipTests
``` ```
期望:`BUILD SUCCESS` 期望:`BUILD SUCCESS`
@@ -1023,7 +1023,7 @@ mvn clean install -pl :backend-single -am -DskipTests
```bash ```bash
cd "G:\IdeaProjects\emotion-museun" cd "G:\IdeaProjects\emotion-museun"
mvn test -pl :backend-single mvn test -pl :server
``` ```
期望:所有测试通过,无失败 期望:所有测试通过,无失败
@@ -18,17 +18,17 @@
| 文件 | 职责 | | 文件 | 职责 |
|---|---| |---|---|
| `backend-single/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql` | 数据库字段迁移脚本 | | `server/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql` | 数据库字段迁移脚本 |
| `mini-program/src/pages/onboarding/tag-manage.vue` | 管理标签独立页面(性格标签 / 兴趣爱好) | | `mini-program/src/pages/onboarding/tag-manage.vue` | 管理标签独立页面(性格标签 / 兴趣爱好) |
### 修改文件 ### 修改文件
| 文件 | 修改内容 | | 文件 | 修改内容 |
|---|---| |---|---|
| `backend-single/src/main/java/com/emotion/entity/UserProfile.java` | 新增 `personalityTagLibrary` / `hobbyLibrary` 字段 | | `server/src/main/java/com/emotion/entity/UserProfile.java` | 新增 `personalityTagLibrary` / `hobbyLibrary` 字段 |
| `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java` | 同上 | | `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java` | 同上 |
| `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java` | 同上 | | `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java` | 同上 |
| `backend-single/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java` | 同上 | | `server/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java` | 同上 |
| `mini-program/src/services/userProfile.js` | 请求/响应转换增加两个库字段 | | `mini-program/src/services/userProfile.js` | 请求/响应转换增加两个库字段 |
| `mini-program/src/stores/app.js` | `registrationData` 增加两个库字段 | | `mini-program/src/stores/app.js` | `registrationData` 增加两个库字段 |
| `mini-program/src/pages.json` | 注册 `tag-manage` 路由 | | `mini-program/src/pages.json` | 注册 `tag-manage` 路由 |
@@ -39,8 +39,8 @@
| 文件 | 原因 | | 文件 | 原因 |
|---|---| |---|---|
| `mini-program/src/pages/main/MineView.vue` | 只读"已选中的标签"(沿用 `hobbies` 字段),不需要感知完整库 | | `mini-program/src/pages/main/MineView.vue` | 只读"已选中的标签"(沿用 `hobbies` 字段),不需要感知完整库 |
| `backend-single/src/main/java/com/emotion/service/impl/UserProfileServiceImpl.java` | 使用 `BeanUtils.copyProperties` 自动映射,新字段透传 | | `server/src/main/java/com/emotion/service/impl/UserProfileServiceImpl.java` | 使用 `BeanUtils.copyProperties` 自动映射,新字段透传 |
| `backend-single/src/main/java/com/emotion/controller/UserProfileController.java` | 同上 | | `server/src/main/java/com/emotion/controller/UserProfileController.java` | 同上 |
--- ---
@@ -49,15 +49,15 @@
**目标:**`t_user_profile` 表新增两个 JSON 字段,同步更新实体类与 3 个 DTO,保证接口透传。 **目标:**`t_user_profile` 表新增两个 JSON 字段,同步更新实体类与 3 个 DTO,保证接口透传。
**Files:** **Files:**
- Create: `backend-single/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql` - Create: `server/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql`
- Modify: `backend-single/src/main/java/com/emotion/entity/UserProfile.java` - Modify: `server/src/main/java/com/emotion/entity/UserProfile.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java` - Modify: `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java`
- Modify: `backend-single/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java` - Modify: `server/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java`
### Step 1: 创建数据库迁移脚本 ### Step 1: 创建数据库迁移脚本
创建 `backend-single/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql` 创建 `server/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql`
```sql ```sql
-- 用户档案表新增标签库字段,用于存储用户专属的完整标签列表(含剩余预设 + 自定义) -- 用户档案表新增标签库字段,用于存储用户专属的完整标签列表(含剩余预设 + 自定义)
@@ -68,7 +68,7 @@ ALTER TABLE t_user_profile
### Step 2: UserProfile 实体新增字段 ### Step 2: UserProfile 实体新增字段
修改 `backend-single/src/main/java/com/emotion/entity/UserProfile.java` 修改 `server/src/main/java/com/emotion/entity/UserProfile.java`
`personalityTags` 字段下方追加两个字段(保持与现有 `personalityTags` / `hobbies` 字段风格一致): `personalityTags` 字段下方追加两个字段(保持与现有 `personalityTags` / `hobbies` 字段风格一致):
@@ -94,7 +94,7 @@ ALTER TABLE t_user_profile
### Step 3: UserProfileUpdateRequest 新增字段 ### Step 3: UserProfileUpdateRequest 新增字段
修改 `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java` 修改 `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java`
`personalityTags` 字段下方追加: `personalityTags` 字段下方追加:
@@ -117,7 +117,7 @@ ALTER TABLE t_user_profile
### Step 4: UserProfileCreateRequest 新增字段 ### Step 4: UserProfileCreateRequest 新增字段
修改 `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java` 修改 `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java`
`personalityTags` 字段下方追加: `personalityTags` 字段下方追加:
@@ -140,7 +140,7 @@ ALTER TABLE t_user_profile
### Step 5: UserProfileResponse 新增字段 ### Step 5: UserProfileResponse 新增字段
修改 `backend-single/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java` 修改 `server/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java`
`personalityTags` 字段下方追加: `personalityTags` 字段下方追加:
@@ -164,8 +164,8 @@ ALTER TABLE t_user_profile
### Step 6: 本地编译验证 ### Step 6: 本地编译验证
```bash ```bash
cd backend-single cd server
mvn clean install -DskipTests -pl :backend-single -am mvn clean install -DskipTests -pl :server -am
``` ```
预期:`BUILD SUCCESS` 预期:`BUILD SUCCESS`
@@ -173,11 +173,11 @@ mvn clean install -DskipTests -pl :backend-single -am
### Step 7: 提交 ### Step 7: 提交
```bash ```bash
git add backend-single/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql \ git add server/src/main/resources/db/migration/V20260624__add_user_profile_tag_library.sql \
backend-single/src/main/java/com/emotion/entity/UserProfile.java \ server/src/main/java/com/emotion/entity/UserProfile.java \
backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java \ server/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java \
backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java \ server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java \
backend-single/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java server/src/main/java/com/emotion/dto/response/userprofile/UserProfileResponse.java
git commit -m "featUserProfile 新增性格标签库与兴趣爱好库字段" git commit -m "featUserProfile 新增性格标签库与兴趣爱好库字段"
``` ```
@@ -1258,7 +1258,7 @@ git commit -m "feat:新增管理标签独立页面,支持左滑与 × 按钮
### Step 1: 重启后端(已修改 Java 实体) ### Step 1: 重启后端(已修改 Java 实体)
```bash ```bash
python dev-services.py restart backend-single python dev-services.py restart server
``` ```
等待启动完成,查看终端无报错。 等待启动完成,查看终端无报错。
@@ -0,0 +1,462 @@
# backend-single 重命名为 server 实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:**`backend-single` 目录重命名为 `server`,同步更新 Maven artifactId、部署脚本、配置文件、项目文档和历史文档中的所有引用。
**Architecture:** 分 10 个任务按依赖顺序执行。先移动目录(Task 1),再更新构建配置(Task 2-3),然后更新根级脚本(Task 4-5),接着更新文档(Task 6-8),最后批量替换历史文档(Task 9)并全面验证(Task 10)。
**Tech Stack:** Git, Maven, Python (deploy scripts), Bash, sed (batch replace)
---
### Task 1: 目录重命名
**Files:**
- Move: `backend-single/``server/`
- [ ] **Step 1: 使用 git mv 重命名目录**
```bash
cd /g/IdeaProjects/emotion-museun
git mv backend-single server
```
Expected: 目录从 `backend-single/` 重命名为 `server/`Git 历史完整保留。
- [ ] **Step 2: 确认目录已移动**
```bash
ls -d server/
ls server/pom.xml
```
Expected: 两个命令都成功,无报错。
- [ ] **Step 3: 提交目录移动**
```bash
git commit -m "refactor: 重命名 backend-single 目录为 server"
```
---
### Task 2: 更新 Maven pom.xml
**Files:**
- Modify: `server/pom.xml:8,12`
- [ ] **Step 1: 修改 artifactId 和 name**
`server/pom.xml` 中,将第 8 行和第 12 行的 `backend-single` 替换为 `server`
```xml
<!-- 第 8 行 -->
<artifactId>server</artifactId>
<!-- 第 12 行 -->
<name>server</name>
```
- [ ] **Step 2: 验证 pom.xml 修改**
```bash
grep -n "backend-single" server/pom.xml
```
Expected: 无任何输出(无残留引用)。
- [ ] **Step 3: 提交 pom.xml 修改**
```bash
git add server/pom.xml
git commit -m "refactor: 更新 Maven artifactId 为 server"
```
---
### Task 3: 更新后端部署脚本 JAR 名称
**Files:**
- Modify: `server/deploy.py:22`
- Modify: `server/deploy.sh:10`
- [ ] **Step 1: 修改 server/deploy.py 中的 JAR_NAME**
`server/deploy.py` 第 22 行:
```python
JAR_NAME = "backend-single-1.0.0.jar"
```
改为:
```python
JAR_NAME = "server-1.0.0.jar"
```
- [ ] **Step 2: 修改 server/deploy.sh 中的 JAR_NAME**
`server/deploy.sh` 第 10 行:
```bash
JAR_NAME="backend-single-1.0.0.jar"
```
改为:
```bash
JAR_NAME="server-1.0.0.jar"
```
- [ ] **Step 3: 验证后端部署脚本无残留**
```bash
grep -n "backend-single" server/deploy.py server/deploy.sh
```
Expected: 无任何输出。
- [ ] **Step 4: 提交后端部署脚本修改**
```bash
git add server/deploy.py server/deploy.sh
git commit -m "refactor: 更新后端部署脚本 JAR 名称为 server-1.0.0.jar"
```
---
### Task 4: 更新根目录部署脚本
**Files:**
- Modify: `deploy.py:398,405,413`
- Modify: `deploy.sh:77,81,82,86`
- [ ] **Step 1: 修改根目录 deploy.py**
`deploy.py` 中 3 处 `backend-single` 替换为 `server`
第 398 行注释:
```python
# 后端 - 调用 server/deploy.sh remote
```
第 405 行路径拼接:
```python
deploy_script = PROJECT_DIR / "server" / "deploy.py"
```
第 413 行 cwd
```python
cwd=str(PROJECT_DIR / "server"),
```
- [ ] **Step 2: 修改根目录 deploy.sh**
`deploy.sh` 中 4 处 `backend-single` 替换为 `server`
第 77 行注释:
```bash
# 后端 - 调用 server/deploy.sh
```
第 81 行存在性检查:
```bash
if [ ! -f "server/deploy.sh" ]; then
```
第 82 行错误信息:
```bash
log_error "后端部署脚本不存在: server/deploy.sh"
```
第 86 行 cd 命令:
```bash
cd server
```
- [ ] **Step 3: 验证根部署脚本无残留**
```bash
grep -n "backend-single" deploy.py deploy.sh
```
Expected: 无任何输出。
- [ ] **Step 4: 提交根部署脚本修改**
```bash
git add deploy.py deploy.sh
git commit -m "refactor: 更新根部署脚本中的后端目录引用为 server"
```
---
### Task 5: 更新 .gitignore
**Files:**
- Modify: `.gitignore:386`
- [ ] **Step 1: 修改 .gitignore**
`.gitignore` 第 386 行:
```
backend-single/backend.err
```
改为:
```
server/backend.err
```
- [ ] **Step 2: 验证并提交**
```bash
grep -n "backend-single" .gitignore
git add .gitignore
git commit -m "refactor: 更新 .gitignore 中的后端日志路径"
```
Expected: grep 无输出,提交成功。
---
### Task 6: 更新核心项目文档
**Files:**
- Modify: `CLAUDE.md` (4 处)
- Modify: `AGENTS.md` (4 处)
- Modify: `README.md` (1 处)
- [ ] **Step 1: 修改 CLAUDE.md**
`CLAUDE.md` 中所有 `backend-single` 替换为 `server`
第 23 行项目结构树:
```
├── server/ # Spring Boot 单体后端服务
```
第 37 行标题:
```
### 后端 (server)
```
第 41 行命令:
```
cd server
```
第 50 行 JAR 名称:
```
java -jar target/server-1.0.0.jar
```
- [ ] **Step 2: 修改 AGENTS.md**
`AGENTS.md` 中所有 `backend-single` 替换为 `server`(与 CLAUDE.md 相同的 4 处位置和内容)。
- [ ] **Step 3: 修改 README.md**
`README.md` 第 73 行:
```
├── backend-single/ # SpringBoot单体后端服务
```
改为:
```
├── server/ # SpringBoot单体后端服务
```
- [ ] **Step 4: 验证并提交**
```bash
grep -n "backend-single" CLAUDE.md AGENTS.md README.md
git add CLAUDE.md AGENTS.md README.md
git commit -m "docs: 更新核心文档中的后端目录引用为 server"
```
Expected: grep 无输出,提交成功。
---
### Task 7: 更新部署相关文档
**Files:**
- Modify: `server/部署说明.md` (1 处)
- Modify: `快速部署参考.md` (4 处)
- Modify: `一键部署说明.md` (5 处)
- [ ] **Step 1: 修改 server/部署说明.md**
`server/部署说明.md` 第 14 行:
```
# 在 backend-single 目录下执行
```
改为:
```
# 在 server 目录下执行
```
- [ ] **Step 2: 修改 快速部署参考.md**
`快速部署参考.md` 中所有 `backend-single` 替换为 `server`4 处:第 71、83、134、136 行)。
- [ ] **Step 3: 修改 一键部署说明.md**
`一键部署说明.md` 中所有 `backend-single` 替换为 `server`5 处:第 78、152、156、301、304 行)。注意第 156 行 `backend-single-1.0.0.jar` 变为 `server-1.0.0.jar`
- [ ] **Step 4: 验证并提交**
```bash
grep -n "backend-single" "server/部署说明.md" "快速部署参考.md" "一键部署说明.md"
git add "server/部署说明.md" "快速部署参考.md" "一键部署说明.md"
git commit -m "docs: 更新部署文档中的后端目录引用为 server"
```
Expected: grep 无输出,提交成功。
---
### Task 8: 更新前端代码和其他文档
**Files:**
- Modify: `web/src/types/auth.ts:5`
- Modify: `web-admin/AI_CONFIG_TEST_SAVE_FEATURE.md:284-287`
- [ ] **Step 1: 修改 web/src/types/auth.ts 注释**
将第 5 行:
```ts
// 登录请求(对齐 backend-single:手机号 + 短信验证码)
```
改为:
```ts
// 登录请求(对齐 server:手机号 + 短信验证码)
```
- [ ] **Step 2: 修改 web-admin/AI_CONFIG_TEST_SAVE_FEATURE.md**
将文件中 4 处 `backend-single/src/main/java/` 替换为 `server/src/main/java/`(第 284-287 行)。
- [ ] **Step 3: 验证并提交**
```bash
grep -rn "backend-single" web/ web-admin/
git add "web/src/types/auth.ts" "web-admin/AI_CONFIG_TEST_SAVE_FEATURE.md"
git commit -m "docs: 更新前端代码和文档中的后端目录引用为 server"
```
Expected: grep 无输出(在这两个目录中),提交成功。
---
### Task 9: 批量替换历史文档
**Files:**
- Modify: `docs/superpowers/` 下约 37 个 `.md` 文件(排除本次新建的设计文档)
- [ ] **Step 1: 使用 sed 批量替换**
在 Windows Git Bash 中执行:
```bash
cd /g/IdeaProjects/emotion-museun
find docs/superpowers -name "*.md" \
! -name "2026-06-27-backend-single-rename-to-server-design.md" \
-exec sed -i 's/backend-single/server/g' {} +
```
说明:
- `sed -i` 原地替换
- `! -name` 排除本次设计文档自身(避免修改自己的文件名引用)
- `s/backend-single/server/g` 全局替换
- [ ] **Step 2: 验证 docs/superpowers/ 中无残留**
```bash
grep -rn "backend-single" docs/superpowers/ \
--include="*.md" \
! --include="2026-06-27-backend-single-rename-to-server-design.md"
```
Expected: 无任何输出。
- [ ] **Step 3: 提交历史文档更新**
```bash
git add docs/superpowers/
git commit -m "docs: 批量更新历史文档中的 backend-single 引用为 server"
```
---
### Task 10: 全面验证
**Files:** 无新增修改
- [ ] **Step 1: 全项目 grep 验证无残留**
```bash
grep -rn "backend-single" --include="*.md" --include="*.py" --include="*.sh" \
--include="*.xml" --include="*.ts" --include="*.java" --include="*.yml" \
--include="*.yaml" --include="*.json" --include="*.properties" .
```
Expected: **无任何输出**。如果有残留,逐一修复。
**注意**:以下文件中出现 `backend-single` 是允许的(不需要修改):
- `docs/superpowers/specs/2026-06-27-backend-single-rename-to-server-design.md`(本次设计文档自身)
- `docs/superpowers/plans/2026-06-27-backend-single-rename-to-server.md`(本次计划文档自身)
- [ ] **Step 2: Maven 编译验证**
```bash
cd /g/IdeaProjects/emotion-museun/server
mvn clean install -DskipTests
```
Expected: BUILD SUCCESS,生成 `target/server-1.0.0.jar`
- [ ] **Step 3: 验证 JAR 文件名称**
```bash
ls -lh server/target/server-1.0.0.jar
```
Expected: 文件存在,名称正确。
- [ ] **Step 4: 验证 Git 历史保留**
```bash
git log --follow --oneline server/pom.xml | head -5
```
Expected: 能看到旧的重命名之前的提交历史。
- [ ] **Step 5: 验证 .gitignore 生效**
```bash
git status
```
Expected: 工作区干净(无意外未跟踪文件)。
- [ ] **Step 6: 最终提交(如有修复)**
如果 Step 1 中发现了残留并修复了,执行:
```bash
git add -A
git commit -m "fix: 修复遗漏的 backend-single 引用"
```
@@ -71,7 +71,7 @@ Expected: 一行数据,`config_key = 'sms_login_enabled'``config_value = 'f
### Task 2: 后端 Entity — SystemConfig.java ### Task 2: 后端 Entity — SystemConfig.java
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/entity/SystemConfig.java` - Create: `server/src/main/java/com/emotion/entity/SystemConfig.java`
- [ ] **Step 1: 创建 SystemConfig 实体** - [ ] **Step 1: 创建 SystemConfig 实体**
@@ -153,7 +153,7 @@ public class SystemConfig extends BaseEntity {
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/entity/SystemConfig.java git add server/src/main/java/com/emotion/entity/SystemConfig.java
git commit -m "feat:新增系统配置实体类" git commit -m "feat:新增系统配置实体类"
``` ```
@@ -162,7 +162,7 @@ git commit -m "feat:新增系统配置实体类"
### Task 3: 后端 Mapper — SystemConfigMapper.java ### Task 3: 后端 Mapper — SystemConfigMapper.java
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/mapper/SystemConfigMapper.java` - Create: `server/src/main/java/com/emotion/mapper/SystemConfigMapper.java`
- [ ] **Step 1: 创建 SystemConfigMapper** - [ ] **Step 1: 创建 SystemConfigMapper**
@@ -187,7 +187,7 @@ public interface SystemConfigMapper extends BaseMapper<SystemConfig> {
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/mapper/SystemConfigMapper.java git add server/src/main/java/com/emotion/mapper/SystemConfigMapper.java
git commit -m "feat:新增系统配置Mapper" git commit -m "feat:新增系统配置Mapper"
``` ```
@@ -196,9 +196,9 @@ git commit -m "feat:新增系统配置Mapper"
### Task 4: 后端 DTOs ### Task 4: 后端 DTOs
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/dto/request/SystemConfigUpdateRequest.java` - Create: `server/src/main/java/com/emotion/dto/request/SystemConfigUpdateRequest.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/SystemConfigResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/SystemConfigResponse.java`
- Create: `backend-single/src/main/java/com/emotion/dto/response/LoginConfigResponse.java` - Create: `server/src/main/java/com/emotion/dto/response/LoginConfigResponse.java`
- [ ] **Step 1: 创建 SystemConfigUpdateRequest** - [ ] **Step 1: 创建 SystemConfigUpdateRequest**
@@ -317,9 +317,9 @@ public class LoginConfigResponse {
- [ ] **Step 4: Commit** - [ ] **Step 4: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/dto/request/SystemConfigUpdateRequest.java git add server/src/main/java/com/emotion/dto/request/SystemConfigUpdateRequest.java
git add backend-single/src/main/java/com/emotion/dto/response/SystemConfigResponse.java git add server/src/main/java/com/emotion/dto/response/SystemConfigResponse.java
git add backend-single/src/main/java/com/emotion/dto/response/LoginConfigResponse.java git add server/src/main/java/com/emotion/dto/response/LoginConfigResponse.java
git commit -m "feat:新增系统配置相关DTO" git commit -m "feat:新增系统配置相关DTO"
``` ```
@@ -328,7 +328,7 @@ git commit -m "feat:新增系统配置相关DTO"
### Task 5: 后端 Service 接口 — SystemConfigService.java ### Task 5: 后端 Service 接口 — SystemConfigService.java
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/SystemConfigService.java` - Create: `server/src/main/java/com/emotion/service/SystemConfigService.java`
- [ ] **Step 1: 创建 SystemConfigService 接口** - [ ] **Step 1: 创建 SystemConfigService 接口**
@@ -379,7 +379,7 @@ public interface SystemConfigService extends IService<SystemConfig> {
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/SystemConfigService.java git add server/src/main/java/com/emotion/service/SystemConfigService.java
git commit -m "feat:新增系统配置服务接口" git commit -m "feat:新增系统配置服务接口"
``` ```
@@ -388,7 +388,7 @@ git commit -m "feat:新增系统配置服务接口"
### Task 6: 后端 Service 实现 — SystemConfigServiceImpl.java ### Task 6: 后端 Service 实现 — SystemConfigServiceImpl.java
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/service/impl/SystemConfigServiceImpl.java` - Create: `server/src/main/java/com/emotion/service/impl/SystemConfigServiceImpl.java`
- [ ] **Step 1: 创建 SystemConfigServiceImpl** - [ ] **Step 1: 创建 SystemConfigServiceImpl**
@@ -506,7 +506,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, Sys
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/service/impl/SystemConfigServiceImpl.java git add server/src/main/java/com/emotion/service/impl/SystemConfigServiceImpl.java
git commit -m "feat:新增系统配置服务实现(含Redis缓存)" git commit -m "feat:新增系统配置服务实现(含Redis缓存)"
``` ```
@@ -515,7 +515,7 @@ git commit -m "feat:新增系统配置服务实现(含Redis缓存)"
### Task 7: 后端管理端 Controller — SystemConfigController.java ### Task 7: 后端管理端 Controller — SystemConfigController.java
**Files:** **Files:**
- Create: `backend-single/src/main/java/com/emotion/controller/SystemConfigController.java` - Create: `server/src/main/java/com/emotion/controller/SystemConfigController.java`
- [ ] **Step 1: 创建 SystemConfigController** - [ ] **Step 1: 创建 SystemConfigController**
@@ -575,7 +575,7 @@ public class SystemConfigController {
- [ ] **Step 2: Commit** - [ ] **Step 2: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/SystemConfigController.java git add server/src/main/java/com/emotion/controller/SystemConfigController.java
git commit -m "feat:新增系统配置管理端Controller" git commit -m "feat:新增系统配置管理端Controller"
``` ```
@@ -584,7 +584,7 @@ git commit -m "feat:新增系统配置管理端Controller"
### Task 8: 后端公开接口 — AuthController 新增 loginConfig ### Task 8: 后端公开接口 — AuthController 新增 loginConfig
**Files:** **Files:**
- Modify: `backend-single/src/main/java/com/emotion/controller/AuthController.java` - Modify: `server/src/main/java/com/emotion/controller/AuthController.java`
- [ ] **Step 1: 在 AuthController 中添加 loginConfig 接口** - [ ] **Step 1: 在 AuthController 中添加 loginConfig 接口**
@@ -616,7 +616,7 @@ public Result<LoginConfigResponse> getLoginConfig() {
- [ ] **Step 2: 在 WebMvcConfig 白名单中放行** - [ ] **Step 2: 在 WebMvcConfig 白名单中放行**
修改 `backend-single/src/main/java/com/emotion/config/WebMvcConfig.java`,在 JWT 拦截器的 `excludePathPatterns` 中添加一行: 修改 `server/src/main/java/com/emotion/config/WebMvcConfig.java`,在 JWT 拦截器的 `excludePathPatterns` 中添加一行:
```java ```java
"/auth/loginConfig", // 登录方式配置接口(免登录) "/auth/loginConfig", // 登录方式配置接口(免登录)
@@ -627,8 +627,8 @@ public Result<LoginConfigResponse> getLoginConfig() {
- [ ] **Step 3: Commit** - [ ] **Step 3: Commit**
```bash ```bash
git add backend-single/src/main/java/com/emotion/controller/AuthController.java git add server/src/main/java/com/emotion/controller/AuthController.java
git add backend-single/src/main/java/com/emotion/config/WebMvcConfig.java git add server/src/main/java/com/emotion/config/WebMvcConfig.java
git commit -m "feat:新增公开接口 /auth/loginConfig 并放行白名单" git commit -m "feat:新增公开接口 /auth/loginConfig 并放行白名单"
``` ```
@@ -639,7 +639,7 @@ git commit -m "feat:新增公开接口 /auth/loginConfig 并放行白名单"
- [ ] **Step 1: 编译后端** - [ ] **Step 1: 编译后端**
```bash ```bash
cd backend-single cd server
mvn clean install -DskipTests mvn clean install -DskipTests
``` ```
@@ -42,7 +42,7 @@ purpose: 设计并优化情绪博物馆跨平台服务管理脚本,修复硬
services: services:
backend: backend:
name: "后端服务" name: "后端服务"
dir: "backend-single" dir: "server"
type: "java" type: "java"
port: 19089 port: 19089
health_check_path: "/actuator/health" 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: The backend already has script generation support under:
- `backend-single/src/main/java/com/emotion/controller/EpicScriptController.java` - `server/src/main/java/com/emotion/controller/EpicScriptController.java`
- `backend-single/src/main/java/com/emotion/service/EpicScriptService.java` - `server/src/main/java/com/emotion/service/EpicScriptService.java`
- `backend-single/src/main/java/com/emotion/service/impl/EpicScriptServiceImpl.java` - `server/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/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. 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. 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. 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. 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. 5. Make the implementation modular enough to land in batches without leaving broken flows.
## Non-Goals ## Non-Goals
@@ -11,7 +11,7 @@ Add two complete but independently shippable capabilities:
The implementation should fit the current project shape: 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. - `mini-program`: uni-app/Vue.
- `web-admin`: Vue, Element Plus, ECharts. - `web-admin`: Vue, Element Plus, ECharts.
- Deployment target: `101.200.208.45` with passwordless SSH. - Deployment target: `101.200.208.45` with passwordless SSH.
@@ -13,7 +13,7 @@
现有实现包含: 现有实现包含:
- `web-admin/src/views/aiconfig/AiConfigList.vue`:AI 配置列表、编辑、测试、测试后保存。 - `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、启用禁用、默认配置、测试后更新。 - `AiConfigController``AiConfigService``AiConfigServiceImpl`:配置 CRUD、启用禁用、默认配置、测试后更新。
- `AiChatServiceImpl`:包含大量 Coze 专用调用、请求组装、SSE 解析、工作流调用和日志记录逻辑。 - `AiChatServiceImpl`:包含大量 Coze 专用调用、请求组装、SSE 解析、工作流调用和日志记录逻辑。
- `docs/dify平台接口.md`:Dify 平台接口文档,当前重点使用 `/chat-messages` - `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` | | 修改 | `server/src/main/java/com/emotion/dto/request/ai/AiRuntimeRequest.java` |
| 修改 | `backend-single/src/main/java/com/emotion/service/AiRuntimeService.java` | | 修改 | `server/src/main/java/com/emotion/service/AiRuntimeService.java` |
| 修改 | `backend-single/src/main/java/com/emotion/service/impl/AiRuntimeServiceImpl.java` | | 修改 | `server/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/controller/AiRoutingController.java` |
| 修改 | `web-admin/src/types/aiconfig.ts` | | 修改 | `web-admin/src/types/aiconfig.ts` |
| 修改 | `web-admin/src/api/aiconfig.ts` | | 修改 | `web-admin/src/api/aiconfig.ts` |
| 修改 | `web-admin/src/views/aiconfig/AiRoutingList.vue` | | 修改 | `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/views/aiconfig/AiRoutingList.vue` |
| 修改 | `web-admin/src/types/aiconfig.ts` | | 修改 | `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. 风险 ## 4. 风险
@@ -8,7 +8,7 @@ purpose: 为所有 Controller 及关联 DTO 补全 OpenAPI 中文注解
## 1. 目标 ## 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. 注解规范 ## 2. 注解规范
@@ -31,7 +31,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
**保持不变的项** **保持不变的项**
- URL 路径(如 `/emotion-museum-admin/`)— 保持兼容 - URL 路径(如 `/emotion-museum-admin/`)— 保持兼容
- 目录名(`web/``web-admin/``backend-single/`)— 避免构建断裂 - 目录名(`web/``web-admin/``server/`)— 避免构建断裂
- 数据库表名前缀(如 `emotion_record` → 保持)— 避免 Entity/Table 映射断裂 - 数据库表名前缀(如 `emotion_record` → 保持)— 避免 Entity/Table 映射断裂
## 第 1 步:文档层(无风险) ## 第 1 步:文档层(无风险)
@@ -43,7 +43,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
- `README.md` - `README.md`
- `docs/superpowers/` 下所有 .md - `docs/superpowers/` 下所有 .md
- 各模块下的 `部署说明.md``技术方案.md``后端代码规范.md` - 各模块下的 `部署说明.md``技术方案.md``后端代码规范.md`
- `backend-single/部署说明.md``backend-single/后端项目结构.md` - `server/部署说明.md``server/后端项目结构.md`
**操作**:批量 sed 替换中文 `情绪博物馆``开心星球`,英文 `Emotion Museum``Happy Planet``emotion-museum``happy-planet` **操作**:批量 sed 替换中文 `情绪博物馆``开心星球`,英文 `Emotion Museum``Happy Planet``emotion-museum``happy-planet`
@@ -73,13 +73,13 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
**影响范围**:配置文件、部署脚本、nginx、systemd service **影响范围**:配置文件、部署脚本、nginx、systemd service
### 3.1 应用配置 ### 3.1 应用配置
- `backend-single/src/main/resources/application.yml``spring.application.name` - `server/src/main/resources/application.yml``spring.application.name`
- `backend-single/src/main/resources/application-*.yml` — 同上 - `server/src/main/resources/application-*.yml` — 同上
- 日志路径、应用描述等配置中的 `emotion-museum` - 日志路径、应用描述等配置中的 `emotion-museum`
### 3.2 部署脚本 ### 3.2 部署脚本
- `deploy.sh``deploy.py` - `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/deploy.sh``web/deploy.py`
- `web-admin/deploy.sh``web-admin/deploy.py` - `web-admin/deploy.sh``web-admin/deploy.py`
- 各脚本中的路径引用、日志路径、提示文案 - 各脚本中的路径引用、日志路径、提示文案
@@ -91,8 +91,8 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
- jar 文件名、日志路径引用中的 `emotion-museum` - jar 文件名、日志路径引用中的 `emotion-museum`
### 3.4 systemd Service ### 3.4 systemd Service
- `backend-single/asr-service/emotion-museum-asr.service``happy-planet-asr.service` - `server/asr-service/emotion-museum-asr.service``happy-planet-asr.service`
- `backend-single/tts-service/emotion-museum-tts.service``happy-planet-tts.service` - `server/tts-service/emotion-museum-tts.service``happy-planet-tts.service`
- 内部路径和描述中的 `emotion-museum` - 内部路径和描述中的 `emotion-museum`
### 3.5 工具脚本 ### 3.5 工具脚本
@@ -118,7 +118,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
### 4.1 Java 包名重命名 ### 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` 中的包名引用 2. 更新 `pom.xml` 中的包名引用
3. 用 sed 批量替换所有 `.java` 文件中 `package com.emotion``package com.happyplanet` 3. 用 sed 批量替换所有 `.java` 文件中 `package com.emotion``package com.happyplanet`
4. 用 sed 批量替换所有 `.java` 文件中 `import com.emotion``import com.happyplanet` 4. 用 sed 批量替换所有 `.java` 文件中 `import com.emotion``import com.happyplanet`
@@ -126,7 +126,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
6. 处理编译错误(可能有遗漏的引用) 6. 处理编译错误(可能有遗漏的引用)
**测试目录** **测试目录**
- `backend-single/src/test/java/com/emotion/` 同样需要迁移 - `server/src/test/java/com/emotion/` 同样需要迁移
- `.java` 文件中的 `package``import` 语句 - `.java` 文件中的 `package``import` 语句
### 4.2 SQL 文件 ### 4.2 SQL 文件
@@ -139,7 +139,7 @@ purpose: 全项目品牌重命名方案,从"情绪博物馆"到"开心星球"
- `USE emotion_museum``USE happy_planet` - `USE emotion_museum``USE happy_planet`
### 4.3 其他底层引用 ### 4.3 其他底层引用
- `backend-single/create_api_tables.sql` 中的数据库名 - `server/create_api_tables.sql` 中的数据库名
- `.gitignore` 中的路径引用(如有) - `.gitignore` 中的路径引用(如有)
**验证** **验证**
@@ -27,7 +27,7 @@ purpose: 设计接口管理页面的中文描述补全和测试面板表单化
### 3.1 Controller 注解补全 ### 3.1 Controller 注解补全
`backend-single/src/main/java/com/emotion/controller/` 下所有 Controller 补全注解: `server/src/main/java/com/emotion/controller/` 下所有 Controller 补全注解:
**类级别注解:** **类级别注解:**
```java ```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/EndpointList.vue` | 操作列加"测试"按钮,新增 `showTest` 方法 |
| `web-admin/src/views/endpoint/EndpointDetailDialog.vue` | 新增 `defaultTab` prop,测试面板改造:参数表单 + JSON 预填充 + 请求头展示 | | `web-admin/src/views/endpoint/EndpointDetailDialog.vue` | 新增 `defaultTab` prop,测试面板改造:参数表单 + JSON 预填充 + 请求头展示 |
| `web-admin/src/api/endpoint.ts` | 类型定义无需修改(`operationId` 已存在) | | `web-admin/src/api/endpoint.ts` | 类型定义无需修改(`operationId` 已存在) |
| `backend-single/src/main/java/com/emotion/controller/*.java` | 补全 @Tag/@Operation/@Parameter/@Schema 注解(按 4 个批次) | | `server/src/main/java/com/emotion/controller/*.java` | 补全 @Tag/@Operation/@Parameter/@Schema 注解(按 4 个批次) |
| `backend-single/src/main/java/com/emotion/dto/request/**/*.java` | 补全 @Schema 注解(请求体参数描述来源) | | `server/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/dto/response/**/*.java` | 补全 @Schema 注解(响应体参数描述来源,可选) |
## 5. 实施顺序 ## 5. 实施顺序
@@ -202,7 +202,7 @@ public Result<PageResult<AiCallLog>> queryCallLogs(@RequestBody @Valid AiCallLog
### Request 对象 ### 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 ```java
@Schema(description = "AI 调用日志查询请求") @Schema(description = "AI 调用日志查询请求")
@@ -14,7 +14,7 @@ purpose: 在管理后台调用日志列表中增加"调用用户"列,显示用
### 1. 后端 — 实体新增字段 ### 1. 后端 — 实体新增字段
**文件**: `backend-single/src/main/java/com/emotion/entity/AiCallLog.java` **文件**: `server/src/main/java/com/emotion/entity/AiCallLog.java`
`userId` 字段下方新增: `userId` 字段下方新增:
@@ -31,7 +31,7 @@ ALTER TABLE t_ai_call_log ADD COLUMN user_name VARCHAR(100) COMMENT '用户昵
### 3. 后端 — 日志保存时写入 userName ### 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(...)` 之后补充: 两处日志创建位置(第 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/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/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`. - `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. - `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 current backend issues JWT plus Redis-backed access/refresh tokens through `AuthServiceImpl`.
- The mini program manifest already has a WeChat appid: `wxaf2eaba72d28f0e4`. - 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()` 底层 - 不改 `ssh_command()` / `run_ssh_args()` 底层
- 不增加 `--dry-run` 模式 - 不增加 `--dry-run` 模式
- 不改 nginx 配置文件本身 - 不改 nginx 配置文件本身
@@ -51,7 +51,7 @@ alter table emotion_museum.t_user_profile
### 2. 实体类扩展 ### 2. 实体类扩展
文件:`backend-single/src/main/java/com/emotion/entity/UserProfile.java` 文件:`server/src/main/java/com/emotion/entity/UserProfile.java`
新增字段(与数据库列名通过 `@TableField` 映射): 新增字段(与数据库列名通过 `@TableField` 映射):
@@ -67,15 +67,15 @@ alter table emotion_museum.t_user_profile
以下三个文件新增相同 5 个字段: 以下三个文件新增相同 5 个字段:
- `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java` - `server/src/main/java/com/emotion/dto/request/userprofile/UserProfileCreateRequest.java`
- `backend-single/src/main/java/com/emotion/dto/request/userprofile/UserProfileUpdateRequest.java` - `server/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/response/userprofile/UserProfileResponse.java`
`UserProfileResponse` 中的 `birthday` 使用 `@JsonFormat(pattern = "yyyy-MM-dd")` 注解,与现有日期字段保持一致。 `UserProfileResponse` 中的 `birthday` 使用 `@JsonFormat(pattern = "yyyy-MM-dd")` 注解,与现有日期字段保持一致。
### 4. Service 层 ### 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))` 会自动映射同名字段。 无需改动。`BeanUtils.copyProperties``BeanUtil.copyProperties(..., CopyOptions.create().setIgnoreNullValue(true))` 会自动映射同名字段。
@@ -186,10 +186,10 @@ registrationData: {
| 文件 | 改动类型 | 说明 | | 文件 | 改动类型 | 说明 |
|------|----------|------| |------|----------|------|
| `sql/emotion_museum_ddl.sql` | 追加 | 5 个 ALTER TABLE 语句 | | `sql/emotion_museum_ddl.sql` | 追加 | 5 个 ALTER TABLE 语句 |
| `backend-single/.../entity/UserProfile.java` | 修改 | 新增 5 个字段 | | `server/.../entity/UserProfile.java` | 修改 | 新增 5 个字段 |
| `backend-single/.../request/.../UserProfileCreateRequest.java` | 修改 | 新增 5 个字段 | | `server/.../request/.../UserProfileCreateRequest.java` | 修改 | 新增 5 个字段 |
| `backend-single/.../request/.../UserProfileUpdateRequest.java` | 修改 | 新增 5 个字段 | | `server/.../request/.../UserProfileUpdateRequest.java` | 修改 | 新增 5 个字段 |
| `backend-single/.../response/.../UserProfileResponse.java` | 修改 | 新增 5 个字段 | | `server/.../response/.../UserProfileResponse.java` | 修改 | 新增 5 个字段 |
| `mini-program/src/services/userProfile.js` | 修改 | 双向转换增加 5 个字段 | | `mini-program/src/services/userProfile.js` | 修改 | 双向转换增加 5 个字段 |
| `mini-program/src/stores/app.js` | 修改 | `registrationData` 扩展 | | `mini-program/src/stores/app.js` | 修改 | `registrationData` 扩展 |
| `mini-program/src/pages/main/RecordView.vue` | 修改 | 去除写死默认值和 sampleEvents | | `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 | | 1 | `server/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 | | 2 | `server/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:}` 空兜底) | | 3 | `server/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 | | 4 | `server/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 | | 5 | `server/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()` 显式声明 | | 6 | `server/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)` 返回脱敏的友好提示 | | 7 | `server/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,只在异常对象和日志中) | | 8 | `server/src/main/java/com/emotion/dto/wechat/WechatCodeSessionResponse.java` | **不动** | 0 行 | **保持纯 DTO**rawBody 不放在 DTO,只在异常对象和日志中) |
**总计**:2 重写 + 3 新增 + 3 修改,约 280 行 Java + 2 行 YAML。 **总计**: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 | | 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` 响应日志 | | 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` | | 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` 实体新增两个字段: - `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` 字段。 - `entity/UserProfile.java`:新增 `personalityTagLibrary``hobbyLibrary` 两个 `String` 字段。
- `controller/UserProfileController.java`:无需新增接口,入参 DTO 通过 `UserProfileUpdateRequest` / `UserProfileCreateRequest` 已支持新字段透传。 - `controller/UserProfileController.java`:无需新增接口,入参 DTO 通过 `UserProfileUpdateRequest` / `UserProfileCreateRequest` 已支持新字段透传。
@@ -213,7 +213,7 @@ if (后端返回的 personalityTagLibrary 为空) {
- `dto/request/userprofile/UserProfileCreateRequest.java`:同上。 - `dto/request/userprofile/UserProfileCreateRequest.java`:同上。
- `dto/response/userprofile/UserProfileResponse.java`:新增 `personalityTagLibrary``hobbyLibrary` 两个 `String` 字段。 - `dto/response/userprofile/UserProfileResponse.java`:新增 `personalityTagLibrary``hobbyLibrary` 两个 `String` 字段。
- `service/UserProfileService.java``service/impl/UserProfileServiceImpl.java`:无业务逻辑改动,字段通过 MyBatis-Plus 自动映射持久化。 - `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/`):** **前端(`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` 能看到旧历史)