dev2004v's picture
Upload 10 files
f2533f4 verified
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)
@staticmethod
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
@staticmethod
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
@staticmethod
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}}
)