Spaces:
Sleeping
Sleeping
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()
|