auto-commit for ad035f1e-2cd6-45ee-a7f8-bc6fe1fcb52f

This commit is contained in:
emergent-agent-e1
2025-11-08 14:37:02 +00:00
parent 8f181c3502
commit 30fa4cfe2c
5 changed files with 109 additions and 0 deletions
+105
View File
@@ -252,6 +252,111 @@ async def get_proposals():
logger.error(f"Error fetching proposals: {e}")
raise HTTPException(status_code=500, detail=str(e))
# ========================================
# AUTHENTICATION API ENDPOINTS
# ========================================
@api_router.post("/auth/signup", response_model=AuthResponse)
async def signup(request: SignUpRequest):
"""
Sign up a new user with Supabase
"""
try:
# Sign up with Supabase Auth
auth_response = supabase.auth.sign_up({
"email": request.email,
"password": request.password,
})
if not auth_response.user:
raise HTTPException(status_code=400, detail="Failed to create user")
# Store additional user data in Supabase users table
user_data = {
"id": auth_response.user.id,
"email": request.email,
"first_name": request.first_name,
"last_name": request.last_name,
"phone": request.phone,
"referral_code": request.referral_code,
"language": request.language,
"created_at": datetime.utcnow().isoformat(),
"tiki_count": 0,
"trust_score": 0
}
supabase.table("users").insert(user_data).execute()
logger.info(f"✅ User signed up: {request.email}")
return AuthResponse(
user_id=auth_response.user.id,
email=request.email,
access_token=auth_response.session.access_token,
refresh_token=auth_response.session.refresh_token,
first_name=request.first_name,
last_name=request.last_name
)
except Exception as e:
logger.error(f"Error during signup: {e}")
raise HTTPException(status_code=500, detail=str(e))
@api_router.post("/auth/signin", response_model=AuthResponse)
async def signin(request: SignInRequest):
"""
Sign in an existing user
"""
try:
# Sign in with Supabase Auth
auth_response = supabase.auth.sign_in_with_password({
"email": request.email,
"password": request.password,
})
if not auth_response.user:
raise HTTPException(status_code=401, detail="Invalid credentials")
# Get user data from Supabase
user_data = supabase.table("users").select("*").eq("id", auth_response.user.id).execute()
if not user_data.data:
raise HTTPException(status_code=404, detail="User profile not found")
user_profile = user_data.data[0]
logger.info(f"✅ User signed in: {request.email}")
return AuthResponse(
user_id=auth_response.user.id,
email=request.email,
access_token=auth_response.session.access_token,
refresh_token=auth_response.session.refresh_token,
first_name=user_profile.get("first_name", ""),
last_name=user_profile.get("last_name", "")
)
except Exception as e:
logger.error(f"Error during signin: {e}")
raise HTTPException(status_code=401, detail="Invalid credentials")
@api_router.get("/auth/user/{user_id}")
async def get_user_profile(user_id: str):
"""
Get user profile data
"""
try:
user_data = supabase.table("users").select("*").eq("id", user_id).execute()
if not user_data.data:
raise HTTPException(status_code=404, detail="User not found")
return user_data.data[0]
except Exception as e:
logger.error(f"Error fetching user profile: {e}")
raise HTTPException(status_code=500, detail=str(e))
# Include the router in the main app
app.include_router(api_router)
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long