Files
vscode-workbench/.trae/documents/task-track-integration-plan.md

3.2 KiB
Raw Permalink Blame History

互动之星任务跟踪集成计划

Summary

在用户发表评论/帖子时,调用 tasks.track 接口更新"互动之星"任务进度。

Current State Analysis

已有功能

  • ✅ TaskTrackAPIView 已存在 - POST /api/tasks/track/
  • ✅ "互动之星" 任务已在种子数据中定义(action_type='post', task_type='weekly', target_count=5)
  • ✅ action_type='post' 已在 TaskDefinition.ACTION_TYPE_CHOICES 中定义

问题

  • ❌ 文章创建 (ArticleListCreateView.create) 未调用任务跟踪
  • ❌ 评论创建 (ArticleCommentListCreateView.create) 未调用任务跟踪

Proposed Changes

1. 创建任务跟踪工具函数

文件: user/utils/task_tracker.py (新建)

from django.utils import timezone
from user.models import TaskDefinition, UserTaskProgress

def track_task(user, action_type, count=1):
    """跟踪用户任务进度"""
    now = timezone.localtime(timezone.now())
    daily_period = now.strftime('%Y-%m-%d')
    weekly_period = now.strftime('%Y-W%W')
    
    tasks = TaskDefinition.objects.filter(
        action_type=action_type,
        is_active=True,
    )
    
    updated_tasks = []
    for task in tasks:
        if task.task_type == 'daily':
            period_key = daily_period
        elif task.task_type == 'weekly':
            period_key = weekly_period
        else:
            period_key = 'permanent'
        
        progress = get_or_create_progress(user, task, period_key)
        
        if progress.is_completed and progress.is_claimed:
            continue
        
        progress.current_count = min(
            progress.current_count + count,
            task.target_count
        )
        
        if progress.current_count >= task.target_count and not progress.is_completed:
            progress.is_completed = True
            progress.completed_at = now
        
        progress.save()
        
        updated_tasks.append({
            'id': task.id,
            'name': task.name,
            'current_count': progress.current_count,
            'target_count': task.target_count,
            'is_completed': progress.is_completed,
        })
    
    return updated_tasks

2. 修改文章创建视图

文件: article/views.py

在 ArticleListCreateView.create 方法中,文章创建成功后调用:

from user.utils.task_tracker import track_task
track_task(request.user, 'post')

3. 修改评论创建视图

文件: article/views.py

在 ArticleCommentListCreateView.create 方法中,评论创建成功后调用:

from user.utils.task_tracker import track_task
track_task(request.user, 'post')

Assumptions & Decisions

  1. 调用方式: 使用同步调用(非异步),因为任务跟踪不应阻塞主流程,但需要确保数据一致性
  2. 错误处理: 任务跟踪失败不应影响主流程(文章/评论创建),使用 try-except 捕获异常
  3. action_type: 使用 'post' 匹配"互动之星"任务定义

Verification

  • 创建文章后,任务中心"互动之星"进度 +1
  • 发表评论后,任务中心"互动之星"进度 +1
  • 达到目标次数(5次)后,任务标记为已完成
  • 任务跟踪失败不影响文章/评论创建