 dc36b21dcc
			
		
	
	
		dc36b21dcc
		
	
	
	
	
		
			
			Introduced logging for user operations Added database rollback on user creation failure Enhanced exception handling and error reporting
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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."
 | |
|             )
 | |
| 
 | |
|         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)
 | |
|         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:
 | |
|             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")
 | |
| 
 | |
|         logger.info(f"User verified: {username}")
 | |
|         return user
 |