Spaces:
Runtime error
Runtime error
| from flask import Blueprint, request, jsonify | |
| from utils.jwt_helper import decode_jwt | |
| from models.user import User | |
| user_bp = Blueprint('user', __name__) | |
| def get_profile(): | |
| try: | |
| # JWT Authentication | |
| auth_header = request.headers.get('Authorization') | |
| if not auth_header or not auth_header.startswith('Bearer '): | |
| return jsonify({"error": "Missing or invalid Authorization header"}), 401 | |
| token = auth_header.split(" ")[1] | |
| try: | |
| user_data = decode_jwt(token) | |
| user_id = user_data.get("user_id") | |
| except Exception as e: | |
| return jsonify({"error": "Invalid or expired token"}), 401 | |
| # Get user profile | |
| user = User.find_by_id(user_id) | |
| if not user: | |
| return jsonify({"error": "User not found"}), 404 | |
| return jsonify({ | |
| "status": "success", | |
| "user": { | |
| "id": str(user._id), | |
| "username": user.username, | |
| "email": user.email, | |
| "preferences": user.preferences, | |
| "created_at": user.created_at.isoformat(), | |
| "last_login": user.last_login.isoformat() if user.last_login else None | |
| } | |
| }), 200 | |
| except Exception as e: | |
| print(f"Profile error: {e}") | |
| return jsonify({"error": "Internal server error"}), 500 | |
| def update_preferences(): | |
| try: | |
| # JWT Authentication | |
| auth_header = request.headers.get('Authorization') | |
| if not auth_header or not auth_header.startswith('Bearer '): | |
| return jsonify({"error": "Missing or invalid Authorization header"}), 401 | |
| token = auth_header.split(" ")[1] | |
| try: | |
| user_data = decode_jwt(token) | |
| user_id = user_data.get("user_id") | |
| except Exception as e: | |
| return jsonify({"error": "Invalid or expired token"}), 401 | |
| data = request.get_json() | |
| if not data: | |
| return jsonify({"error": "No data provided"}), 400 | |
| preferences = data.get('preferences') | |
| if not preferences or not isinstance(preferences, dict): | |
| return jsonify({"error": "Valid preferences object is required"}), 400 | |
| # Update user preferences | |
| user = User.find_by_id(user_id) | |
| if not user: | |
| return jsonify({"error": "User not found"}), 404 | |
| user.update_preferences(preferences) | |
| return jsonify({ | |
| "status": "success", | |
| "message": "Preferences updated successfully", | |
| "preferences": preferences | |
| }), 200 | |
| except Exception as e: | |
| print(f"Preferences error: {e}") | |
| return jsonify({"error": "Internal server error"}), 500 | |