创作记录-管理后台完成
This commit is contained in:
@@ -199,26 +199,47 @@ async def list_tasks(
|
||||
description="每页返回数量,范围 1~100",
|
||||
examples=[20],
|
||||
),
|
||||
user_id: str | None = Query(
|
||||
None,
|
||||
description="查询相关用户ID的对应记录[管理后台]",
|
||||
examples=["0019e0a448a23114888"],
|
||||
),
|
||||
user_name: str | None = Query(
|
||||
None,
|
||||
description="查询相关用户名的对应记录[管理后台]",
|
||||
examples=["demo"],
|
||||
),
|
||||
current_user: User = Depends(get_current_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
is_admin = False
|
||||
if current_user.user_type == 'admin':
|
||||
is_admin = True
|
||||
else:
|
||||
user_id = current_user.id
|
||||
|
||||
total, items = await list_async_generation_tasks(
|
||||
db,
|
||||
current_user.id,
|
||||
user_id,
|
||||
user_name,
|
||||
gen_type,
|
||||
status,
|
||||
page,
|
||||
page_size,
|
||||
is_admin,
|
||||
)
|
||||
|
||||
# ====================== 在这里加排序(最新在前)======================
|
||||
# 按 created_at 降序(没有则用 id 降序)
|
||||
items_sorted = sorted(
|
||||
items,
|
||||
key=lambda x: x.created_at if x.created_at is not None else x.id,
|
||||
reverse=False # 降序
|
||||
)
|
||||
return GenerationAITaskListOut(total=total, items=[record_to_out(i) for i in items_sorted])
|
||||
if not is_admin:
|
||||
# 按 created_at 降序(没有则用 id 降序)
|
||||
items_sorted = sorted(
|
||||
items,
|
||||
key=lambda x: x.created_at if x.created_at is not None else x.id,
|
||||
reverse=False # 升序
|
||||
)
|
||||
else:
|
||||
items_sorted = items
|
||||
return GenerationAITaskListOut(total=total, items=[record_to_out(task=i, is_admin=is_admin) for i in items_sorted])
|
||||
|
||||
|
||||
@router.get(
|
||||
|
||||
@@ -250,6 +250,8 @@ class GenerationAITaskOut(BaseModel):
|
||||
"example": {
|
||||
"id": "0019e0a44895b6d837d",
|
||||
"source_type": "chat_task",
|
||||
"user_id": None,
|
||||
"user_name": None,
|
||||
"project_id": None,
|
||||
"gen_type": "image",
|
||||
"generation_mode": "chatapi_async",
|
||||
@@ -302,6 +304,14 @@ class GenerationAITaskOut(BaseModel):
|
||||
"chat_task",
|
||||
description="历史记录来源。ChatGenerationTask 新任务历史固定为 chat_task",
|
||||
)
|
||||
user_id: str | None = Field(
|
||||
None,
|
||||
description="用户ID,管理后台调用存在对应值,通常为 null",
|
||||
)
|
||||
user_name: str | None = Field(
|
||||
None,
|
||||
description="用户名称,管理后台调用存在对应值,通常为 null",
|
||||
)
|
||||
project_id: str | None = Field(
|
||||
None,
|
||||
description="项目ID。当前 /generation-ai 任务不绑定项目,通常为 null",
|
||||
@@ -374,6 +384,8 @@ class GenerationAITaskListOut(BaseModel):
|
||||
{
|
||||
"id": "0019e0a44895b6d837d",
|
||||
"source_type": "chat_task",
|
||||
"user_id": None,
|
||||
"user_name": None,
|
||||
"project_id": None,
|
||||
"gen_type": "image",
|
||||
"generation_mode": "chatapi_async",
|
||||
|
||||
@@ -311,12 +311,14 @@ async def create_async_generation_task(db: AsyncSession, current_user: User, req
|
||||
return task
|
||||
|
||||
|
||||
def record_to_out(task: ChatGenerationTask) -> GenerationAITaskOut:
|
||||
def record_to_out(task: ChatGenerationTask, is_admin: bool = False) -> GenerationAITaskOut:
|
||||
refs = _parse_json(task.media_references)
|
||||
snapshot = engine_snapshot_out(_parse_json(task.engine_snapshot_json))
|
||||
return GenerationAITaskOut(
|
||||
id=task.id,
|
||||
# project_id=None,
|
||||
user_id=task.user_id if is_admin else None,
|
||||
user_name=getattr(task, "username", None) if is_admin else None,
|
||||
project_id=None,
|
||||
gen_type=task.gen_type,
|
||||
generation_mode=task.generation_mode,
|
||||
pipeline_stage=task.pipeline_stage,
|
||||
@@ -376,28 +378,55 @@ def engine_snapshot_out(snapshot: dict) -> dict:
|
||||
|
||||
async def list_async_generation_tasks(
|
||||
db: AsyncSession,
|
||||
user_id: str,
|
||||
user_id: str | None,
|
||||
user_name: str | None,
|
||||
gen_type: str | None,
|
||||
status: str | None,
|
||||
page: int,
|
||||
page_size: int,
|
||||
is_admin: bool = False,
|
||||
):
|
||||
query = select(ChatGenerationTask).where(
|
||||
ChatGenerationTask.user_id == user_id,
|
||||
if is_admin:
|
||||
query = (
|
||||
select(ChatGenerationTask, User.username)
|
||||
.join(User, ChatGenerationTask.user_id == User.id)
|
||||
)
|
||||
|
||||
if user_name:
|
||||
query = query.where(User.username.like(f"%{user_name}%"))
|
||||
else:
|
||||
query = select(ChatGenerationTask)
|
||||
|
||||
query = query.where(
|
||||
ChatGenerationTask.generation_mode == "chatapi_async",
|
||||
ChatGenerationTask.deleted_at.is_(None),
|
||||
)
|
||||
|
||||
if user_id:
|
||||
query = query.where(ChatGenerationTask.user_id == user_id)
|
||||
|
||||
if gen_type:
|
||||
query = query.where(ChatGenerationTask.gen_type == gen_type)
|
||||
|
||||
if status:
|
||||
query = query.where(ChatGenerationTask.status == status)
|
||||
|
||||
count_query = select(func.count()).select_from(query.subquery())
|
||||
total = (await db.execute(count_query)).scalar_one()
|
||||
|
||||
result = await db.execute(
|
||||
query.order_by(ChatGenerationTask.created_at.desc())
|
||||
.offset((page - 1) * page_size)
|
||||
.limit(page_size)
|
||||
)
|
||||
|
||||
if is_admin:
|
||||
tasks = []
|
||||
for task, username in result.all():
|
||||
task.username = username
|
||||
tasks.append(task)
|
||||
return total, tasks
|
||||
|
||||
return total, list(result.scalars().all())
|
||||
|
||||
def _normalize_history_gen_type(gen_type: str | None) -> str:
|
||||
|
||||
Reference in New Issue
Block a user