Spaces:
Runtime error
Runtime error
| from datetime import datetime, timezone | |
| from werkzeug.security import generate_password_hash, check_password_hash | |
| from config.database import get_db | |
| from bson import ObjectId | |
| class User: | |
| def __init__(self, username=None, email=None, password=None, preferences=None): | |
| self.username = username | |
| self.email = email | |
| self.password_hash = generate_password_hash(password) if password else None | |
| self.preferences = preferences or {"genres": [], "types": []} | |
| self.created_at = datetime.now(timezone.utc) | |
| self.last_login = None | |
| def save(self): | |
| db = get_db() | |
| user_data = { | |
| "username": self.username, | |
| "email": self.email, | |
| "password_hash": self.password_hash, | |
| "preferences": self.preferences, | |
| "created_at": self.created_at, | |
| "last_login": self.last_login | |
| } | |
| result = db.users.insert_one(user_data) | |
| return str(result.inserted_id) | |
| def find_by_email(email): | |
| db = get_db() | |
| user_data = db.users.find_one({"email": email}) | |
| if user_data: | |
| user = User() | |
| user._id = user_data["_id"] | |
| user.username = user_data["username"] | |
| user.email = user_data["email"] | |
| user.password_hash = user_data["password_hash"] | |
| user.preferences = user_data.get("preferences", {"genres": [], "types": []}) | |
| user.created_at = user_data["created_at"] | |
| user.last_login = user_data.get("last_login") | |
| return user | |
| return None | |
| def find_by_username(username): | |
| db = get_db() | |
| user_data = db.users.find_one({"username": username}) | |
| if user_data: | |
| user = User() | |
| user._id = user_data["_id"] | |
| user.username = user_data["username"] | |
| user.email = user_data["email"] | |
| user.password_hash = user_data["password_hash"] | |
| user.preferences = user_data.get("preferences", {"genres": [], "types": []}) | |
| user.created_at = user_data["created_at"] | |
| user.last_login = user_data.get("last_login") | |
| return user | |
| return None | |
| def find_by_id(user_id): | |
| db = get_db() | |
| try: | |
| user_data = db.users.find_one({"_id": ObjectId(user_id)}) | |
| if user_data: | |
| user = User() | |
| user._id = user_data["_id"] | |
| user.username = user_data["username"] | |
| user.email = user_data["email"] | |
| user.password_hash = user_data["password_hash"] | |
| user.preferences = user_data.get("preferences", {"genres": [], "types": []}) | |
| user.created_at = user_data["created_at"] | |
| user.last_login = user_data.get("last_login") | |
| return user | |
| except: | |
| pass | |
| return None | |
| def check_password(self, password): | |
| return check_password_hash(self.password_hash, password) | |
| def update_last_login(self): | |
| db = get_db() | |
| self.last_login = datetime.now(timezone.utc) | |
| db.users.update_one( | |
| {"_id": self._id}, | |
| {"$set": {"last_login": self.last_login}} | |
| ) | |
| def update_preferences(self, preferences): | |
| db = get_db() | |
| self.preferences = preferences | |
| db.users.update_one( | |
| {"_id": self._id}, | |
| {"$set": {"preferences": preferences}} | |
| ) | |