From dc36b21dccf2d6c75957165e62f2437ca82abd5d Mon Sep 17 00:00:00 2001 From: Blake Ridgway Date: Thu, 3 Apr 2025 10:42:01 -0500 Subject: [PATCH] (refactor): Implement robust logging and database error handling Introduced logging for user operations Added database rollback on user creation failure Enhanced exception handling and error reporting --- services/UserService/user.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/services/UserService/user.py b/services/UserService/user.py index fd0aa3a..b6da4d7 100644 --- a/services/UserService/user.py +++ b/services/UserService/user.py @@ -1,30 +1,42 @@ from models.User.user import User, db +import logging + +logger = logging.getLogger(__name__) + class UserService: def create_user(self, username, password): if not username or not password: raise ValueError("Username and password are required") - + if len(username) < 3 or len(password) < 8: - raise ValueError("Username must be at least 3 characters and password must be at least 8 characters.") - + raise ValueError( + "Username must be at least 3 characters and password must be at least 8 characters." + ) + existing_user = User.query.filter_by(username=username).first() if existing_user: raise ValueError("User already exists") - + new_user = User(username=username, password=password) db.session.add(new_user) - db.session.commit() + try: + db.session.commit() + 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 def verify_user(self, username, password): user = User.query.filter_by(username=username).first() if not user: - print(f"User not found: {username}") + logger.warning(f"User not found: {username}") 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") - - print(f"User verified: {username}") + + logger.info(f"User verified: {username}") return user