| import json |
| import logging |
| from controllers.mongo import users_collection |
| from redis_client import redis_client, CACHE_TTL |
| from bson import ObjectId |
|
|
| logger = logging.getLogger(__name__) |
|
|
| def get_profile(user_id: str): |
| cache_key = f"user_profile:{user_id}" |
| try: |
| cached_profile = redis_client.get(cache_key) |
| if cached_profile: |
| return json.loads(cached_profile) |
| except Exception as e: |
| logger.warning(f"Redis get error for {cache_key}: {e}") |
| user = users_collection.find_one({"_id": ObjectId(user_id)}, {"password": 0}) |
| print(user) |
| if not user: |
| return None |
| |
| if "_id" in user: |
| user["_id"] = str(user["_id"]) |
|
|
| try: |
| redis_client.setex(cache_key, CACHE_TTL, json.dumps(user)) |
| except Exception as e: |
| logger.warning(f"Redis set error for {cache_key}: {e}") |
|
|
| return user |
|
|
|
|
| def update_profile(user_id: str, payload: dict): |
| users_collection.update_one( |
| {"_id": user_id}, |
| {"$set": payload} |
| ) |
| |
| try: |
| redis_client.delete(f"user_profile:{user_id}") |
| except Exception as e: |
| logger.warning(f"Redis delete error for user_profile:{user_id}: {e}") |
| |
| return get_profile(user_id) |
|
|
|
|
| def delete_profile_field(user_id: str, field: str): |
| users_collection.update_one( |
| {"_id": user_id}, |
| {"$unset": {field: ""}} |
| ) |
| |
| try: |
| redis_client.delete(f"user_profile:{user_id}") |
| except Exception as e: |
| logger.warning(f"Redis delete error for user_profile:{user_id}: {e}") |