feat: Add helper functions for User

This commit is contained in:
Backend IM Bot 2025-04-11 06:07:20 +00:00
parent d015f492f6
commit abc8903ffa

80
helpers/user_helpers.py Normal file
View File

@ -0,0 +1,80 @@
from typing import Optional
from pydantic import EmailStr, validator
from sqlalchemy.orm import Session
from models.user import User
from schemas.user import UserCreate
def validate_phone_number(phone: str) -> bool:
"""
Validate a phone number format.
Args:
phone: The phone number to validate
Returns:
bool: True if phone number format is valid, False otherwise
"""
# Implement phone number validation logic here
# Example: Check if the phone number starts with a '+' and contains only digits
pattern = r'^\+?\d+$'
return bool(re.match(pattern, phone))
def get_user_by_phone(db: Session, phone: str) -> Optional[User]:
"""
Get a user by their phone number.
Args:
db: Database session
phone: Phone number to search for
Returns:
User object if found, None otherwise
"""
return db.query(User).filter(User.phone == phone).first()
def create_user(db: Session, user_data: UserCreate) -> User:
"""
Create a new user with phone number and validation.
Args:
db: Database session
user_data: User data for creation
Returns:
User object if created successfully
Raises:
ValueError: If email or phone number is invalid
Exception: If user with the same email or phone number already exists
"""
# Check if email is valid
if not validate_email(user_data.email):
raise ValueError("Invalid email format")
# Check if phone number is valid
if not validate_phone_number(user_data.phone):
raise ValueError("Invalid phone number format")
# Check if user with the same email already exists
existing_user = get_user_by_email(db, user_data.email)
if existing_user:
raise Exception("Email already registered")
# Check if user with the same phone number already exists
existing_user = get_user_by_phone(db, user_data.phone)
if existing_user:
raise Exception("Phone number already registered")
# Create the user
db_user = User(
username=user_data.username,
email=user_data.email,
phone=user_data.phone,
password=user_data.password # In a real app, hash this password
)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user