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] 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( return ResponseModel(
data=TaskResponse( data=TaskResponse(
id=task.id, id=task.id,
title=task.title, title=task.title,
description=task.description, description=task.description,
priority=task.priority.value, priority=priority_val,
status=task.status.value, status=status_val,
creator_id=task.creator_id, creator_id=task.creator_id,
deadline=task.deadline, deadline=task.deadline,
requirements=task.requirements, requirements=task.requirements,
@@ -58,7 +65,7 @@ async def create_task(
updated_at=task.updated_at, updated_at=task.updated_at,
courses=courses, courses=courses,
assigned_count=len(task.assignments), assigned_count=len(task.assignments),
completed_count=sum(1 for a in task.assignments if a.status.value == "completed") completed_count=completed_count
) )
) )
@@ -77,16 +84,23 @@ async def get_tasks(
# 构建响应 # 构建响应
items = [] items = []
for task in tasks: for task in tasks:
# 加载关联数据 # 安全获取枚举值
task_detail = await task_service.get_task_detail(db, task.id) priority_val = task.priority.value if hasattr(task.priority, 'value') else task.priority
if task_detail: status_val = task.status.value if hasattr(task.status, 'value') else task.status
courses = [link.course.name for link in task_detail.course_links]
# 使用已加载的关联数据(通过 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( items.append(TaskResponse(
id=task.id, id=task.id,
title=task.title, title=task.title,
description=task.description, description=task.description,
priority=task.priority.value, priority=priority_val,
status=task.status.value, status=status_val,
creator_id=task.creator_id, creator_id=task.creator_id,
deadline=task.deadline, deadline=task.deadline,
requirements=task.requirements, requirements=task.requirements,
@@ -94,8 +108,8 @@ async def get_tasks(
created_at=task.created_at, created_at=task.created_at,
updated_at=task.updated_at, updated_at=task.updated_at,
courses=courses, courses=courses,
assigned_count=len(task_detail.assignments), assigned_count=len(task.assignments) if task.assignments else 0,
completed_count=sum(1 for a in task_detail.assignments if a.status.value == "completed") completed_count=completed_count
)) ))
return ResponseModel( return ResponseModel(