first commit

This commit is contained in:
ytc1012
2026-02-04 16:11:55 +08:00
commit 0f3ee050dc
165 changed files with 25795 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
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))