diff --git a/app/routers/salon_meetup.py b/app/routers/salon_meetup.py index dd18590..056101d 100644 --- a/app/routers/salon_meetup.py +++ b/app/routers/salon_meetup.py @@ -338,12 +338,55 @@ async def join_status(user_id: str = ""): existing = solan.get_list(1, 1, {"filter": f'user_id = "{user_id}"', "sort": "-created"}) has_record = len(existing.items) > 0 rec = existing.items[0] if existing.items else None - is_complete = bool(rec and rec.get("order_id") and rec.get("amount", 0) > 0) + _get = lambda r, k, d=None: getattr(r, k, d) if r else d + is_complete = bool(rec and _get(rec, "order_id") and (_get(rec, "amount", 0) or 0) > 0) return {"hasRecord": has_record, "isComplete": is_complete} except Exception: return {"hasRecord": False, "isComplete": False} +@router.get("/join/by-wechat") +async def join_by_wechat(wechat_id: str = ""): + """按 wechatId 查询 solanRed 记录""" + if not wechat_id or not wechat_id.strip(): + return {"hasRecord": False, "record": None, "isComplete": False, "isWechatFriend": False, "isApproved": False, "isRejected": False, "vip": False} + try: + from ..services import get_pb_client + pb_client = get_pb_client() + solan = pb_client.collection("solanRed") + w = wechat_id.strip().replace("\\", "\\\\").replace('"', '\\"') + existing = solan.get_list(1, 1, {"filter": f'wechatId = "{w}"', "sort": "-created"}) + rec = existing.items[0] if existing.items else None + has_record = rec is not None + _get = lambda r, k, d=None: getattr(r, k, d) if r else d + amount = int(_get(rec, "amount", 0) or 0) if rec else 0 + is_complete = has_record and bool(_get(rec, "order_id")) and amount > 0 + is_wechat_friend = bool(_get(rec, "is_wechat_friend")) if rec else False + is_approved = bool(_get(rec, "is_approved")) if rec else False + is_rejected = bool(_get(rec, "is_rejected")) if rec else False + vip = bool(_get(rec, "vip")) if rec else False + record_dict = None + if rec: + record_dict = { + "user_id": _get(rec, "user_id"), + "amount": amount, + "order_id": _get(rec, "order_id"), + "vip": vip, + } + return { + "hasRecord": has_record, + "record": record_dict, + "isComplete": is_complete, + "isWechatFriend": is_wechat_friend, + "isApproved": is_approved, + "isRejected": is_rejected, + "vip": vip, + } + except Exception as e: + logging.warning(f"salon join by-wechat 查询失败: {e}") + return {"hasRecord": False, "record": None, "isComplete": False, "isWechatFriend": False, "isApproved": False, "isRejected": False, "vip": False} + + class XiaohongshuProfileRequest(BaseModel): url: str @@ -1104,6 +1147,10 @@ async def submit_join(item: dict): from ..services import get_pb_client pb_client = get_pb_client() solan = pb_client.collection("solanRed") + raw_type = item.get("type", "") + # PocketBase type 仅接受 session-1/session-2 等,digital-nomad/volunteer 映射为空 + pb_type = raw_type if raw_type in ("session-1", "session-2") else "" + pb_data = { "user_id": user_id, "nickname": item.get("nickname", ""), @@ -1113,14 +1160,21 @@ async def submit_join(item: dict): "gender": item.get("gender", ""), "education": item.get("education", ""), "gradYear": item.get("gradYear", ""), - "phone": item.get("phone", ""), "single": item.get("single", ""), "media": item.get("media", ""), "calculated_age": item.get("calculated_age", 0), - "type": "", - "order_id": "", - "amount": 0, + "type": pb_type, + "order_id": item.get("order_id", ""), + "amount": item.get("amount", 0), + "xiaohongshu_url": item.get("xiaohongshu_url", ""), + "is_volunteer": bool(item.get("is_volunteer", False)), + "is_wechat_friend": bool(item.get("is_wechat_friend", False)), + "age_range": item.get("age_range", ""), + "first_time": item.get("first_time", ""), } + phone_val = item.get("phone", "") + if phone_val and str(phone_val).strip(): + pb_data["phone"] = str(phone_val).strip() record = solan.create(pb_data) logging.info(f"salon 申请表单提交成功 - user_id: {user_id}, record_id: {record.id}") return {"ok": True, "user_id": user_id, "record_id": record.id}