feat: Add helper functions for Name

This commit is contained in:
Backend IM Bot 2025-04-10 14:29:31 +00:00
parent 7b08ec1553
commit 5e5c9496fe

72
helpers/name_helpers.py Normal file
View File

@ -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