返回商家 distance

This commit is contained in:
aaron 2025-02-12 21:43:48 +08:00
parent df52173903
commit 9a92b4f29e

View File

@ -99,13 +99,22 @@ async def update_merchant(
@router.get("/{merchant_id}", response_model=ResponseModel) @router.get("/{merchant_id}", response_model=ResponseModel)
async def get_merchant( async def get_merchant(
merchant_id: int, merchant_id: int,
longitude: Optional[float] = None,
latitude: Optional[float] = None,
db: Session = Depends(get_db) db: Session = Depends(get_db)
): ):
"""获取商家详情""" """获取商家详情"""
# 构建基础查询
merchant = db.query( merchant = db.query(
MerchantDB, MerchantDB,
UserDB.phone.label('user_phone'), UserDB.phone.label('user_phone'),
UserDB.nickname.label('user_nickname') UserDB.nickname.label('user_nickname'),
text("CASE WHEN :lat IS NOT NULL AND :lon IS NOT NULL THEN "
"ST_Distance_Sphere(point(longitude, latitude), point(:lon, :lat)) "
"ELSE NULL END as distance").params(
lat=latitude,
lon=longitude
) if longitude and latitude else text("NULL as distance")
).join( ).join(
UserDB, UserDB,
MerchantDB.user_id == UserDB.userid MerchantDB.user_id == UserDB.userid
@ -121,7 +130,8 @@ async def get_merchant(
merchant_data = merchant_info.model_dump() merchant_data = merchant_info.model_dump()
merchant_data.update({ merchant_data.update({
'user_phone': merchant.user_phone, 'user_phone': merchant.user_phone,
'user_nickname': merchant.user_nickname 'user_nickname': merchant.user_nickname,
'distance': round(merchant.distance) if merchant.distance else None
}) })
return success_response(data=merchant_data) return success_response(data=merchant_data)
@ -207,7 +217,8 @@ async def list_merchants(
"product_name": product.name, "product_name": product.name,
"product_image": product.optimized_image_url, "product_image": product.optimized_image_url,
"product_price": float(product.sale_price), "product_price": float(product.sale_price),
"purchase_limit": product.purchase_limit "purchase_limit": product.purchase_limit,
"promotion_text": product.promotion_text
} }
# 处理返回结果 # 处理返回结果