topfans/docs/superpowers/plans/2026-04-14-task-service-remaining-issues.md

203 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TaskService 未完成事项
> 生成时间2026-04-14
## 一、阻塞性问题(阻断编译/运行)
### 1. Proto 编译未执行
**问题**:编译脚本已修改但未执行,`pkg/proto/` 下无生成代码。
**影响**`go build ./...` 会失败,找不到 `task.pb.go``task.triple.go`
**操作**
```bash
cd backend && sh scripts/compile-proto.sh
```
**前提**:环境需安装 `go``protoc`
---
### 2. Dubbo Server 注册代码被注释
**文件**`backend/services/taskService/main.go:120-124`
```go
// 注意:这里需要 TaskMobileService 和 TaskInternalService 的 RegisterHandler
// 这些会在 proto 编译后生成。在 proto 编译之前,这里会报编译错误。
// Task 15 完成 proto 编译后,需要将下面的注释替换为实际的注册代码。
logger.Logger.Info(fmt.Sprintf("taskService configured on port %d, awaiting proto registration", *port))
```
**影响**:服务启动后没有注册任何 RPC handler客户端无法调用。
**修复**proto 编译后需添加类似以下代码:
```go
pb.RegisterTaskMobileServiceHandler(srv, mobileProvider)
pb.RegisterTaskInternalServiceHandler(srv, internalProvider)
```
---
## 二、代码缺陷(运行时 Bug
### 3. `UpdateOnboardingProgress` 方法缺失
**文件**`backend/services/taskService/repository/onboarding_repo.go`
**问题**
- 接口 `OnboardingRepository` 缺少 `UpdateOnboardingProgress` 方法
- `onboarding_service.go:172-176``updateOnboardingProgress` 直接返回 `nil`,未实际更新数据
```go
func (s *onboardingService) updateOnboardingProgress(progress *model.UserOnboardingProgress) error {
// 需要在 repository 中添加 UpdateOnboardingProgress 方法
// 这里暂时用 GORM 直接更新
return nil // ← BUG: 没有真正更新
}
```
**影响**`CompleteGuide` 完成任务后进度状态不会更新。
**修复**:在 `onboarding_repo.go` 添加:
```go
// OnboardingRepository 接口添加:
UpdateOnboardingProgress(progress *model.UserOnboardingProgress) error
// 实现:
func (r *onboardingRepository) UpdateOnboardingProgress(progress *model.UserOnboardingProgress) error {
progress.UpdatedAt = gorm.NowFunc().Unix()
return r.db.Save(progress).Error
}
```
然后 `onboarding_service.go` 中调用 `s.onboardingRepo.UpdateOnboardingProgress(progress)`
---
### 4. `ListCompletedDailyTasks` 方法缺失
**文件**`backend/services/taskService/repository/daily_task_repo.go`
**问题**`daily_task_service.go:204` 调用 `s.dailyRepo.ListCompletedDailyTasks()`,但该方法不存在。
**影响**`ClaimAllDailyTasks` 调用会编译报错。
**修复**:在 `daily_task_repo.go` 添加:
```go
// DailyTaskRepository 接口添加:
ListCompletedDailyTasks(userID, starID int64) ([]*model.UserDailyTaskProgress, error)
// 实现:
func (r *dailyTaskRepository) ListCompletedDailyTasks(userID, starID int64) ([]*model.UserDailyTaskProgress, error) {
var progressList []*model.UserDailyTaskProgress
err := r.db.Where("user_id = ? AND star_id = ? AND status = ?", userID, starID, "completed").
Find(&progressList).Error
return progressList, err
}
```
---
### 5. `CompleteGuide` 中死代码
**文件**`backend/services/taskService/onboarding_service.go:154-156`
```go
if err := s.onboardingRepo.UpdateOnboardingStatus(&model.UserOnboardingStatus{UserID: userID}); err != nil {
// UpdateOnboardingStatus is for status table, not progress
} // ← 无意义的空调用,应该删除
```
**影响**:代码冗余,不影响功能但影响可读性。
**修复**:删除第 154-156 行。
---
## 三、前端缺陷
### 6. `guide.vue` 任务完成状态判断错误
**文件**`frontend/pages/tasks/guide.vue:129-134`
```javascript
function isTaskCompleted(stage, taskKey) {
// 这里需要根据实际数据结构判断
// 假设 completed 状态的任务 key 会被标记
// 暂时返回 false实际需要后端返回更详细的状态
return false // ← BUG: 永远返回 false
}
```
**影响**:引导页面的任务永远显示为未完成,用户无法正确看到进度。
**修复**:参考后端 `GetOnboardingStatus` 的逻辑,从 `stage.required_task_keys` 和进度数据判断。
---
### 7. `daily_task_service.go` 错误被忽略
**文件**`backend/services/taskService/service/daily_task_service.go:229,234`
```go
// 发放水晶奖励
if def.CrystalReward > 0 {
s.userClient.UpdateCrystalBalance(ctx, userID, starID, def.CrystalReward) // ← 错误被忽略
}
// 发放经验奖励
if def.ExpReward > 0 {
s.userClient.AddExperience(ctx, userID, starID, def.ExpReward) // ← 错误被忽略
}
```
**影响**`ClaimAllDailyTasks` 中奖励发放失败时不报错,可能导致用户未收到奖励。
**修复**:添加错误处理和日志。
---
## 四、已完成的修复
### 8. `AddExperience` RPC 已添加
- **user.proto**:已添加 `AddExperienceRequest/Response` 消息和 RPC 定义
- **user_rpc_client.go**:已有完整实现
等待 proto 编译后即可使用。
---
## 五、待执行的操作清单
| # | 操作 | 优先级 | 依赖 |
|---|------|--------|------|
| 1 | 执行 `sh scripts/compile-proto.sh` | P0 | go + protoc 环境 |
| 2 | 添加 `UpdateOnboardingProgress` 到 onboarding_repo | P0 | 无 |
| 3 | 添加 `ListCompletedDailyTasks` 到 daily_task_repo | P0 | 无 |
| 4 | 修复 main.go Dubbo 注册代码 | P0 | #1 |
| 5 | 修复 guide.vue isTaskCompleted | P1 | 无 |
| 6 | 删除 onboarding_service.go 死代码 | P2 | 无 |
| 7 | 修复 ClaimAllDailyTasks 错误处理 | P2 | 无 |
---
## 六、执行顺序建议
```
1. 先执行 proto 编译(#1
2. 修复 onboarding_repo + daily_task_repo#2, #3
3. 修复 main.go 注册代码(#4
4. 编译验证go build ./...
5. 修复前端 guide.vue#5
6. 可选优化(#6, #7
```