- 使用 hasattr 检查是否为枚举类型,兼容字符串和枚举 - 移除 get_tasks 中多余的 get_task_detail 调用,使用已加载的关联数据
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user