File size: 1,795 Bytes
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
from fastapi.params import Depends
from loguru import logger
from typing_extensions import Annotated
from fastapi import APIRouter, Request
from dependency_injector.wiring import inject, Provide


from app.dependencies.containers import Container
from app.dto.request import DialogflowWebhookRequest
from app.dto.response import DialogflowResponseBuilder
from app.dto.user import UserDTO
from app.services.user_service import UserService
from app.ner.services.ner import NER


router = APIRouter(prefix="/user", tags=["User"])


def get_ner_model(request: Request) -> NER:
    """
    Dependency to get the NER model.
    This can be used to inject the NER model into the endpoint.
    """
    return request.app.state.ner


@router.post("/info")
@inject
async def get_user_info(
    request: Request, service: UserService = Depends(Provide[Container.user_service])
):
    body = await request.json()
    body = DialogflowWebhookRequest(**body)
    params = body.get_parameters()

    user: UserDTO = await service.get_user()
    user_exists: bool = user is not None

    parameters = {
        "is_user_exist": user_exists,
        "user_name": user.user_name if user_exists else None,
        "phone_number": user.phone_number if user_exists else None,
        "email": user.email if user_exists else None,
    }
    return DialogflowResponseBuilder().set_parameters(parameters).build()


@router.post("/extract-name")
@inject
async def extract_user_name(
    request: Request, service: UserService = Depends(Provide[Container.user_service])
):
    body = await request.json()
    body = DialogflowWebhookRequest(**body)

    text = body.get_text()

    user_name = await service.extract_user_name(text)

    return DialogflowResponseBuilder().set_parameters({"user_name": user_name}).build()