"""Репозиторий доступа к сообщениям чата (`chat_messages`).""" import uuid from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from models.chat import ChatMessage class ChatMessageRepository: """Инкапсулирует SQL-запросы к сообщениям чата конкретной сессии конференции.""" def __init__(self, session: AsyncSession) -> None: self._session = session async def add( self, *, session_id: uuid.UUID, user_id: uuid.UUID | None, guest_access_id: uuid.UUID | None, author_name: str, text: str, ) -> ChatMessage: """Добавить сообщение чата и вернуть строку с проставленными `id`/`created_at`.""" message = ChatMessage( session_id=session_id, user_id=user_id, guest_access_id=guest_access_id, author_name=author_name, text=text, ) self._session.add(message) await self._session.flush() return message async def last_for_session(self, session_id: uuid.UUID, *, limit: int) -> list[ChatMessage]: """Последние `limit` сообщений сессии в хронологическом порядке (от старых к новым).""" result = await self._session.execute( select(ChatMessage) .where(ChatMessage.session_id == session_id) .order_by(ChatMessage.created_at.desc()) .limit(limit) ) rows = list(result.scalars().all()) rows.reverse() return rows