Add helper functions for Intern
This commit is contained in:
parent
3e77f22753
commit
a1c0b7bee4
78
helpers/intern_helpers.py
Normal file
78
helpers/intern_helpers.py
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
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
|
Loading…
x
Reference in New Issue
Block a user