feat: complete voice session safety and confirmation flow
This commit is contained in:
@@ -19,12 +19,14 @@ from app.db.database import get_db
|
||||
from app.db.models import User
|
||||
from app.schemas.voice_session_schemas import (
|
||||
VoiceSessionAbandonRequest,
|
||||
VoiceSessionAnalyticsResponse,
|
||||
VoiceSessionCreateRequest,
|
||||
VoiceSessionDetailResponse,
|
||||
VoiceSessionFinalizeRequest,
|
||||
VoiceSessionFinalizeResponse,
|
||||
VoiceSessionSummaryResponse,
|
||||
VoiceTurnAcceptedResponse,
|
||||
VoiceTurnConfirmRequest,
|
||||
VoiceTurnCreateFallbackRequest,
|
||||
VoiceTurnSummaryResponse,
|
||||
VoiceTurnUploadAcceptedResponse,
|
||||
@@ -36,11 +38,13 @@ from app.services.voice_session_service import (
|
||||
create_voice_turn_from_upload_service,
|
||||
finalize_voice_session_service,
|
||||
get_latest_active_voice_session_service,
|
||||
get_voice_session_analytics_service,
|
||||
get_voice_session_detail_service,
|
||||
get_voice_turn_audio_service,
|
||||
get_voice_turn_service,
|
||||
get_voice_turn_user_audio_service,
|
||||
list_voice_sessions_service,
|
||||
resolve_voice_turn_confirmation_service,
|
||||
retry_voice_turn_audio_service,
|
||||
retry_voice_turn_service,
|
||||
)
|
||||
@@ -101,6 +105,16 @@ async def get_latest_active_voice_session(
|
||||
return await get_latest_active_voice_session_service(user.id, db)
|
||||
|
||||
|
||||
@router.get("/voice-sessions/analytics", response_model=VoiceSessionAnalyticsResponse)
|
||||
async def get_voice_session_analytics(
|
||||
days: int | None = Query(default=30, ge=1, le=365),
|
||||
user: User = Depends(require_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""Get aggregate voice co-creation analytics for the current user."""
|
||||
return await get_voice_session_analytics_service(user.id, db, days=days)
|
||||
|
||||
|
||||
@router.get("/voice-sessions/{session_id}", response_model=VoiceSessionDetailResponse)
|
||||
async def get_voice_session(
|
||||
session_id: str,
|
||||
@@ -192,6 +206,27 @@ async def retry_voice_turn(
|
||||
return await retry_voice_turn_service(session_id, turn_id, user.id, db)
|
||||
|
||||
|
||||
@router.post(
|
||||
"/voice-sessions/{session_id}/turns/{turn_id}/confirm",
|
||||
response_model=VoiceTurnSummaryResponse,
|
||||
)
|
||||
async def resolve_voice_turn_confirmation(
|
||||
session_id: str,
|
||||
turn_id: str,
|
||||
request: VoiceTurnConfirmRequest,
|
||||
user: User = Depends(require_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""Resolve one pending confirmation before continuing the session."""
|
||||
return await resolve_voice_turn_confirmation_service(
|
||||
session_id,
|
||||
turn_id,
|
||||
request,
|
||||
user.id,
|
||||
db,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/voice-sessions/{session_id}/turns/{turn_id}/audio")
|
||||
async def get_voice_turn_audio(
|
||||
session_id: str,
|
||||
|
||||
Reference in New Issue
Block a user