89 lines
2.0 KiB
Python
89 lines
2.0 KiB
Python
"""City and city-analysis API routes."""
|
|
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, BackgroundTasks, Request
|
|
|
|
from web.services.city_api import (
|
|
get_city_detail_aggregate_payload,
|
|
get_city_detail_payload,
|
|
get_city_market_scan_payload,
|
|
get_city_summary_payload,
|
|
list_cities_payload,
|
|
)
|
|
|
|
router = APIRouter(tags=["city"])
|
|
|
|
|
|
@router.get("/api/cities")
|
|
async def list_cities(request: Request):
|
|
return await list_cities_payload(request)
|
|
|
|
|
|
@router.get("/api/city/{name}")
|
|
async def city_detail(
|
|
request: Request,
|
|
background_tasks: BackgroundTasks,
|
|
name: str,
|
|
force_refresh: bool = False,
|
|
depth: str = "panel",
|
|
):
|
|
return await get_city_detail_payload(
|
|
request,
|
|
name,
|
|
force_refresh=force_refresh,
|
|
depth=depth,
|
|
)
|
|
|
|
|
|
@router.get("/api/city/{name}/summary")
|
|
async def city_summary(
|
|
request: Request,
|
|
background_tasks: BackgroundTasks,
|
|
name: str,
|
|
force_refresh: bool = False,
|
|
):
|
|
return await get_city_summary_payload(
|
|
request,
|
|
name,
|
|
force_refresh=force_refresh,
|
|
)
|
|
|
|
|
|
@router.get("/api/city/{name}/detail")
|
|
async def city_detail_aggregate(
|
|
request: Request,
|
|
name: str,
|
|
force_refresh: bool = False,
|
|
market_slug: Optional[str] = None,
|
|
target_date: Optional[str] = None,
|
|
):
|
|
return await get_city_detail_aggregate_payload(
|
|
request,
|
|
name,
|
|
force_refresh=force_refresh,
|
|
market_slug=market_slug,
|
|
target_date=target_date,
|
|
)
|
|
|
|
|
|
@router.get("/api/city/{name}/market-scan")
|
|
async def city_market_scan(
|
|
request: Request,
|
|
background_tasks: BackgroundTasks,
|
|
name: str,
|
|
force_refresh: bool = False,
|
|
market_slug: Optional[str] = None,
|
|
target_date: Optional[str] = None,
|
|
lite: bool = False,
|
|
):
|
|
return await get_city_market_scan_payload(
|
|
request,
|
|
background_tasks,
|
|
name,
|
|
force_refresh=force_refresh,
|
|
market_slug=market_slug,
|
|
target_date=target_date,
|
|
lite=lite,
|
|
)
|