| from datetime import datetime |
| from config import supabase |
|
|
| async def get_or_create_user(wa_id: str, name: str = None) -> dict: |
| """Get existing user or create new one""" |
| if not supabase: |
| return {"wa_id": wa_id, "name": name or "Unknown"} |
| |
| try: |
| |
| response = supabase.table("users").select("*").eq("wa_id", wa_id).execute() |
| |
| if response.data: |
| |
| user = response.data[0] |
| if name and name != user.get("name"): |
| supabase.table("users").update({"name": name, "updated_at": datetime.utcnow().isoformat()}).eq("wa_id", wa_id).execute() |
| user["name"] = name |
| return user |
| else: |
| |
| new_user = { |
| "wa_id": wa_id, |
| "name": name or "Unknown", |
| "created_at": datetime.utcnow().isoformat(), |
| "updated_at": datetime.utcnow().isoformat() |
| } |
| response = supabase.table("users").insert(new_user).execute() |
| return response.data[0] if response.data else new_user |
| |
| except Exception as e: |
| print(f"Error in get_or_create_user: {e}") |
| return {"wa_id": wa_id, "name": name or "Unknown"} |
|
|
| async def update_user_activity(wa_id: str): |
| """Update user's last activity timestamp""" |
| if not supabase: |
| return |
| |
| try: |
| supabase.table("users").update({"updated_at": datetime.utcnow().isoformat()}).eq("wa_id", wa_id).execute() |
| except Exception as e: |
| print(f"Error updating user activity: {e}") |
|
|
| async def get_user(wa_id: str): |
| """Get user by WhatsApp ID""" |
| if not supabase: |
| return None |
| |
| try: |
| response = supabase.table("users").select("*").eq("wa_id", wa_id).execute() |
| return response.data[0] if response.data else None |
| except Exception as e: |
| print(f"Error getting user: {e}") |
| return None |
|
|
| async def list_users(limit: int = 50, offset: int = 0): |
| """List all users with pagination""" |
| if not supabase: |
| return {"users": [], "count": 0} |
| |
| try: |
| response = supabase.table("users").select("*").range(offset, offset + limit - 1).order("created_at", desc=True).execute() |
| return {"users": response.data, "count": len(response.data)} |
| except Exception as e: |
| print(f"Error listing users: {e}") |
| return {"users": [], "count": 0} |
|
|
| async def update_user_name(wa_id: str, name: str): |
| """Update user name""" |
| if not supabase: |
| return None |
| |
| try: |
| response = supabase.table("users").update({ |
| "name": name, |
| "updated_at": datetime.utcnow().isoformat() |
| }).eq("wa_id", wa_id).execute() |
| |
| return response.data[0] if response.data else None |
| except Exception as e: |
| print(f"Error updating user: {e}") |
| return None |