from fastapi import APIRouter, Depends, Query, status from sqlalchemy.ext.asyncio import AsyncSession from app.api.dependencies.auth import build_request_context from app.api.dependencies.database import get_session from app.api.schemas.conversations import FeedbackRequest, HandoverRequest from app.core.contracts import RequestContext from app.service.conversation_service import ConversationService router = APIRouter(prefix="/api/v1", tags=["conversations"]) @router.get("/conversations/{session_id}/messages") async def list_messages( session_id: str, limit: int = Query(default=20, ge=1, le=100), context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: return await ConversationService(session).messages(session_id, context, limit) @router.post("/conversation-messages/{message_id}/feedback", status_code=status.HTTP_201_CREATED) async def create_feedback( message_id: int, payload: FeedbackRequest, context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: return await ConversationService(session).feedback( message_id, context, payload.rating, payload.feedback_type, payload.feedback_content) @router.post("/conversations/{session_id}/handover-requests", status_code=status.HTTP_202_ACCEPTED) async def request_handover( session_id: str, payload: HandoverRequest, context: RequestContext = Depends(build_request_context), # noqa: B008 session: AsyncSession = Depends(get_session), # noqa: B008 ) -> dict[str, object]: return await ConversationService(session).handover( session_id, context, payload.reason_code, payload.reason_detail)