from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from app.auth.service import get_current_user from app.chats.schemas import ChatCreateRequest, ChatDetailRead, ChatRead from app.chats.service import create_chat_for_user, get_chat_for_user, get_chats_for_user from app.database.session import get_db from app.users.models import User router = APIRouter(prefix="/chats", tags=["chats"]) @router.get("", response_model=list[ChatRead]) async def list_chats( limit: int = 50, before_id: int | None = None, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ) -> list[ChatRead]: return await get_chats_for_user(db, user_id=current_user.id, limit=limit, before_id=before_id) @router.post("", response_model=ChatRead) async def create_chat( payload: ChatCreateRequest, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ) -> ChatRead: return await create_chat_for_user(db, creator_id=current_user.id, payload=payload) @router.get("/{chat_id}", response_model=ChatDetailRead) async def get_chat( chat_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user), ) -> ChatDetailRead: chat, members = await get_chat_for_user(db, chat_id=chat_id, user_id=current_user.id) return ChatDetailRead( id=chat.id, type=chat.type, title=chat.title, created_at=chat.created_at, members=members, )