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()
    )