FinMK / backend /finance /utils_mongo.py
Kumar
Refactor: Exclude PDF and CSV files from Git to fix HF push error
24e6f5b
from bson import ObjectId
from expense_tracker.utils import MongoDBClient
from users.mongo_auth import MongoUser
from datetime import datetime
def get_user_db_id(user):
"""
Returns the valid MongoDB ObjectId for a given user.
- If user is a MongoUser (from App Login), returns its _id directly.
- If user is a Django User (from Admin Login), finds or creates a corresponding
MongoDB document based on email/username and returns that _id.
"""
# Case 1: Already a MongoUser (has hex string id)
if isinstance(user, MongoUser):
return ObjectId(user.id)
# Case 2: Django User (Integer ID) -> Logic to Sync/Find in Mongo
# We assume 'user' is a standard Django User model instance
db = MongoDBClient.get_client()
# 1. Try finding by Email (most reliable link)
mongo_user = db.users.find_one({'email': user.email})
# 2. If not found by email, try username
if not mongo_user:
mongo_user = db.users.find_one({'username': user.username})
# 3. If still not found, create a new Mongo Doc for this Admin
if not mongo_user:
new_doc = {
'username': user.username,
'email': user.email,
'password': 'SyncedFromSQLite', # Placeholder, auth is handled by SQLite
'is_active': user.is_active,
'is_staff': user.is_staff,
'is_superuser': user.is_superuser,
'date_joined': datetime.now(),
'financial_data': {
'incomes': [],
'expenses': []
},
'budgets': []
}
result = db.users.insert_one(new_doc)
return result.inserted_id
return mongo_user['_id']