Add helper functions for User

This commit is contained in:
Backend IM Bot 2025-03-27 14:05:10 -05:00
parent af273f1413
commit c94032d2a8

80
helpers/user_helpers.py Normal file
View File

@ -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