Files
WoMenQuNaJu/MeetSpot/api/routers/miniprogram.py
2026-02-04 16:11:55 +08:00

51 lines
1.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from typing import List, Optional, Dict, Any
from fastapi import APIRouter, HTTPException, Depends
from pydantic import BaseModel
from app.tool.meetspot_recommender import CafeRecommender
from app.logger import logger
router = APIRouter(prefix="/api/miniprogram", tags=["miniprogram"])
class LocationItem(BaseModel):
lng: float
lat: float
address: Optional[str] = ""
name: Optional[str] = ""
class CalculateRequest(BaseModel):
locations: List[LocationItem]
keywords: Optional[str] = "咖啡馆"
requirements: Optional[str] = ""
min_rating: Optional[float] = 0.0
max_distance: Optional[int] = 100000
price_range: Optional[str] = ""
@router.post("/calculate")
async def calculate_meetspot(request: CalculateRequest):
"""小程序核心计算接口:根据坐标直接计算推荐"""
try:
recommender = CafeRecommender()
# 转换 locations 为 list of dict
location_dicts = [loc.model_dump() for loc in request.locations]
result = await recommender.execute_for_miniprogram(
locations=location_dicts,
keywords=request.keywords,
user_requirements=request.requirements,
min_rating=request.min_rating,
max_distance=request.max_distance,
price_range=request.price_range
)
if not result.get("success", False):
# 业务逻辑错误也返回 200但在 body 中包含 error
return result
return result
except Exception as e:
logger.error(f"Miniprogram calculation failed: {e}")
raise HTTPException(status_code=500, detail=str(e))