From c94032d2a8a7fc45b80e779ba61bf408108be54c Mon Sep 17 00:00:00 2001 From: Backend IM Bot Date: Thu, 27 Mar 2025 14:05:10 -0500 Subject: [PATCH] Add helper functions for User --- helpers/user_helpers.py | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 helpers/user_helpers.py diff --git a/helpers/user_helpers.py b/helpers/user_helpers.py new file mode 100644 index 0000000..616da70 --- /dev/null +++ b/helpers/user_helpers.py @@ -0,0 +1,80 @@ +from typing import Optional +from pydantic import BaseModel, EmailStr, validator +from sqlalchemy.orm import Session +from models import User + +class UserCreate(BaseModel): + username: str + email: EmailStr + password: str + + @validator('username') + def validate_username(cls, username): + if len(username) < 3: + raise ValueError('Username must be at least 3 characters long') + return username + + @validator('password') + def validate_password(cls, password): + if len(password) < 8: + raise ValueError('Password must be at least 8 characters long') + return password + +def validate_email(email: str) -> bool: + """ + Validate an email address format. + + Args: + email: The email address to validate + + Returns: + bool: True if email format is valid, False otherwise + """ + pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' + return bool(re.match(pattern, email)) + +def get_user_by_email(db: Session, email: str) -> Optional[User]: + """ + Get a user by their email address. + + Args: + db: Database session + email: Email to search for + + Returns: + User object if found, None otherwise + """ + return db.query(User).filter(User.email == email).first() + +def create_user(db: Session, user_data: UserCreate) -> User: + """ + Create a new user with validation and error handling. + + Args: + db: Database session + user_data: User data for creation + + Returns: + User object if created successfully, raises ValueError otherwise + """ + # Check if email is valid + if not validate_email(user_data.email): + raise ValueError("Invalid email format") + + # Check if user already exists + existing_user = get_user_by_email(db, user_data.email) + if existing_user: + raise ValueError("Email already registered") + + # Create the user + db_user = User( + username=user_data.username, + email=user_data.email, + password=user_data.password # In a real app, hash this password + ) + + db.add(db_user) + db.commit() + db.refresh(db_user) + + return db_user \ No newline at end of file