|
|
|
|
|
|
|
|
from utils.db import sign_up_user, login_user, supabase |
|
|
import gradio as gr |
|
|
|
|
|
def register(email, password, gender, username): |
|
|
"""Handler for the signup process, now including username.""" |
|
|
if not all([email, password, gender, username]): |
|
|
return "β All fields are required.", gr.update(), gr.update(), gr.update(), gr.update() |
|
|
|
|
|
result = sign_up_user(email, password, gender, username) |
|
|
|
|
|
if result and result.user: |
|
|
message = "β
Signup successful! You can now log in." |
|
|
if result.user and not result.session: |
|
|
message = "β
Signup successful! Please check your email to confirm your account." |
|
|
|
|
|
return message, "", "", None, "" |
|
|
|
|
|
if hasattr(result, 'error') and result.error: |
|
|
|
|
|
if 'duplicate key value violates unique constraint "users_username_key"' in result.error.message: |
|
|
return "β Signup Failed: This username is already taken.", gr.update(), gr.update(), gr.update(), gr.update() |
|
|
return f"β Signup Failed: {result.error.message}", gr.update(), gr.update(), gr.update(), gr.update() |
|
|
|
|
|
return "β Signup failed. An unknown error occurred.", gr.update(), gr.update(), gr.update(), gr.update() |
|
|
|
|
|
|
|
|
def login(email, password, current_user_state): |
|
|
"""Handler for login. Now fetches username and gender from the database.""" |
|
|
if not email or not password: |
|
|
return "β Email and password cannot be empty.", current_user_state, gr.update() |
|
|
|
|
|
result = login_user(email, password) |
|
|
|
|
|
if result and result.session: |
|
|
try: |
|
|
|
|
|
profile = supabase.table("users").select("gender, username").eq("id", result.user.id).single().execute() |
|
|
user_gender = profile.data.get("gender") if profile.data else None |
|
|
user_name = profile.data.get("username") if profile.data else "User" |
|
|
except Exception as e: |
|
|
print(f"Could not fetch user profile: {e}") |
|
|
user_gender = None |
|
|
user_name = "User" |
|
|
|
|
|
|
|
|
new_user_state = {"email": email, "id": result.user.id, "logged_in": True, "gender": user_gender, "username": user_name} |
|
|
return f"β
Welcome, {user_name}! Redirecting...", new_user_state, gr.Tabs(selected="prediction_tab") |
|
|
|
|
|
if hasattr(result, 'error') and result.error: |
|
|
return f"β Login Failed: {result.error.message}", current_user_state, gr.update() |
|
|
|
|
|
return "β Login failed. Check credentials or confirm your email.", current_user_state, gr.update() |
|
|
|
|
|
|
|
|
def logout(current_user_state): |
|
|
"""Handler for logout. Clears all state and form fields.""" |
|
|
new_user_state = {"email": None, "id": None, "logged_in": False, "gender": None, "username": None} |
|
|
|
|
|
return ( |
|
|
"π Logged out successfully.", |
|
|
new_user_state, |
|
|
gr.Tabs(selected="home_tab"), |
|
|
"", |
|
|
"", |
|
|
None, |
|
|
None, |
|
|
None, |
|
|
None, |
|
|
None, |
|
|
None, |
|
|
"", |
|
|
gr.update(visible=False), |
|
|
None, |
|
|
None, |
|
|
None |
|
|
) |