codenexus / services /user_sync.py
farhan1221's picture
Upload 26 files
91990f9 verified
Raw
History Blame Contribute Delete
1.82 kB
from config.database import get_supabase_admin
import logging
logger = logging.getLogger(__name__)
async def ensure_user_exists(user):
"""
Ensures that a user from auth.users has a corresponding record in public.users.
This handles OAuth users and manual signups uniformly.
"""
if not user:
return None
from config.settings import get_settings
settings = get_settings()
db = get_supabase_admin()
try:
# Check if user already exists
profile = db.table("users").select("*").eq("id", str(user.id)).execute()
# Determine target role (Case-Insensitive)
admin_list = [e.lower() for e in settings.admin_emails]
target_role = "admin" if user.email.lower() in admin_list else "free"
if not profile.data:
# Create user on the fly
display_name = user.user_metadata.get("full_name") or user.email.split("@")[0]
logger.info(f"Syncing new user to public table: {user.email} as {target_role}")
db.table("users").insert({
"id": str(user.id),
"email": user.email,
"display_name": display_name,
"role": target_role,
"is_banned": False
}).execute()
else:
# Existing user - Check if they need an admin upgrade
current_role = profile.data[0].get("role")
if target_role == "admin" and current_role != "admin":
logger.info(f"Upgrading existing user to admin: {user.email}")
db.table("users").update({"role": "admin"}).eq("id", str(user.id)).execute()
return True
except Exception as e:
logger.error(f"Error in ensure_user_exists: {str(e)}")
return False