feat: 专家库显示服务联系状态,未联系需先建立才能咨询
- 后端 /experts 返回 connected 字段(基于 expert_consultations 表) - 前端卡片显示"已联系"徽章 - 未联系时按钮为"建立联系",调用 selectExpert API - 已联系后按钮变为"咨询",可跳转对应场景 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
@@ -1282,9 +1282,32 @@ class RatingRequest(BaseModel):
|
||||
|
||||
|
||||
@app.get("/experts")
|
||||
def list_experts(category: str | None = None):
|
||||
"""列出专家,支持按分类筛选(legal/decision/emotion/life)。"""
|
||||
return {"results": expert_store.list_experts(category=category, status="active")}
|
||||
def list_experts(category: str | None = None, authorization: str | None = Header(default=None)):
|
||||
"""列出专家,支持按分类筛选(legal/decision/emotion/life)。
|
||||
登录后额外返回 connected 字段(是否已建立服务联系)。
|
||||
"""
|
||||
results = expert_store.list_experts(category=category, status="active")
|
||||
# 查询当前用户已建立联系的专家ID集合
|
||||
phone = get_current_phone(authorization)
|
||||
if phone and results:
|
||||
conn = _matter_dsn()
|
||||
try:
|
||||
cur = conn.cursor()
|
||||
expert_ids = [r["id"] for r in results]
|
||||
cur.execute(
|
||||
"SELECT DISTINCT expert_id FROM expert_consultations "
|
||||
"WHERE user_phone = %s AND expert_id = ANY(%s)",
|
||||
(phone, expert_ids),
|
||||
)
|
||||
connected_ids = {r[0] for r in cur.fetchall()}
|
||||
for r in results:
|
||||
r["connected"] = r["id"] in connected_ids
|
||||
finally:
|
||||
conn.close()
|
||||
else:
|
||||
for r in results:
|
||||
r["connected"] = False
|
||||
return {"results": results}
|
||||
|
||||
|
||||
@app.get("/experts/{expert_id}")
|
||||
|
||||
Reference in New Issue
Block a user