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)