fix: 修复任务API枚举值访问错误
All checks were successful
continuous-integration/drone/push Build is passing

- 使用 hasattr 检查是否为枚举类型,兼容字符串和枚举
- 移除 get_tasks 中多余的 get_task_detail 调用,使用已加载的关联数据
This commit is contained in:
yuliang_guo
2026-01-31 18:35:17 +08:00
parent fc9775e61f
commit ebf196686f

View File

@@ -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(