From 0698ba5c1f2f428d81da2a508b9f80ba04af7971 Mon Sep 17 00:00:00 2001 From: Cipher Vance Date: Tue, 9 Sep 2025 08:32:49 -0500 Subject: [PATCH] refactor(service): enrich UserService.create_user --- services/UserService/user.py | 78 ++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/services/UserService/user.py b/services/UserService/user.py index e1a4485..6f1c030 100644 --- a/services/UserService/user.py +++ b/services/UserService/user.py @@ -1,42 +1,60 @@ -from models.User.user import User, db -import logging - -logger = logging.getLogger(__name__) - +from models.User.user import User +from models.UserProfile.user_profile import UserProfile +from models import db +import re class UserService: - def create_user(self, username, password): + def create_user(self, username, password, email=None, first_name=None, last_name=None): if not username or not password: raise ValueError("Username and password are required") - - if len(username) < 5 or len(password) < 12: - raise ValueError( - "Username must be at least 5 characters and password must be at least 12 characters." - ) - - existing_user = User.query.filter_by(username=username).first() + + if email: + email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' + if not re.match(email_regex, email): + raise ValueError("Invalid email format") + + existing_user = User.query.filter( + (User.username == username) | (User.email == email) + ).first() + if existing_user: - raise ValueError("User already exists") - - new_user = User(username=username, password=password) - db.session.add(new_user) + if existing_user.username == username: + raise ValueError("Username already exists") + else: + raise ValueError("Email already exists") + + if len(password) < 8: + raise ValueError("Password must be at least 8 characters long") + try: + new_user = User( + username=username, + email=email or "", + password=password + ) + + db.session.add(new_user) + db.session.flush() + + user_profile = UserProfile( + user_id=new_user.id, + first_name=first_name or "", + last_name=last_name or "", + bio="", + profile_picture="" + ) + + db.session.add(user_profile) db.session.commit() + + return new_user + except Exception as e: db.session.rollback() - logger.error(f"Error creating user: {e}") - raise ValueError("Could not create user") from e - return new_user - + raise Exception(f"Error creating user: {str(e)}") + def verify_user(self, username, password): user = User.query.filter_by(username=username).first() - if not user: - logger.warning(f"User not found: {username}") + if not user or not user.check_password(password): raise ValueError("Invalid username or password") - - if not user.check_password(password): - logger.warning(f"Invalid password for user: {username}") - raise ValueError("Invalid username or password") - - logger.info(f"User verified: {username}") - return user + return user \ No newline at end of file