diff --git a/helpers/name_helpers.py b/helpers/name_helpers.py new file mode 100644 index 0000000..81d9193 --- /dev/null +++ b/helpers/name_helpers.py @@ -0,0 +1,72 @@ +import random +import string +from typing import Optional +from sqlalchemy.orm import Session +from models.name import Name + +def generate_random_name_code(length: int = 6) -> str: + """ + Generate a random name code of the specified length. + + Args: + length (int): Length of the name code (default: 6). + + Returns: + str: Random name code. + """ + characters = string.ascii_uppercase + string.digits + return ''.join(random.choice(characters) for _ in range(length)) + +def get_name_by_code(db: Session, name_code: str) -> Optional[Name]: + """ + Get a name by its code. + + Args: + db (Session): SQLAlchemy database session. + name_code (str): Name code to search for. + + Returns: + Optional[Name]: Name object if found, None otherwise. + """ + return db.query(Name).filter(Name.name_code == name_code).first() + +def create_name(db: Session, name_code: Optional[str] = None) -> Name: + """ + Create a new name with a unique name code. + + Args: + db (Session): SQLAlchemy database session. + name_code (Optional[str]): Custom name code (default: None). + + Returns: + Name: Created name object. + """ + if name_code is None: + name_code = generate_random_name_code() + + # Check if the name code already exists + existing_name = get_name_by_code(db, name_code) + if existing_name: + raise ValueError(f"Name code '{name_code}' already exists.") + + db_name = Name(name_code=name_code) + db.add(db_name) + db.commit() + db.refresh(db_name) + + return db_name + +def generate_name_code(db: Session) -> str: + """ + Generate a unique name code. + + Args: + db (Session): SQLAlchemy database session. + + Returns: + str: Unique name code. + """ + while True: + name_code = generate_random_name_code() + if not get_name_by_code(db, name_code): + return name_code \ No newline at end of file