| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- from fastapi import APIRouter, Depends, HTTPException, Query
- from sqlalchemy import text
- from sqlalchemy.orm import Session
- from core_domain import ServiceHealth
- from app.application.services import SessionApplicationService
- from app.bootstrap.settings import SessionServiceSettings
- from app.db.session import get_db
- from app.domain.repositories import MessageRepository, RunRequestRepository, SessionRepository
- from app.infrastructure.runtime_client import RuntimeServiceClient, RuntimeServiceClientError
- from app.schemas.message import MessageCreateRequest, MessageResponse
- from app.schemas.run_request import DispatchRunRequest, DispatchRunResponse, RunRequestCreateRequest, RunRequestResponse
- from app.schemas.session import SessionCreateRequest, SessionResponse
- router = APIRouter()
- def get_session_settings() -> SessionServiceSettings:
- return SessionServiceSettings()
- def get_session_application_service(
- db: Session = Depends(get_db),
- settings: SessionServiceSettings = Depends(get_session_settings),
- ) -> SessionApplicationService:
- return SessionApplicationService(
- session_repository=SessionRepository(db),
- message_repository=MessageRepository(db),
- run_request_repository=RunRequestRepository(db),
- runtime_client=RuntimeServiceClient(base_url=settings.runtime_service_url),
- )
- @router.get("/health", response_model=ServiceHealth)
- def health_check(db: Session = Depends(get_db)) -> ServiceHealth:
- db.execute(text("SELECT 1"))
- return ServiceHealth(service="session-service", status="ok", database="ok")
- @router.post("", response_model=SessionResponse)
- def create_session(
- payload: SessionCreateRequest,
- service: SessionApplicationService = Depends(get_session_application_service),
- ) -> SessionResponse:
- entity = service.create_session(payload)
- return SessionResponse.from_entity(entity)
- @router.get("", response_model=list[SessionResponse])
- def list_sessions(
- tenant_id: str = Query(...),
- app_id: str | None = Query(default=None),
- service: SessionApplicationService = Depends(get_session_application_service),
- ) -> list[SessionResponse]:
- return [SessionResponse.from_entity(item) for item in service.list_sessions(tenant_id, app_id)]
- @router.post("/messages", response_model=MessageResponse)
- def create_message(
- payload: MessageCreateRequest,
- service: SessionApplicationService = Depends(get_session_application_service),
- ) -> MessageResponse:
- entity = service.create_message(payload)
- return MessageResponse.from_entity(entity)
- @router.get("/messages", response_model=list[MessageResponse])
- def list_messages(
- tenant_id: str = Query(...),
- session_id: str = Query(...),
- service: SessionApplicationService = Depends(get_session_application_service),
- ) -> list[MessageResponse]:
- return [
- MessageResponse.from_entity(item)
- for item in service.list_messages(tenant_id=tenant_id, session_id=session_id)
- ]
- @router.post("/run-requests", response_model=RunRequestResponse)
- def create_run_request(
- payload: RunRequestCreateRequest,
- service: SessionApplicationService = Depends(get_session_application_service),
- ) -> RunRequestResponse:
- entity = service.create_run_request(payload)
- return RunRequestResponse.from_entity(entity)
- @router.get("/run-requests", response_model=list[RunRequestResponse])
- def list_run_requests(
- tenant_id: str = Query(...),
- session_id: str = Query(...),
- service: SessionApplicationService = Depends(get_session_application_service),
- ) -> list[RunRequestResponse]:
- return [
- RunRequestResponse.from_entity(item)
- for item in service.list_run_requests(tenant_id=tenant_id, session_id=session_id)
- ]
- @router.post("/run-requests/dispatch", response_model=DispatchRunResponse)
- def dispatch_run_request(
- payload: DispatchRunRequest,
- service: SessionApplicationService = Depends(get_session_application_service),
- ) -> DispatchRunResponse:
- try:
- return service.dispatch_run_request(payload)
- except RuntimeServiceClientError as exc:
- raise HTTPException(status_code=502, detail=str(exc)) from exc
|