fix: refactor conversation pagination to use SQLAlchemy session manag… (#11956)
Signed-off-by: -LAN- <laipz8200@outlook.com>
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
from typing import Optional, Union
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from core.app.entities.app_invoke_entities import InvokeFrom
|
||||
from extensions.ext_database import db
|
||||
from libs.infinite_scroll_pagination import InfiniteScrollPagination
|
||||
@@ -13,6 +16,8 @@ class WebConversationService:
|
||||
@classmethod
|
||||
def pagination_by_last_id(
|
||||
cls,
|
||||
*,
|
||||
session: Session,
|
||||
app_model: App,
|
||||
user: Optional[Union[Account, EndUser]],
|
||||
last_id: Optional[str],
|
||||
@@ -23,24 +28,25 @@ class WebConversationService:
|
||||
) -> InfiniteScrollPagination:
|
||||
include_ids = None
|
||||
exclude_ids = None
|
||||
if pinned is not None:
|
||||
pinned_conversations = (
|
||||
db.session.query(PinnedConversation)
|
||||
.filter(
|
||||
if pinned is not None and user:
|
||||
stmt = (
|
||||
select(PinnedConversation.conversation_id)
|
||||
.where(
|
||||
PinnedConversation.app_id == app_model.id,
|
||||
PinnedConversation.created_by_role == ("account" if isinstance(user, Account) else "end_user"),
|
||||
PinnedConversation.created_by == user.id,
|
||||
)
|
||||
.order_by(PinnedConversation.created_at.desc())
|
||||
.all()
|
||||
)
|
||||
pinned_conversation_ids = [pc.conversation_id for pc in pinned_conversations]
|
||||
pinned_conversation_ids = session.scalars(stmt).all()
|
||||
|
||||
if pinned:
|
||||
include_ids = pinned_conversation_ids
|
||||
else:
|
||||
exclude_ids = pinned_conversation_ids
|
||||
|
||||
return ConversationService.pagination_by_last_id(
|
||||
session=session,
|
||||
app_model=app_model,
|
||||
user=user,
|
||||
last_id=last_id,
|
||||
|
Reference in New Issue
Block a user