feat: Add helper functions for Name
This commit is contained in:
parent
7b08ec1553
commit
5e5c9496fe
72
helpers/name_helpers.py
Normal file
72
helpers/name_helpers.py
Normal 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
|
Loading…
x
Reference in New Issue
Block a user