Improve coverage

This commit is contained in:
2026-02-20 06:02:57 +00:00
parent 5ceaadb20c
commit 734cade8d9
28 changed files with 2719 additions and 387 deletions

View File

@@ -2,20 +2,17 @@
import logging
from typing import Annotated
from uuid import uuid4
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field
from capa_de_integracion.dependencies import (
get_firestore_service,
get_quick_reply_content_service,
get_redis_service,
get_quick_reply_session_service,
)
from capa_de_integracion.models.quick_replies import QuickReplyScreen
from capa_de_integracion.services.firestore_service import FirestoreService
from capa_de_integracion.services.quick_reply_content import QuickReplyContentService
from capa_de_integracion.services.redis_service import RedisService
from capa_de_integracion.services.quick_reply_session_service import (
QuickReplySessionService,
)
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/api/v1/quick-replies", tags=["quick-replies"])
@@ -47,11 +44,9 @@ class QuickReplyScreenResponse(BaseModel):
@router.post("/screen")
async def start_quick_reply_session(
request: QuickReplyScreenRequest,
redis_service: Annotated[RedisService, Depends(get_redis_service)],
firestore_service: Annotated[FirestoreService, Depends(get_firestore_service)],
quick_reply_content_service: Annotated[QuickReplyContentService, Depends(
get_quick_reply_content_service,
)],
quick_reply_session_service: Annotated[
QuickReplySessionService, Depends(get_quick_reply_session_service),
],
) -> QuickReplyScreenResponse:
"""Start a quick reply FAQ session for a specific screen.
@@ -60,52 +55,22 @@ async def start_quick_reply_session(
Args:
request: Quick reply screen request
redis_service: Redis service instance
firestore_service: Firestore service instance
quick_reply_content_service: Quick reply content service instance
quick_reply_session_service: Quick reply session service instance
Returns:
Detect intent response with quick reply questions
Quick reply screen response with session ID and questions
"""
def _validate_phone(phone: str) -> None:
if not phone or not phone.strip():
msg = "Phone number is required"
raise ValueError(msg)
try:
telefono = request.usuario.telefono
pantalla_contexto = request.pantalla_contexto
_validate_phone(telefono)
session = await firestore_service.get_session_by_phone(telefono)
if session:
session_id = session.session_id
await firestore_service.update_pantalla_contexto(
session_id, pantalla_contexto,
)
session.pantalla_contexto = pantalla_contexto
else:
session_id = str(uuid4())
user_id = f"user_by_phone_{telefono.replace(' ', '').replace('-', '')}"
session = await firestore_service.create_session(
session_id, user_id, telefono, pantalla_contexto,
)
# Cache session
await redis_service.save_session(session)
logger.info(
"Created quick reply session %s for screen: %s",
session_id,
pantalla_contexto,
result = await quick_reply_session_service.start_quick_reply_session(
telefono=request.usuario.telefono,
_nombre=request.usuario.nombre,
pantalla_contexto=request.pantalla_contexto,
)
# Load quick replies
quick_replies = await quick_reply_content_service.get_quick_replies(
pantalla_contexto,
)
return QuickReplyScreenResponse(
responseId=session_id, quick_replies=quick_replies,
responseId=result.session_id,
quick_replies=result.quick_replies,
)
except ValueError as e: