# -*- 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()