File size: 3,511 Bytes
7a4f631
 
 
 
 
 
a1146b3
 
 
 
 
 
7a4f631
 
a1146b3
7a4f631
 
 
 
 
a1146b3
 
7a4f631
 
 
a1146b3
 
7a4f631
 
a1146b3
 
7a4f631
 
 
a1146b3
7a4f631
a1146b3
 
 
 
7a4f631
a1146b3
7a4f631
a1146b3
 
 
7a4f631
a1146b3
 
 
 
 
 
 
 
 
7a4f631
a1146b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7a4f631
 
a1146b3
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
84
85
86
87
88
89
90
91
92
93
import streamlit as st
from supabase import create_client, Client
import os

def init_supabase():
    """Initialize Supabase client"""
    try:
        url = st.secrets.get("SUPABASE_URL")
        key = st.secrets.get("SUPABASE_KEY")
    except:
        url = os.getenv("SUPABASE_URL")
        key = os.getenv("SUPABASE_KEY")
    
    if not url or not key:
        st.error("Supabase credentials not found.")
        return None
    
    return create_client(url, key)

def test_database_connection():
    """Test database connection and user data"""
    st.title("πŸ” Database Connection Test")
    
    supabase = init_supabase()
    if not supabase:
        st.error("Failed to initialize Supabase client")
        return
    
    try:
        # Test 1: Get all users
        st.subheader("πŸ“Š All Users in Database")
        response = supabase.table('users').select('*').execute()
        
        if response.data:
            st.success(f"Found {len(response.data)} users:")
            for user in response.data:
                st.write(f"**{user.get('username')}** - {user.get('full_name')} ({user.get('role')})")
                st.write(f"  Email: {user.get('email')}")
                st.write(f"  Password: '{user.get('password')}'")
                st.write("---")
        else:
            st.warning("No users found in database")
        
        # Test 2: Test function call
        st.subheader("πŸ”§ Testing get_user_by_username Function")
        test_username = "instructor"
        
        try:
            response = supabase.rpc('get_user_by_username', {'username_param': test_username}).execute()
            if response.data:
                st.success(f"Function call successful for '{test_username}':")
                st.write(response.data[0])
            else:
                st.warning(f"Function returned no data for '{test_username}'")
        except Exception as e:
            st.error(f"Function call failed: {str(e)}")
        
        # Test 3: Direct table query
        st.subheader("πŸ“‹ Direct Table Query")
        try:
            response = supabase.table('users').select('*').eq('username', test_username).execute()
            if response.data:
                st.success(f"Direct query successful for '{test_username}':")
                st.write(response.data[0])
            else:
                st.warning(f"Direct query returned no data for '{test_username}'")
        except Exception as e:
            st.error(f"Direct query failed: {str(e)}")
        
        # Test 4: Test password verification
        st.subheader("πŸ” Password Verification Test")
        test_password = "password123"
        
        # Try function first
        try:
            response = supabase.rpc('get_user_by_username', {'username_param': test_username}).execute()
            if response.data:
                user = response.data[0]
                stored_password = user.get('password')
                st.write(f"Username: {test_username}")
                st.write(f"Stored password: '{stored_password}'")
                st.write(f"Test password: '{test_password}'")
                st.write(f"Password match: {stored_password == test_password}")
            else:
                st.warning("No user data to test password")
        except Exception as e:
            st.error(f"Password test failed: {str(e)}")
        
    except Exception as e:
        st.error(f"Database test failed: {str(e)}")

if __name__ == "__main__":
    test_database_connection()