39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from uuid import UUID
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import selectinload
|
|
from ..database import get_db
|
|
from ..models.message import Message
|
|
from ..schemas.message import MessageResponse
|
|
|
|
router = APIRouter(prefix="/api/rooms", tags=["messages"])
|
|
|
|
|
|
@router.get("/{room_id}/messages", response_model=list[MessageResponse])
|
|
async def get_messages(
|
|
room_id: UUID,
|
|
limit: int = 50,
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
result = await db.execute(
|
|
select(Message)
|
|
.options(selectinload(Message.user))
|
|
.where(Message.room_id == room_id)
|
|
.order_by(Message.created_at.desc())
|
|
.limit(limit)
|
|
)
|
|
messages = result.scalars().all()
|
|
|
|
return [
|
|
MessageResponse(
|
|
id=msg.id,
|
|
room_id=msg.room_id,
|
|
user_id=msg.user_id,
|
|
username=msg.user.username,
|
|
text=msg.text,
|
|
created_at=msg.created_at,
|
|
)
|
|
for msg in reversed(messages)
|
|
]
|