diff --git a/helpers/intern_helpers.py b/helpers/intern_helpers.py new file mode 100644 index 0000000..d7258d9 --- /dev/null +++ b/helpers/intern_helpers.py @@ -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 \ No newline at end of file