diff --git a/backend/app/api/v1/tasks.py b/backend/app/api/v1/tasks.py index f5484d9..208f5c3 100644 --- a/backend/app/api/v1/tasks.py +++ b/backend/app/api/v1/tasks.py @@ -43,13 +43,20 @@ async def create_task( # 构建响应 courses = [link.course.name for link in task.course_links] + # 安全获取枚举值(兼容字符串和枚举类型) + priority_val = task.priority.value if hasattr(task.priority, 'value') else task.priority + status_val = task.status.value if hasattr(task.status, 'value') else task.status + completed_count = sum( + 1 for a in task.assignments + if (a.status.value if hasattr(a.status, 'value') else a.status) == "completed" + ) return ResponseModel( data=TaskResponse( id=task.id, title=task.title, description=task.description, - priority=task.priority.value, - status=task.status.value, + priority=priority_val, + status=status_val, creator_id=task.creator_id, deadline=task.deadline, requirements=task.requirements, @@ -58,7 +65,7 @@ async def create_task( updated_at=task.updated_at, courses=courses, assigned_count=len(task.assignments), - completed_count=sum(1 for a in task.assignments if a.status.value == "completed") + completed_count=completed_count ) ) @@ -77,26 +84,33 @@ async def get_tasks( # 构建响应 items = [] for task in tasks: - # 加载关联数据 - task_detail = await task_service.get_task_detail(db, task.id) - if task_detail: - courses = [link.course.name for link in task_detail.course_links] - items.append(TaskResponse( - id=task.id, - title=task.title, - description=task.description, - priority=task.priority.value, - status=task.status.value, - creator_id=task.creator_id, - deadline=task.deadline, - requirements=task.requirements, - progress=task.progress, - created_at=task.created_at, - updated_at=task.updated_at, - courses=courses, - assigned_count=len(task_detail.assignments), - completed_count=sum(1 for a in task_detail.assignments if a.status.value == "completed") - )) + # 安全获取枚举值 + priority_val = task.priority.value if hasattr(task.priority, 'value') else task.priority + status_val = task.status.value if hasattr(task.status, 'value') else task.status + + # 使用已加载的关联数据(通过 selectinload) + courses = [link.course.name for link in task.course_links] if task.course_links else [] + completed_count = sum( + 1 for a in task.assignments + if (a.status.value if hasattr(a.status, 'value') else a.status) == "completed" + ) if task.assignments else 0 + + items.append(TaskResponse( + id=task.id, + title=task.title, + description=task.description, + priority=priority_val, + status=status_val, + creator_id=task.creator_id, + deadline=task.deadline, + requirements=task.requirements, + progress=task.progress, + created_at=task.created_at, + updated_at=task.updated_at, + courses=courses, + assigned_count=len(task.assignments) if task.assignments else 0, + completed_count=completed_count + )) return ResponseModel( data=PaginatedResponse.create(