Первоначальная версия VidConf

This commit is contained in:
2026-07-23 01:04:01 +03:00
commit 896455381a
335 changed files with 61527 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
"""Репозиторий доступа к сообщениям чата (`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