Files
assist/src/repositories/conversation_repo.py

44 lines
1.6 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
from sqlalchemy import desc
from src.core.models import ChatSession, Conversation
from src.core.database import db_manager
from .base import BaseRepository
class ChatSessionRepository(BaseRepository):
model_class = ChatSession
def list_sessions(self, tenant_id=None, page=1, per_page=20, status=None, search=None):
with db_manager.get_session() as session:
q = self._base_query(session, tenant_id)
if status:
q = q.filter(ChatSession.status == status)
if search:
from sqlalchemy import or_
q = q.filter(or_(
ChatSession.title.contains(search),
ChatSession.session_id.contains(search)
))
q = q.order_by(desc(ChatSession.updated_at))
total = q.count()
items = q.offset((page - 1) * per_page).limit(per_page).all()
return {
'sessions': [self._to_dict(s) for s in items],
'page': page, 'per_page': per_page,
'total': total, 'total_pages': (total + per_page - 1) // per_page
}
class ConversationRepository(BaseRepository):
model_class = Conversation
def get_by_session_id(self, session_id: str, tenant_id=None):
with db_manager.get_session() as session:
q = self._base_query(session, tenant_id).filter(Conversation.session_id == session_id)
items = q.order_by(Conversation.timestamp).all()
return [self._to_dict(c) for c in items]
chat_session_repo = ChatSessionRepository()
conversation_repo = ConversationRepository()