diff --git a/app/app.py b/app/app.py index e91ef7f..aeaef85 100644 --- a/app/app.py +++ b/app/app.py @@ -1,5 +1,4 @@ -# app/app.py - + # app/app.py import os from fastapi import FastAPI, Security, File, UploadFile from fastapi.middleware.cors import CORSMiddleware @@ -39,6 +38,8 @@ allow_origins=[ "http://localhost:5000", "http://127.0.0.1:5000", + "http://localhost:3000", + "http://127.0.0.1:3000", ], allow_credentials=True, allow_methods=["*"], diff --git a/app/user.py b/app/user.py index b3cef55..09c7c3b 100644 --- a/app/user.py +++ b/app/user.py @@ -4,7 +4,7 @@ import razorpay from fastapi.responses import JSONResponse from starlette import status -from firebase_admin import auth +from firebase_admin import auth, firestore from .firebase_init import db from datetime import datetime from .schema import CreateOrderSchema @@ -15,19 +15,61 @@ )) async def get_user_details(id_token: str): + """ + Verify Firebase ID token and get/create user in Firestore + """ try: + # Verify Firebase token decoded_token = auth.verify_id_token(id_token) uid = decoded_token["uid"] + email = decoded_token.get("email", "") + # Check if user exists in Firestore user_doc = db.collection("users").document(uid).get() + if user_doc.exists: + print(f"✅ User {email} found in Firestore") return user_doc.to_dict(), uid - return None, None + # ✅ AUTO-CREATE USER IF DOESN'T EXIST + print(f"⚠️ User {email} not found in Firestore, creating profile...") + + # Extract college_id from email domain + # Example: jeet.sarkar.cse.2024@tint.edu.in → tint + college_id = "default_college" + college_name = "Default College" + + if "@" in email: + domain_parts = email.split("@")[1].split(".") + if len(domain_parts) >= 2: + college_id = domain_parts[0] # Gets 'tint' from 'tint.edu.in' + college_name = college_id.upper() # Simple mapping + + # Create new user document + new_user_data = { + "uid": uid, + "email": email, + "college_id": college_id, + "college_name": college_name, + "role": "student", + "created_at": firestore.SERVER_TIMESTAMP + } + + # Save to Firestore + db.collection("users").document(uid).set(new_user_data) + print(f"✅ Created user profile for {email} with college_id: {college_id}") + + # Return the created user data (without SERVER_TIMESTAMP for immediate use) + new_user_data["created_at"] = datetime.utcnow() + return new_user_data, uid - except Exception: + except Exception as e: + print(f"❌ Error in get_user_details: {e}") + import traceback + traceback.print_exc() return None, None + def serialize_firestore_data(data: dict): for k, v in data.items(): if isinstance(v, datetime): @@ -180,4 +222,4 @@ async def create_payment_order(order_data: CreateOrderSchema, id_token: str): return JSONResponse( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content={"message": f"Payment Error: {str(e)}"} - ) + ) \ No newline at end of file diff --git a/app/webhook.py b/app/webhook.py index 57b5e67..970c399 100644 --- a/app/webhook.py +++ b/app/webhook.py @@ -1,3 +1,4 @@ + # app/webhook.py import os