File size: 2,966 Bytes
90f252d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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