Add helper functions for User
This commit is contained in:
parent
af273f1413
commit
c94032d2a8
80
helpers/user_helpers.py
Normal file
80
helpers/user_helpers.py
Normal 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
|
Loading…
x
Reference in New Issue
Block a user