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