PropBot / database.py
zenaight
simplified and broken up code
90f252d
Raw
History Blame
2.97 kB
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:
# Try to get existing user
response = supabase.table("users").select("*").eq("wa_id", wa_id).execute()
if response.data:
# User exists, update if name provided
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:
# Create new user
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