feat: PLANNING体系首版(00路线图/02任务总表/03执行协议/I-03/I-04/registry42口径)+M1止血交付
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
# 互动之星任务跟踪集成计划
|
||||
|
||||
## 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` (新建)
|
||||
|
||||
```python
|
||||
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` 方法中,文章创建成功后调用:
|
||||
```python
|
||||
from user.utils.task_tracker import track_task
|
||||
track_task(request.user, 'post')
|
||||
```
|
||||
|
||||
### 3. 修改评论创建视图
|
||||
**文件**: `article/views.py`
|
||||
|
||||
在 `ArticleCommentListCreateView.create` 方法中,评论创建成功后调用:
|
||||
```python
|
||||
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次)后,任务标记为已完成
|
||||
- [ ] 任务跟踪失败不影响文章/评论创建
|
||||
Reference in New Issue
Block a user