Files
Messenger/app/messages/repository.py
2026-03-07 21:31:38 +03:00

42 lines
1.1 KiB
Python

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.messages.models import Message, MessageType
async def create_message(
db: AsyncSession,
*,
chat_id: int,
sender_id: int,
message_type: MessageType,
text: str | None,
) -> Message:
message = Message(chat_id=chat_id, sender_id=sender_id, type=message_type, text=text)
db.add(message)
await db.flush()
return message
async def get_message_by_id(db: AsyncSession, message_id: int) -> Message | None:
result = await db.execute(select(Message).where(Message.id == message_id))
return result.scalar_one_or_none()
async def list_chat_messages(
db: AsyncSession,
chat_id: int,
*,
limit: int = 50,
before_id: int | None = None,
) -> list[Message]:
query = select(Message).where(Message.chat_id == chat_id)
if before_id is not None:
query = query.where(Message.id < before_id)
result = await db.execute(query.order_by(Message.id.desc()).limit(limit))
return list(result.scalars().all())
async def delete_message(db: AsyncSession, message: Message) -> None:
await db.delete(message)