Spaces:
Sleeping
Sleeping
File size: 2,110 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 |
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})
|