mongog setup

This commit is contained in:
2026-03-04 12:23:13 +05:30
parent bed32863da
commit a9eaa7599c
32 changed files with 2577 additions and 670 deletions

99
backend/routers/users.py Normal file
View File

@@ -0,0 +1,99 @@
"""User management routes"""
from fastapi import APIRouter, HTTPException, Header
from pymongo.errors import DuplicateKeyError
from db import get_database
from models import UserCreate, UserUpdate, User
from datetime import datetime
from typing import Optional, List
router = APIRouter()
@router.post("/register", response_model=dict)
async def register_user(user_data: UserCreate):
"""
Register a new user (called after Firebase Google Auth)
Stores user profile in MongoDB
"""
db = get_database()
try:
user_doc = {
"email": user_data.email,
"displayName": user_data.displayName or user_data.email.split("@")[0],
"photoURL": user_data.photoURL,
"createdAt": datetime.utcnow(),
"updatedAt": datetime.utcnow(),
"theme": "light"
}
result = db.users.insert_one(user_doc)
user_doc["id"] = str(result.inserted_id)
return {
"id": user_doc["id"],
"email": user_doc["email"],
"displayName": user_doc["displayName"],
"message": "User registered successfully"
}
except DuplicateKeyError:
raise HTTPException(status_code=400, detail="User already exists")
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.get("/by-email/{email}", response_model=dict)
async def get_user_by_email(email: str):
"""Get user profile by email (called after Firebase Auth)"""
db = get_database()
user = db.users.find_one({"email": email})
if not user:
raise HTTPException(status_code=404, detail="User not found")
user["id"] = str(user["_id"])
return user
@router.put("/update/{user_id}", response_model=dict)
async def update_user(user_id: str, user_data: UserUpdate):
"""Update user profile"""
db = get_database()
from bson import ObjectId
try:
update_data = user_data.model_dump(exclude_unset=True)
update_data["updatedAt"] = datetime.utcnow()
result = db.users.update_one(
{"_id": ObjectId(user_id)},
{"$set": update_data}
)
if result.matched_count == 0:
raise HTTPException(status_code=404, detail="User not found")
return {"message": "User updated successfully"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.delete("/{user_id}")
async def delete_user(user_id: str):
"""Delete user account and all associated data"""
db = get_database()
from bson import ObjectId
try:
# Delete user
db.users.delete_one({"_id": ObjectId(user_id)})
# Delete all entries by user
db.entries.delete_many({"userId": user_id})
# Delete user settings
db.settings.delete_one({"userId": user_id})
return {"message": "User and associated data deleted"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))