hng-68xxzk/helpers/intern_helpers.py
2025-03-26 12:37:25 +01:00

78 lines
2.0 KiB
Python

from typing import List, Optional
import re
from pydantic import EmailStr, validator
from models import Intern
def validate_phone_number(phone_number: str) -> bool:
"""
Validate a phone number format.
Args:
phone_number: The phone number to validate
Returns:
bool: True if phone number format is valid, False otherwise
"""
pattern = r'^\+?\d{10,13}$'
return bool(re.match(pattern, phone_number))
def get_all_interns(db_session) -> List[Intern]:
"""
Get a list of all interns from the database.
Args:
db_session: The database session
Returns:
List[Intern]: A list of Intern objects
"""
return db_session.query(Intern).all()
def get_intern_by_email(db_session, email: EmailStr) -> Optional[Intern]:
"""
Get an intern by their email address.
Args:
db_session: The database session
email: Email to search for
Returns:
Intern object if found, None otherwise
"""
return db_session.query(Intern).filter(Intern.email == email).first()
class InternBase:
first_name: str
last_name: str
email: EmailStr
phone_number: str
track: str
bio: Optional[str] = None
@validator('phone_number')
def validate_phone_number(cls, phone_number):
if not validate_phone_number(phone_number):
raise ValueError('Invalid phone number format')
return phone_number
def create_intern(db_session, intern_data: InternBase) -> Intern:
"""
Create a new intern in the database.
Args:
db_session: The database session
intern_data: The data for the new intern
Returns:
Intern: The created Intern object
"""
existing_intern = get_intern_by_email(db_session, intern_data.email)
if existing_intern:
raise ValueError('Email already registered')
new_intern = Intern(**intern_data.dict())
db_session.add(new_intern)
db_session.commit()
db_session.refresh(new_intern)
return new_intern