fix: paginate chat detail messages

This commit is contained in:
2026-07-30 15:09:05 +08:00
parent 162658384f
commit 8e2dc1d781
6 changed files with 83 additions and 7 deletions

View File

@@ -83,6 +83,8 @@ def export_chats(
@router.get("/chat/{session_id}")
def chat_detail(
session_id: int,
messagePage: int = Query(default=1, ge=1),
messagePageSize: int = Query(default=20, ge=10, le=100),
db: Session = Depends(get_db),
current_admin: Admin = Depends(get_current_admin),
) -> dict:
@@ -97,10 +99,13 @@ def chat_detail(
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="会话不存在")
session, user = session_row
message_query = select(ChatMessage).where(ChatMessage.session_id == session_id)
message_total = db.scalar(select(func.count()).select_from(message_query.subquery())) or 0
messages = db.scalars(
select(ChatMessage)
.where(ChatMessage.session_id == session_id)
message_query
.order_by(ChatMessage.created_at.asc(), ChatMessage.id.asc())
.offset((messagePage - 1) * messagePageSize)
.limit(messagePageSize)
).all()
ai_logs = db.scalars(
select(AiRequestLog)
@@ -111,6 +116,12 @@ def chat_detail(
{
"session": _chat_row_dict(session, user),
"messages": [_message_dict(item) for item in messages],
"messagesPage": page_result(
[_message_dict(item) for item in messages],
total=message_total,
page=messagePage,
page_size=messagePageSize,
),
"aiLogs": [_ai_log_dict(item, include_prompt=True) for item in ai_logs],
}
)