diff --git a/rag/services/postgres_service.py b/rag/services/postgres_service.py index aaebab1..a76335f 100644 --- a/rag/services/postgres_service.py +++ b/rag/services/postgres_service.py @@ -270,10 +270,18 @@ class PostgresService: user_jid, role, content, room_jid ) - async def get_history(self, user_jid: str, room_jid: str = None, limit: int = 100) -> List[Dict]: + async def get_history(self, user_jid: str, room_jid: str = None, limit: int = 100, offset: int = 0) -> List[Dict]: """ - Возвращает последние limit сообщений, отсортированных от старых к новым. - Если room_jid указан – история комнаты, иначе – личная история пользователя. + Возвращает историю диалога с поддержкой пагинации. + + Аргументы: + user_jid: JID пользователя. + room_jid: JID комнаты (None для личного чата). + limit: максимальное количество сообщений. + offset: смещение (сколько пропустить). + + Возвращает: + List[Dict]: список сообщений с ключами role, content, timestamp. """ async with self.pool.acquire() as conn: if room_jid: @@ -283,9 +291,9 @@ class PostgresService: FROM history WHERE room_jid = $1 ORDER BY timestamp ASC - LIMIT $2 + LIMIT $2 OFFSET $3 """, - room_jid, limit + room_jid, limit, offset ) else: rows = await conn.fetch( @@ -294,9 +302,9 @@ class PostgresService: FROM history WHERE user_jid = $1 AND room_jid IS NULL ORDER BY timestamp ASC - LIMIT $2 + LIMIT $2 OFFSET $3 """, - user_jid, limit + user_jid, limit, offset ) return [dict(row) for row in rows]