Spaces:
Sleeping
Sleeping
File size: 1,906 Bytes
df37f6e b24aee4 60ad1c1 b24aee4 df37f6e b24aee4 df37f6e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
from loguru import logger
from fastapi import APIRouter, Depends, HTTPException, Request
from dependency_injector.wiring import inject, Provide
from app.dependencies.containers import Container
from app.dto.request import DialogflowWebhookRequest, TimeRequest
from app.dto.response import (
DialogServiceResult,
DialogflowResponseBuilder,
)
from app.services.time_service import TimeService
router = APIRouter(prefix="/time", tags=["Time"])
@router.post("/check-ambiguity")
@inject
async def check_time_ambiguity(
request: Request, service: TimeService = Depends(Provide[Container.time_service])
):
body = await request.json()
body = DialogflowWebhookRequest(**body)
params = body.get_parameters()
data = TimeRequest(**params)
if not data.time_select:
logger.info(f"[check_time_ambiguity] Received data: {data}")
logger.error("Time is empty")
raise HTTPException(status_code=400, detail="Time is required")
is_ambiguous = service.check_time_ambiguity(time=data.time_select)
return (
DialogflowResponseBuilder()
.set_parameters({"is_time_ambiguous": is_ambiguous})
.build()
)
@router.post("/ambiguity-selection")
@inject
async def time_ambiguity_selection(
request: Request, service: TimeService = Depends(Provide[Container.time_service])
):
body = await request.json()
body = DialogflowWebhookRequest(**body)
params = body.get_parameters()
time = params.get("time_select")
if not time:
logger.error("Time selection is required")
raise HTTPException(status_code=400, detail="Time selection is required")
rs: DialogServiceResult = service.get_time_ambiguous_selection(time)
return (
DialogflowResponseBuilder()
.add_text(rs.text)
.add_choice_chips(options=rs.options)
.set_parameters(rs.parameters)
.build()
)
|