Files
2026-03-17 18:32:44 +03:00

53 lines
1.7 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, Query, Request
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database.session import get_session
from app.models import User
from app.schemas.pipeline_chat_sch import PipelineDialogListItemResponse
from app.services.pipeline_dialog_service import PipelineDialogService
from app.utils.business_logger import log_business_event
from app.utils.token_manager import get_current_user
router = APIRouter(tags=["Pipelines"])
@router.get("/dialogs", response_model=list[PipelineDialogListItemResponse])
async def list_pipeline_dialogs(
request: Request,
limit: int = Query(default=20, ge=1, le=200),
offset: int = Query(default=0, ge=0),
session: AsyncSession = Depends(get_session),
current_user: User = Depends(get_current_user),
):
trace_id = getattr(request.state, "traceId", None)
dialog_service = PipelineDialogService(session)
dialogs = await dialog_service.list_dialogs(
user_id=current_user.id,
limit=limit,
offset=offset,
)
response = [
PipelineDialogListItemResponse(
dialog_id=dialog.id,
title=dialog.title,
last_status=dialog.last_status,
last_pipeline_id=dialog.last_pipeline_id,
last_message_preview=dialog.last_message_preview,
created_at=dialog.created_at,
updated_at=dialog.updated_at,
)
for dialog in dialogs
]
log_business_event(
"pipeline_dialogs_listed",
trace_id=trace_id,
user_id=str(current_user.id),
limit=limit,
offset=offset,
result_count=len(response),
)
return response