| 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. |
| """ |
| |
| if isinstance(user, MongoUser): |
| return ObjectId(user.id) |
| |
| |
| |
| db = MongoDBClient.get_client() |
| |
| |
| mongo_user = db.users.find_one({'email': user.email}) |
| |
| |
| if not mongo_user: |
| mongo_user = db.users.find_one({'username': user.username}) |
| |
| |
| if not mongo_user: |
| new_doc = { |
| 'username': user.username, |
| 'email': user.email, |
| 'password': 'SyncedFromSQLite', |
| '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'] |
|
|