dialogflowAPI / app /api /v1 /location.py
OnlyBiggg
refactor code
df37f6e
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 LocationRequest
from app.dto.response import DialogFlowResponseAPI
from app.services.location_service import LocationService
router = APIRouter(prefix="/location", tags=["Location"])
@router.post("/origin-city-from-office")
@inject
async def get_origin_city_from_office(
request: Request,
service: LocationService = Depends(Provide[Container.location_service]),
):
body = await request.json()
params = body.get("sessionInfo", {}).get("parameters", {})
try:
data = LocationRequest(**params)
except Exception:
logger.error("Invalid location parameters", exc_info=True)
raise HTTPException(status_code=400, detail="Invalid location parameters")
if data.origin_office and not data.departure_city:
_, _, city = await service.get_city_by_office(
office_name=data.origin_office, role="origin"
)
return DialogFlowResponseAPI(parameters={"departure_city": city})
return DialogFlowResponseAPI(parameters={"departure_city": data.departure_city})
@router.post("/dest-city-from-office")
@inject
async def get_dest_city_from_office(
request: Request,
service: LocationService = Depends(Provide[Container.location_service]),
):
body = await request.json()
params = body.get("sessionInfo", {}).get("parameters", {})
try:
data = LocationRequest.model_validate(params)
except Exception:
logger.error("Invalid location parameters", exc_info=True)
raise HTTPException(status_code=400, detail="Invalid location parameters")
if data.dest_office and not data.destination_city:
city = await service.get_city_by_office(
office_name=data.dest_office, role="dest"
)
return DialogFlowResponseAPI(parameters={"destination_city": city})
return DialogFlowResponseAPI(parameters={"destination_city": data.destination_city})