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,26 +84,33 @@ 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]
items.append(TaskResponse( # 使用已加载的关联数据(通过 selectinload
id=task.id, courses = [link.course.name for link in task.course_links] if task.course_links else []
title=task.title, completed_count = sum(
description=task.description, 1 for a in task.assignments
priority=task.priority.value, if (a.status.value if hasattr(a.status, 'value') else a.status) == "completed"
status=task.status.value, ) if task.assignments else 0
creator_id=task.creator_id,
deadline=task.deadline, items.append(TaskResponse(
requirements=task.requirements, id=task.id,
progress=task.progress, title=task.title,
created_at=task.created_at, description=task.description,
updated_at=task.updated_at, priority=priority_val,
courses=courses, status=status_val,
assigned_count=len(task_detail.assignments), creator_id=task.creator_id,
completed_count=sum(1 for a in task_detail.assignments if a.status.value == "completed") 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( return ResponseModel(
data=PaginatedResponse.create( data=PaginatedResponse.create(