topfans/docs/superpowers/plans/2026-04-14-task-service-remaining-issues.md
2026-04-15 14:11:07 +08:00

6.0 KiB
Raw Blame History

TaskService 未完成事项

生成时间2026-04-14

一、阻塞性问题(阻断编译/运行)

1. Proto 编译未执行

问题:编译脚本已修改但未执行,pkg/proto/ 下无生成代码。

影响go build ./... 会失败,找不到 task.pb.gotask.triple.go

操作

cd backend && sh scripts/compile-proto.sh

前提:环境需安装 goprotoc。git


2. Dubbo Server 注册代码被注释

文件backend/services/taskService/main.go:120-124

// 注意:这里需要 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 编译后需添加类似以下代码:

pb.RegisterTaskMobileServiceHandler(srv, mobileProvider)
pb.RegisterTaskInternalServiceHandler(srv, internalProvider)

二、代码缺陷(运行时 Bug

3. UpdateOnboardingProgress 方法缺失

文件backend/services/taskService/repository/onboarding_repo.go

问题

  • 接口 OnboardingRepository 缺少 UpdateOnboardingProgress 方法
  • onboarding_service.go:172-176updateOnboardingProgress 直接返回 nil,未实际更新数据
func (s *onboardingService) updateOnboardingProgress(progress *model.UserOnboardingProgress) error {
    // 需要在 repository 中添加 UpdateOnboardingProgress 方法
    // 这里暂时用 GORM 直接更新
    return nil  // ← BUG: 没有真正更新
}

影响CompleteGuide 完成任务后进度状态不会更新。

修复:在 onboarding_repo.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 添加:

// 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

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

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

// 发放水晶奖励
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 编译后即可使用。


五、已完成的修复清单

# 修复项 文件 状态
2 UpdateOnboardingProgress 方法 onboarding_repo.go 已完成
3 ListCompletedDailyTasks 方法 daily_task_repo.go 已完成
5 guide.vue isTaskCompleted guide.vue 已完成
6 onboarding_service.go 死代码 service 层重构 已解决(新建服务文件)
7 ClaimAllDailyTasks 错误处理 daily_task_service.go 已完成
9 Service 层创建 service/*.go 已完成
10 gorm.NowFunc() 修复 revenue_repo.go, onboarding_repo.go 已完成
11 Proto 编译 pkg/proto/task/*.go 已完成
12 main.go Dubbo 注册代码 main.go 已完成

六、已完成的操作清单

所有计划中的任务已完成TaskService 现已可以成功编译。


七、编译验证

cd backend && go build ./services/taskService/...
# ✅ BUILD SUCCESS